mirror of
https://github.com/pocoproject/poco.git
synced 2026-01-03 11:21:00 +01:00
* fix(Data): Refactor ODBC tests and fix testReconnect TypeInfo caching #5136 - Add TypeInfo::reset() to clear cached type info, called on session close to fix testReconnect failing when connection is reestablished - Move common test methods from ODBC SQLExecutor to shared DataTest SQLExecutor for better code reuse across database backends - Improve error message in hasTransactionIsolation() to be more descriptive - Refactor ODBC MySQL and PostgreSQL test executors to delegate to shared base implementation - Update MySQL, PostgreSQL, and SQLite test suites to use refactored executor methods - Add Nix shell environments for MySQL and PostgreSQL test databases with auto-start/stop and ODBC driver configuration * chore: pass executor name * chore: nix-shell documentation * chore: nix-shell documentation * feat: add optional/tuple tests to ODBC Oracle and SQLServer #5136 * fix(ODBC): add missing functions implementations #5136
145 lines
4.0 KiB
Nix
145 lines
4.0 KiB
Nix
# Nix shell environment for running Poco::Data::MySQL tests.
|
|
#
|
|
# Install Nix (if not already installed):
|
|
# sh <(curl -L https://nixos.org/nix/install) --daemon
|
|
#
|
|
# Usage:
|
|
# nix-shell [--pure]
|
|
#
|
|
# (--pure is recommended to avoid interference from host environment)
|
|
#
|
|
# This sets up MariaDB with ODBC driver, creates a test database,
|
|
# and configures the Poco build environment. The database starts
|
|
# automatically and stops when the shell exits.
|
|
#
|
|
# Test database: pocotest (user: pocotest, password: pocotest)
|
|
|
|
{ pkgs ? import <nixpkgs> {} }:
|
|
|
|
let
|
|
dataDir = builtins.toString ./.nix-data;
|
|
mysqlDataDir = "${dataDir}/mysql";
|
|
in
|
|
pkgs.mkShell {
|
|
buildInputs = with pkgs; [
|
|
# Database
|
|
mariadb
|
|
mariadb-connector-c
|
|
unixODBC
|
|
unixODBCDrivers.mariadb
|
|
libtool # for libltdl
|
|
|
|
# Build tools
|
|
cmake
|
|
pkg-config
|
|
gnumake
|
|
gcc
|
|
clang
|
|
openssl
|
|
zlib
|
|
pcre2
|
|
|
|
# Standard utilities needed by Poco build
|
|
coreutils
|
|
findutils
|
|
gnugrep
|
|
gnused
|
|
gawk
|
|
hostname
|
|
which
|
|
procps # ps, pgrep, etc.
|
|
inetutils # netstat, etc.
|
|
];
|
|
|
|
LIBRARY_PATH = "${pkgs.mariadb-connector-c}/lib";
|
|
|
|
# ODBC configuration for Poco build
|
|
POCO_ODBC_INCLUDE = "${pkgs.unixODBC}/include";
|
|
POCO_ODBC_LIB = "${pkgs.unixODBC}/lib";
|
|
|
|
ODBCSYSINI = "${dataDir}/odbc";
|
|
ODBCINI = "${dataDir}/odbc/odbc.ini";
|
|
|
|
shellHook = ''
|
|
export DATA_DIR="${dataDir}"
|
|
export MYSQL_DATADIR="${mysqlDataDir}"
|
|
|
|
mkdir -p "$DATA_DIR/include" "$MYSQL_DATADIR" "$ODBCSYSINI"
|
|
|
|
# Create mysql -> mariadb symlink for header compatibility
|
|
ln -sfn ${pkgs.mariadb-connector-c.dev}/include/mariadb "$DATA_DIR/include/mysql"
|
|
export C_INCLUDE_PATH="$DATA_DIR/include''${C_INCLUDE_PATH:+:$C_INCLUDE_PATH}"
|
|
export CPLUS_INCLUDE_PATH="$DATA_DIR/include''${CPLUS_INCLUDE_PATH:+:$CPLUS_INCLUDE_PATH}"
|
|
|
|
# Configure Poco and source environment
|
|
POCO_BASE="$(cd "$DATA_DIR/../../.." && pwd)"
|
|
(cd "$POCO_BASE" && ./configure)
|
|
source "$POCO_BASE/poco_env.bash"
|
|
|
|
# Add MariaDB ODBC driver library path (after poco_env.bash which sets LD_LIBRARY_PATH)
|
|
export LD_LIBRARY_PATH="${pkgs.unixODBCDrivers.mariadb}/lib/mariadb''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
|
|
cat > "$ODBCSYSINI/odbcinst.ini" << 'EOF'
|
|
[MariaDB]
|
|
Description = MariaDB ODBC driver
|
|
Driver = ${pkgs.unixODBCDrivers.mariadb}/lib/mariadb/libmaodbc.so
|
|
FileUsage = 1
|
|
EOF
|
|
|
|
cat > "$ODBCINI" << 'EOF'
|
|
[poco_mysql]
|
|
Description = Poco MySQL Test Database
|
|
Driver = MariaDB
|
|
Server = 127.0.0.1
|
|
Port = 3306
|
|
Database = pocotest
|
|
User = pocotest
|
|
Password = pocotest
|
|
EOF
|
|
|
|
if [ ! -d "$MYSQL_DATADIR/mysql" ]; then
|
|
echo "Initializing MariaDB..."
|
|
mysql_install_db --datadir="$MYSQL_DATADIR" --auth-root-authentication-method=normal
|
|
fi
|
|
|
|
start_mysql() {
|
|
if ! pgrep -f "mariadbd.*datadir=$MYSQL_DATADIR" > /dev/null; then
|
|
echo "Starting MariaDB..."
|
|
mariadbd --datadir="$MYSQL_DATADIR" --socket="$DATA_DIR/mysql.sock" --port=3306 --bind-address=127.0.0.1 &
|
|
sleep 3
|
|
mariadb -S "$DATA_DIR/mysql.sock" -u root << 'EOSQL'
|
|
CREATE DATABASE IF NOT EXISTS pocotest;
|
|
CREATE USER IF NOT EXISTS 'pocotest'@'localhost' IDENTIFIED BY 'pocotest';
|
|
CREATE USER IF NOT EXISTS 'pocotest'@'127.0.0.1' IDENTIFIED BY 'pocotest';
|
|
GRANT ALL PRIVILEGES ON pocotest.* TO 'pocotest'@'localhost';
|
|
GRANT ALL PRIVILEGES ON pocotest.* TO 'pocotest'@'127.0.0.1';
|
|
GRANT SUPER ON *.* TO 'pocotest'@'localhost';
|
|
GRANT SUPER ON *.* TO 'pocotest'@'127.0.0.1';
|
|
FLUSH PRIVILEGES;
|
|
EOSQL
|
|
echo "MariaDB started"
|
|
else
|
|
echo "MariaDB already running"
|
|
fi
|
|
}
|
|
|
|
stop_mysql() {
|
|
pgrep -f "mariadbd.*datadir=$MYSQL_DATADIR" > /dev/null && \
|
|
mariadb-admin -S "$DATA_DIR/mysql.sock" -u root shutdown 2>/dev/null || echo "MariaDB not running"
|
|
}
|
|
|
|
trap stop_mysql EXIT
|
|
|
|
export -f start_mysql stop_mysql
|
|
|
|
# Auto-start database
|
|
start_mysql
|
|
|
|
echo ""
|
|
echo "=== Poco MySQL Test Environment ==="
|
|
echo "MariaDB auto-started (will stop on shell exit)"
|
|
echo "Connect: mariadb -S $DATA_DIR/mysql.sock -u pocotest -ppocotest pocotest"
|
|
echo ""
|
|
'';
|
|
}
|