Skip to content

chore: mysql dialect & test support #423

chore: mysql dialect & test support

chore: mysql dialect & test support #423

name: Compatibility Test - PostgreSQL
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- main
paths-ignore:
- '**/*.md'
- '**/*.jpg'
- '**/*.png'
- '**/README.*'
- '**/LICENSE.*'
- 'docs/**'
- 'ISSUE_TEMPLATE/**'
env:
BUILD_CONFIG: Release
WIX_VERSION: 5.0.2
DRIVER_NAME_ANSI: 'AWS Advanced ODBC Wrapper Ansi'
DRIVER_NAME_UNICODE: 'AWS Advanced ODBC Wrapper Unicode'
LOCAL_DB_UID: 'test_username'
LOCAL_DB_PWD: 'test_password'
LOCAL_DB_NAME: 'test_database'
permissions:
contents: read
jobs:
# Build / Get Underlying Drivers
build-win-psqlodbc:
name: Windows - Build psqlODBC
runs-on: windows-latest
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc
key: ${{ runner.os }}-psqlodbc-driver
- name: Download psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
mkdir psqlodbc
cd psqlodbc
$DOWNLOAD_URL=$(gh api repos/postgresql-interfaces/psqlodbc/releases --jq '.[0].assets.[] | select(.name=="psqlodbc_x64.msi") | .browser_download_url')
curl.exe -L ${DOWNLOAD_URL} --output psqlodbc_x64.msi
env:
GH_TOKEN: ${{ github.token }}
build-macos-psqlodbc:
name: MacOS - Build psqlODBC
runs-on: macos-15
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
- name: Checkout psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
uses: actions/checkout@v4
with:
repository: postgresql-interfaces/psqlodbc
path: psqlodbc
- name: Install Dependencies
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
brew update && brew upgrade && brew cleanup
brew install gcc autoconf automake unixodbc libtool postgresql icu4c
- name: Build psqlodbc
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
working-directory: psqlodbc
run: |
./bootstrap
./configure
make
build-linux-psqlodbc:
name: Linux Ubuntu - Build psqlODBC
runs-on: ubuntu-latest
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
- name: Checkout psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
uses: actions/checkout@v4
with:
repository: postgresql-interfaces/psqlodbc
path: psqlodbc
- name: Install Dependencies
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
sudo apt update
sudo apt-get install autoconf automake libtool postgresql libpq-dev
- name: Download & Build unixODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
curl -L https://www.unixodbc.org/unixODBC-2.3.12.tar.gz -o unixODBC.tar
tar xf unixODBC.tar
cd unixODBC-2.3.12
./configure && make
sudo make install
- name: Build psqlodbc
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
working-directory: psqlodbc
run: |
./bootstrap
./configure
make
build-win-mysql:
name: Windows - Build MySQL Connector ODBC
runs-on: windows-latest
steps:
- name: Retrieve mysql-connector Cache
id: cache-mysql-connector
uses: actions/cache@v4
with:
path: mysql-connector
key: ${{ runner.os }}-mysql-driver
- name: Download mysql-connector
if: ${{steps.cache-mysql-connector.outputs.cache-hit != 'true'}}
run: |
mkdir mysql-connector
cd mysql-connector
curl.exe -L "https://dev.mysql.com/get/Downloads/Connector-ODBC/9.5/mysql-connector-odbc-9.5.0-winx64.msi" --output mysql-connector_x64.msi
build-macos-mysql:
name: MacOS - Build MySQL Connector ODBC
runs-on: macos-15
steps:
- name: Retrieve mysql-connector Cache
id: cache-mysql-connector
uses: actions/cache@v4
with:
path: mysql-connector/
key: ${{ runner.os }}-mysql-driver
- name: Download mysql-connector
if: ${{steps.cache-mysql-connector.outputs.cache-hit != 'true'}}
run: |
mkdir mysql-connector
curl -L "https://dev.mysql.com/get/Downloads/Connector-ODBC/9.5/mysql-connector-odbc-9.5.0-macos15-arm64.tar.gz" --output mysql-connector_arm64.tar.gz
tar xvf mysql-connector_arm64.tar.gz --strip-components 1 -C mysql-connector
build-linux-mysql:
name: Linux Ubuntu - Build MySQL Connector ODBC
runs-on: ubuntu-latest
steps:
- name: Retrieve mysql-connector Cache
id: cache-mysql-connector
uses: actions/cache@v4
with:
path: mysql-connector/
key: ${{ runner.os }}-mysql-driver
- name: Download mysql-connector
if: ${{steps.cache-mysql-connector.outputs.cache-hit != 'true'}}
run: |
mkdir mysql-connector
cd mysql-connector
curl \
-L "https://dev.mysql.com/get/Downloads/Connector-ODBC/9.5/mysql-connector-odbc_9.5.0-1ubuntu24.04_amd64.deb" \
--output mysql-connector_x64.deb
# Build Wrapper & Run Tests
test-win-compat:
name: Windows - Compatibility Test
needs: [build-win-psqlodbc, build-win-mysql]
runs-on: windows-latest
steps:
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_win.ps1 ${{env.BUILD_CONFIG}}
- name: Setup Dotnet for WiX
uses: actions/setup-dotnet@v4
- name: Install WiX
shell: cmd
run: |
dotnet tool install --global wix --version ${{env.WIX_VERSION}}
wix extension add --global WixToolset.UI.wixext/${{env.WIX_VERSION}}
- name: Run build installer script
shell: pwsh
run: |
./installer/build_installer.ps1 ${{env.BUILD_CONFIG}}
- name: Install driver
shell: pwsh
working-directory: installer
run: Start-Process msiexec "/lp! .\test.log /i aws-advanced-odbc-wrapper.msi /quiet /norestart" -Wait;
# Setup PostgreSQL
- name: Retrieve psqlODBC Cache
uses: actions/cache@v4
with:
path: psqlodbc
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Install psqlODBC Driver
shell: pwsh
working-directory: psqlodbc
run: |
Start-Process msiexec "/i psqlodbc_x64.msi /quiet /norestart" -Wait;
- name: Setup Local PostgreSQL Server
uses: ikalnytskyi/action-setup-postgres@v7
with:
username: ${{env.LOCAL_DB_UID}}
password: ${{env.LOCAL_DB_PWD}}
database: ${{env.LOCAL_DB_NAME}}
port: 5432
postgres-version: 17
ssl: true
# Setup MySQL
- name: Retrieve MySQL Cache
uses: actions/cache@v4
with:
path: mysql-connector/
key: ${{ runner.os }}-mysql-driver
fail-on-cache-miss: true
- name: Install MySQL Connector ODBC
shell: pwsh
working-directory: mysql-connector
run: |
Start-Process msiexec "/i mysql-connector_x64.msi /quiet /norestart" -Wait;
- name: Setup Local MySQL
uses: kayqueGovetri/[email protected]
with:
mysql_root_password: ${{env.LOCAL_DB_PWD}}
mysql_database: ${{env.LOCAL_DB_NAME}}
mysql_user: ${{env.LOCAL_DB_UID}}
mysql_user_password: ${{env.LOCAL_DB_PWD}}
mysql_port: 3306
- name: Build Compatibility Tests
run: |
cmake -S test/compatibility -B build_test
cmake --build build_test --config ${{env.BUILD_CONFIG}}
- name: Install PostgreSQL Ansi DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name wrapper-pg-dsn `
-DriverName "${{ env.DRIVER_NAME_ANSI }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=localhost", `
"Database=${{env.LOCAL_DB_NAME}}", `
"Port=5432", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\psqlODBC\1700\bin\podbc30a.dll")
- name: Configure Base PostgreSQL DSN
run: |
Add-OdbcDsn -Name pg-dsn `
-DriverName "PostgreSQL ANSI(x64)" `
-DsnType User `
-SetPropertyValue `
@( `
"SERVER=localhost", `
"PORT=5432") `
- name: Run Compatibility Tests for PostgreSQL
run: |
./build_test/${{env.BUILD_CONFIG}}/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '5432'
TEST_DSN: wrapper-pg-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: C:\Program Files\psqlODBC\1700\bin\podbc30a.dll
TEST_BASE_DSN: pg-dsn
- name: Compare Test Results
run: |
python3 -m venv venv
.\venv\Scripts\Activate.ps1
pip3 install deepdiff
python test/compatibility/compare_results.py wrapper-pg-dsn pg-dsn
- name: Install MySQL Ansi DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name wrapper-mysql-dsn `
-DriverName "${{ env.DRIVER_NAME_ANSI }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=localhost", `
"Database=${{env.LOCAL_DB_NAME}}", `
"Port=3306", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\MySQL\MySQL Connector ODBC 9.5\myodbc9a.dll")
- name: Configure Base MySQL DSN
run: |
Add-OdbcDsn -Name mysql-dsn `
-DriverName "MySQL ODBC 9.5 ANSI Driver" `
-DsnType User `
-SetPropertyValue `
@( `
"SERVER=localhost", `
"PORT=3306") `
- name: Run Compatibility Tests for MySQL
run: |
./build_test/${{env.BUILD_CONFIG}}/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '3306'
TEST_DSN: wrapper-mysql-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: C:\Program Files\MySQL\MySQL Connector ODBC 9.5\myodbc9a.dll
TEST_BASE_DSN: mysql-dsn
- name: Compare Test Results
run: |
python3 -m venv venv
.\venv\Scripts\Activate.ps1
pip3 install deepdiff
python test/compatibility/compare_results.py wrapper-mysql-dsn mysql-dsn
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-api-compatibility-test-results-windows
path: |
wrapper-pg-dsn/
pg-dsn/
wrapper-mysql-dsn/
mysql-dsn/
test-macos-compat:
name: MacOS - Compatibility Test
needs: [build-macos-psqlodbc, build-macos-mysql]
runs-on: macos-15
steps:
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
brew update && brew upgrade && brew cleanup
brew install cmake unixodbc postgresql curl openssl zlib icu4c
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=OFF -DBUILD_UNIT_TEST=OFF -DCMAKE_OSX_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/
cmake --build build
# Setup PostgreSQL
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Setup Local PostgreSQL Server
uses: ikalnytskyi/action-setup-postgres@v7
with:
username: ${{env.LOCAL_DB_UID}}
password: ${{env.LOCAL_DB_PWD}}
database: ${{env.LOCAL_DB_NAME}}
port: 5432
postgres-version: 17
ssl: true
# Setup MySQL
- name: Retrieve MySQL Cache
uses: actions/cache@v4
with:
path: mysql-connector/
key: ${{ runner.os }}-mysql-driver
fail-on-cache-miss: true
- name: Setup Local MySQL
uses: kayqueGovetri/[email protected]
with:
mysql_root_password: ${{env.LOCAL_DB_PWD}}
mysql_database: ${{env.LOCAL_DB_NAME}}
mysql_user: ${{env.LOCAL_DB_UID}}
mysql_user_password: ${{env.LOCAL_DB_PWD}}
mysql_port: 3306
- name: Build Compatibility Tests
run: |
cmake -S test/compatibility -B test-compatibility \
-D TEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.dylib" \
-D PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so" \
-D PG_SERVER="localhost,5432" \
-D PG_DATABASE="${{env.LOCAL_DB_NAME}}" \
-D MYSQL_DRIVER_PATH="${{ github.workspace }}/mysql-connector/lib/libmyodbc9a.so" \
-D MYSQL_SERVER="localhost,3306" \
-D MYSQL_DATABASE="${{env.LOCAL_DB_NAME}}"
cmake --build test-compatibility
- name: Run Compatibility Tests for PostgreSQL
run: |
./test-compatibility/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '5432'
TEST_DSN: wrapper-pg-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: ${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so
TEST_BASE_DSN: pg-dsn
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Compare Test Results
run: |
python3 -m venv venv
source venv/bin/activate
pip3 install deepdiff
python3 test/compatibility/compare_results.py wrapper-pg-dsn pg-dsn
- name: Run Compatibility Tests for MySQL
run: |
./test-compatibility/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '3306'
TEST_DSN: wrapper-mysql-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: ${{ github.workspace }}/mysql-connector/lib/libmyodbc9a.so
TEST_BASE_DSN: mysql-dsn
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Compare Test Results
run: |
python3 -m venv venv
source venv/bin/activate
pip3 install deepdiff
python3 test/compatibility/compare_results.py wrapper-mysql-dsn mysql-dsn
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-api-compatibility-test-results-macos
path: |
wrapper-pg-dsn/
pg-dsn/
wrapper-mysql-dsn/
mysql-dsn/
test-linux-compat:
name: Linux Ubuntu - Compatibility Test
needs: [build-linux-psqlodbc, build-linux-mysql]
runs-on: ubuntu-latest
steps:
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
sudo apt update
sudo apt-get install cmake libcurl4-openssl-dev libssl-dev odbcinst unixodbc-dev uuid-dev zlib1g-dev libicu-dev
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=OFF -DBUILD_UNIT_TEST=OFF
cmake --build build
# Setup PostgreSQL
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Setup Local PostgreSQL Server
uses: ikalnytskyi/action-setup-postgres@v7
with:
username: ${{env.LOCAL_DB_UID}}
password: ${{env.LOCAL_DB_PWD}}
database: ${{env.LOCAL_DB_NAME}}
port: 5432
postgres-version: 17
ssl: true
# Setup MySQL
- name: Retrieve MySQL Cache
uses: actions/cache@v4
with:
path: mysql-connector/
key: ${{ runner.os }}-mysql-driver
fail-on-cache-miss: true
- name: Install MySQL Connector
run: |
sudo apt install ./mysql-connector/mysql-connector_x64.deb -y
- name: Setup Local MySQL
uses: kayqueGovetri/[email protected]
with:
mysql_root_password: ${{env.LOCAL_DB_PWD}}
mysql_database: ${{env.LOCAL_DB_NAME}}
mysql_user: ${{env.LOCAL_DB_UID}}
mysql_user_password: ${{env.LOCAL_DB_PWD}}
mysql_port: 3306
- name: Build Compatibility Tests for PostgreSQL
run: |
cmake -S test/compatibility -B test-compatibility \
-D TEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.so" \
-D PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so" \
-D PG_SERVER="localhost,5432" \
-D PG_DATABASE="${{env.LOCAL_DB_NAME}}" \
-D MYSQL_DRIVER_PATH="/usr/lib/x86_64-linux-gnu/odbc/libmyodbc9a.so" \
-D MYSQL_SERVER="localhost,3306" \
-D MYSQL_DATABASE="${{env.LOCAL_DB_NAME}}"
cmake --build test-compatibility
- name: Run Compatibility Tests for PostgreSQL
run: |
./test-compatibility/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '5432'
TEST_DSN: wrapper-pg-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: ${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so
TEST_BASE_DSN: pg-dsn
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Compare Test Results
run: |
python3 -m venv venv
source venv/bin/activate
pip3 install deepdiff
python3 test/compatibility/compare_results.py wrapper-pg-dsn pg-dsn
- name: Run Compatibility Tests for PostgreSQL
run: |
./test-compatibility/compatibility-test
env:
TEST_SERVER: localhost
TEST_PORT: '3306'
TEST_DSN: wrapper-mysql-dsn
TEST_DATABASE: ${{env.LOCAL_DB_NAME}}
TEST_USERNAME: ${{env.LOCAL_DB_UID}}
TEST_PASSWORD: ${{env.LOCAL_DB_PWD}}
TEST_BASE_DRIVER: /usr/lib/x86_64-linux-gnu/odbc/libmyodbc9a.so
TEST_BASE_DSN: mysql-dsn
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Compare Test Results
run: |
python3 -m venv venv
source venv/bin/activate
pip3 install deepdiff
python3 test/compatibility/compare_results.py wrapper-mysql-dsn mysql-dsn
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: odbc-api-compatibility-test-results-linux
path: |
wrapper-pg-dsn/
pg-dsn/
wrapper-mysql-dsn/
mysql-dsn/