Skip to content

Commit 480dba5

Browse files
committed
Fix of error in connstring in actions on MacOS
Fixed some testcases(merged from 3.2 and new fix). Added output of additional debug info to actions config and to failing tests. Changed tests to use direct linking on Windows, and changed some tests and the driver to eliminate (most of) failures in that mode Added installation of WiX with choco
1 parent 9384c10 commit 480dba5

20 files changed

+369
-176
lines changed

.github/workflows/ci.yml

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ env:
2020
MYSQL_TEST_USER: root
2121
MYSQL_TEST_PASSWD: "heyPassw+-_20oRd"
2222
MYSQL_TEST_DB: testo
23+
TEST_DSN: maodbc_test
24+
TEST_UID: root
25+
TEST_SERVER: mariadb.example.com
26+
TEST_PASSWORD: "heyPassw+-_20oRd"
27+
TEST_PORT: 3306
28+
TEST_SCHEMA: testo
29+
ODBCINI: "${{ github.workspace }}/test/odbc.ini"
30+
ODBCSYSINI: ${{ github.workspace }}/test
31+
ODBCINTSTINI: ${{ github.workspace }}/test/odbcinst.ini
2332

2433
jobs:
2534
setup:
@@ -69,13 +78,6 @@ jobs:
6978
sudo apt install unixodbc-dev
7079
cmake -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=OPENSSL .
7180
cmake --build . --config RelWithDebInfo
72-
env:
73-
TEST_DSN: maodbc_test
74-
TEST_UID: ${{ env.MYSQL_TEST_USER }}
75-
TEST_SERVER: ${{ env.MYSQL_TEST_HOST }}
76-
TEST_PASSWORD: ${{ env.MYSQL_TEST_PASSWD }}
77-
TEST_PORT: ${{ env.MYSQL_TEST_PORT }}
78-
TEST_SCHEMA: ${{ env.MYSQL_TEST_DB }}
7981
8082
- name: make macos
8183
if: ${{ startsWith(matrix.os, 'mac') }}
@@ -87,38 +89,49 @@ jobs:
8789
echo "TEST_DRIVER=${{ github.workspace }}/RelWithDebInfo/libmaodbc.dylib" >> $GITHUB_ENV
8890
cmake -G Xcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="" -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO -DWITH_SIGNCODE=OFF -DODBC_LIB_DIR=/opt/homebrew/opt/libiodbc/lib -DODBC_INCLUDE_DIR=/opt/homebrew/opt/libiodbc/include -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=OPENSSL -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib -DWITH_EXTERNAL_ZLIB=On .
8991
cmake --build . --config RelWithDebInfo
90-
env:
91-
TEST_DSN: maodbc_test
92-
TEST_UID: ${{ env.MYSQL_TEST_USER }}
93-
TEST_SERVER: ${{ env.MYSQL_TEST_HOST }}
94-
TEST_PASSWORD: ${{ env.MYSQL_TEST_PASSWD }}
95-
TEST_PORT: ${{ env.MYSQL_TEST_PORT }}
96-
TEST_SCHEMA: ${{ env.MYSQL_TEST_DB }}
92+
93+
- name: Install WiX
94+
if: ${{ startsWith(matrix.os, 'windows') }}
95+
shell: powershell
96+
run: |
97+
choco install wixtoolset -y
9798
9899
- name: make windows
99100
if: ${{ startsWith(matrix.os, 'windows') }}
100101
shell: powershell
101102
run: |
102-
cmake -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DWITH_MSI=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=SCHANNEL .
103+
cmake -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DWITH_MSI=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=SCHANNEL -DDIRECT_LINK_TESTS=1 .
103104
cmake --build . --config RelWithDebInfo
104-
env:
105-
TEST_DSN: maodbc_test
106-
TEST_UID: ${{ env.MYSQL_TEST_USER }}
107-
TEST_SERVER: ${{ env.MYSQL_TEST_HOST }}
108-
TEST_PASSWORD: ${{ env.MYSQL_TEST_PASSWD }}
109-
TEST_PORT: ${{ env.MYSQL_TEST_PORT }}
110-
TEST_SCHEMA: ${{ env.MYSQL_TEST_DB }}
105+
106+
- name: Install generated MSI (Windows only)
107+
if: startsWith(matrix.os, 'windows')
108+
shell: powershell
109+
run: |
110+
pwd
111+
ls ${{ github.workspace }}\packaging\windows
112+
Get-ChildItem -Path ${{ github.workspace }}\packaging\windows\mariadb-connector-odbc-*.msi
113+
$log = "install.log"
114+
foreach ($msi in Get-ChildItem -Path ${{ github.workspace }}\packaging\windows\mariadb-connector-odbc-*.msi) {
115+
$procInstall= Start-Process msiexec.exe -ArgumentList "/i $($msi.FullName) /qn /norestart" -NoNewWindow -PassThru
116+
#$procLog = Start-Process "powershell" "Get-Content -Path `"$log`" -Wait" -NoNewWindow -PassThru
117+
#$procMain.WaitForExit()
118+
#$procLog.Kill()
119+
}
120+
Get-OdbcDriver -Platform "64-bit"
121+
Add-OdbcDsn -Name "$TEST_DRIVER" `
122+
-DriverName "MariaDB ODBC 3.1 Driver" `
123+
-DsnType "User" `
124+
-SetPropertyValue @("SERVER=$TEST_SERVER", "DATABASE=$TEST_SCHEMA", "USER=$TEST_UID", "PASSWORD=$TEST_PASSWORD", "PORT=$TEST_PORT")
111125
112126
- name: Run test suite
113127
shell: bash
114128
run: |
115129
echo "$PWD"
116130
117-
118-
ls -lrt
131+
chmod 777 test
132+
ls -lrta
119133
cd ./test
120134
echo "$PWD"
121-
ls -lrt
122135
if [ "$DB_TYPE" = "mysql" ] ; then
123136
cp ../libmariadb/caching_sha2_password.* ../
124137
fi
@@ -127,16 +140,16 @@ jobs:
127140
TEST_DRIVER="MariaDB ODBC 3.1 Driver"
128141
# INSTALLFOLDER=''
129142
ls ./RelWithDebInfo
130-
cd ../wininstall && for msi in mariadb-connector-odbc-*.msi ; do msiexec /i $msi /qn /norestart; done
131143
set +x
132-
odbcconf CONFIGDSN "$TEST_DRIVER" "DSN=$TEST_DSN;SERVER=$TEST_SERVER;DATABASE=$TEST_SCHEMA;USER=$TEST_UID;PASSWORD=$TEST_PASSWORD;PORT=$TEST_PORT;$TEST_ADD_PARAM"
144+
#odbcconf CONFIGDSN "$TEST_DRIVER" "DSN=$TEST_DSN;SERVER=$TEST_SERVER;DATABASE=$TEST_SCHEMA;USER=$TEST_UID;PASSWORD=$TEST_PASSWORD;PORT=$TEST_PORT;$TEST_ADD_PARAM"
133145
set -ex
134146
else
135-
export ODBCINI="${{ github.workspace }}/test/odbc.ini"
136-
export ODBCSYSINI=${{ github.workspace }}/test
137147
138-
cat $ODBCSYSINI/odbcinst.ini
139-
cat $ODBCSYSINI/odbc.ini | grep -v PASSWORD
148+
cat $ODBCINSTINI
149+
cat $ODBCINI | grep -v PASSWORD
150+
151+
chmod 666 $ODBCINI $ODBCSYSINI/odbcinst.ini
152+
ls -lrt
140153
fi
141154
ctest --verbose
142155
@@ -147,13 +160,7 @@ jobs:
147160
DB_TYPE: ${{ matrix.db-type }}
148161
LOCAL_DB: ${{ steps.setup-env.outputs.database-type }}
149162
os: ${{ matrix.os }}
150-
TEST_DSN: maodbc_test
151163
TEST_DRIVER: ${{ env.TEST_DRIVER || 'maodbc_test' }}
152-
TEST_UID: ${{ env.MYSQL_TEST_USER }}
153-
TEST_SERVER: ${{ env.MYSQL_TEST_HOST }}
154-
TEST_PASSWORD: ${{ env.MYSQL_TEST_PASSWD }}
155-
TEST_PORT: ${{ env.MYSQL_TEST_PORT }}
156-
TEST_SCHEMA: ${{ env.MYSQL_TEST_DB }}
157164
TEST_SOCKET:
158165
SSLCERT: ${{ matrix.db-type == 'container' && format('{0}/.github/workflows/certs/server.crt', github.workspace) || '' }}
159166
MARIADB_PLUGIN_DIR: ${{ github.workspace }}

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,11 @@ ENDIF()
535535
# Tests. Should be verified by now, if we have them.
536536
IF(WITH_UNIT_TESTS)
537537
ADD_SUBDIRECTORY(test)
538+
539+
IF(DIRECT_LINK_TESTS)
540+
ADD_CUSTOM_COMMAND(TARGET ${LIBRARY_NAME} POST_BUILD
541+
COMMAND ${CMAKE_COMMAND} ARGS -E copy $<TARGET_FILE:${LIBRARY_NAME}> test)
542+
ENDIF()
538543
IF(NOT WIN32)
539544
# Configuring ini files for testing with UnixODBC
540545
MESSAGE(STATUS "Configurig Test Driver: ${TEST_DRIVER}, Test DSN: ${TEST_DSN}, tcp://${TEST_UID}@${TEST_SERVER}:${TEST_PORT}/${TEST_SCHEMA} socket: ${TEST_SOCKET}")

ma_catalog.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ SQLRETURN MADB_StmtColumns(MADB_Stmt *Stmt,
584584
if (MADB_DYNAPPENDCONST(&StmtStr, "=DATABASE()"))
585585
goto dynerror;
586586

587-
if (TableName && NameLength3)
587+
if (TableName/* && NameLength3*/)
588588
{
589589
if (MADB_DynstrAppend(&StmtStr, "AND TABLE_NAME") ||
590590
AddPvOrIdCondition(Stmt, (void*)&StmtStr, (size_t)-1, TableName, NameLength3))
@@ -859,6 +859,12 @@ SQLRETURN MADB_StmtSpecialColumns(MADB_Stmt *Stmt, SQLUSMALLINT IdentifierType,
859859
}
860860
p+= _snprintf(p, sizeof(StmtStr) - (p - StmtStr), "ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_KEY");
861861
}
862+
#ifdef __APPLE__
863+
if (getenv("GITHUB_ACTIONS") != NULL && strncmp(getenv("GITHUB_ACTIONS"), "true", 4) == 0 && IdentifierType == SQL_ROWVER)
864+
{
865+
printf("# \"%s\"(%hu)\n", StmtStr, Nullable);
866+
}
867+
#endif // __APPLE__
862868
return Stmt->Methods->ExecDirect(Stmt, StmtStr, SQL_NTS);
863869
}
864870
/* }}} */

ma_connection.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/************************************************************************************
2-
Copyright (C) 2013,2023 MariaDB Corporation AB
2+
Copyright (C) 2013,2025 MariaDB Corporation plc
33
44
This library is free software; you can redistribute it and/or
55
modify it under the terms of the GNU Library General Public
@@ -252,6 +252,11 @@ SQLRETURN MADB_DbcSetAttr(MADB_Dbc *Dbc, SQLINTEGER Attribute, SQLPOINTER ValueP
252252
MADB_FREE(Dbc->CatalogName);
253253
if (isWChar)
254254
{
255+
/* This can happen with direct linking only */
256+
if (StringLength == SQL_NTS)
257+
{
258+
StringLength= (SQLINTEGER)(SqlwcsLen((SQLWCHAR*)ValuePtr, -1) * sizeof(SQLWCHAR));
259+
}
255260
/* IsAnsi will be set before this, even if it is set before connection
256261
StringLength from DM here is octets length */
257262
Dbc->CatalogName= MADB_ConvertFromWCharEx((SQLWCHAR *)ValuePtr, StringLength/ sizeof(SQLWCHAR), NULL, Dbc->ConnOrSrcCharset, NULL, TRUE);
@@ -411,6 +416,12 @@ SQLRETURN MADB_DbcGetAttr(MADB_Dbc *Dbc, SQLINTEGER Attribute, SQLPOINTER ValueP
411416
SQLSMALLINT StrLen;
412417
SQLRETURN ret;
413418

419+
/* This is normally cared by DM and this is only for direct linking case - if connection has not been established yet,
420+
returnring error */
421+
if (Dbc->mariadb == NULL && Dbc->CatalogName == NULL)
422+
{
423+
return MADB_SetError(&Dbc->Error, MADB_ERR_08003, NULL, 0);
424+
}
414425
ret= Dbc->Methods->GetCurrentDB(Dbc, ValuePtr, BufferLength, &StrLen, isWChar);
415426
/* if we weren't able to determine the current db, we will return the cached catalog name */
416427
if (!SQL_SUCCEEDED(ret) && Dbc->CatalogName)
@@ -436,7 +447,7 @@ SQLRETURN MADB_DbcGetAttr(MADB_Dbc *Dbc, SQLINTEGER Attribute, SQLPOINTER ValueP
436447
/* SQL_ATTR_METADATA_ID is SQLUINTEGER attribute on connection level, but SQLULEN on statement level :/ */
437448
*(SQLUINTEGER *)ValuePtr= Dbc->MetadataId;
438449
case SQL_ATTR_ODBC_CURSORS:
439-
*(SQLULEN*)ValuePtr= SQL_CUR_USE_ODBC;
450+
*(SQLULEN*)ValuePtr= SQL_CUR_USE_DRIVER;
440451
break;
441452
case SQL_ATTR_ENLIST_IN_DTC:
442453
/* MS Distributed Transaction Coordinator not supported */

ma_dsn.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ my_bool MADB_SaveDSN(MADB_Dsn *Dsn)
424424
}
425425
if (!SQLWriteDSNToIni(Dsn->DSNName, Dsn->Driver))
426426
{
427-
SQLInstallerError(1,&ErrNum, Dsn->ErrorMsg, SQL_MAX_MESSAGE_LENGTH, NULL);
427+
SQLInstallerError((WORD)1,&ErrNum, Dsn->ErrorMsg, (WORD)SQL_MAX_MESSAGE_LENGTH, NULL);
428428
return FALSE;
429429
}
430430

ma_environment.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ SQLRETURN MADB_EnvSetAttr(MADB_Env* Env, SQLINTEGER Attribute, SQLPOINTER ValueP
160160
case SQL_ATTR_ODBC_VERSION:
161161
if (Env->Dbcs)
162162
{
163-
MADB_SetError(&Env->Error, MADB_ERR_HYC00, NULL, 0);
163+
MADB_SetError(&Env->Error, MADB_ERR_HY010, NULL, 0);
164164
return Env->Error.ReturnValue;
165165
}
166166
Env->OdbcVersion= (SQLINTEGER)(SQLLEN)ValuePtr;

maodbc.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SQLAllocHandle;
66
SQLAllocStmt;
77
SQLBindCol;
88
SQLBindParameter;
9+
SQLBindParam;
910
SQLBrowseConnect;
1011
SQLBrowseConnectW;
1112
SQLBulkOperations;

mariadb-odbc-driver.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SQLAllocEnv
66
SQLAllocHandle
77
SQLAllocStmt
88
SQLBindCol
9+
SQLBindParam
910
SQLBindParameter
1011
SQLBrowseConnect
1112
SQLBrowseConnect@UNICODE@

odbc_3_api.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2603,7 +2603,7 @@ SQLRETURN SQL_API SQLSetParam(SQLHSTMT stmt,
26032603
/* }}} */
26042604

26052605
/* {{{ SQLBindParam - we need it for direct linking mainly */
2606-
SQLRETURN SQL_API SQLBindParam(SQLHSTMT StatementHandle,
2606+
SQLRETURN SQL_API SQLBindParam(SQLHSTMT StatementHandle,
26072607
SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
26082608
SQLSMALLINT ParameterType, SQLULEN LengthPrecision,
26092609
SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
@@ -2681,7 +2681,14 @@ SQLRETURN SQL_API SQLSpecialColumns(SQLHSTMT StatementHandle,
26812681
if (!Stmt)
26822682
return SQL_INVALID_HANDLE;
26832683
MADB_CLEAR_ERROR(&Stmt->Error);
2684-
2684+
#ifdef _ACTIONS_TRACE_
2685+
#ifdef __APPLE__
2686+
if (getenv("GITHUB_ACTIONS") != NULL && strncmp(getenv("GITHUB_ACTIONS"), "true", 4) == 0 && IdentifierType == SQL_ROWVER)
2687+
{
2688+
printf("# -- Nullable: %hu)\n", Nullable);
2689+
}
2690+
#endif // __APPLE__
2691+
#endif
26852692
return Stmt->Methods->SpecialColumns(Stmt,IdentifierType, (char *)CatalogName, NameLength1,
26862693
(char *)SchemaName, NameLength2,
26872694
(char *)TableName, NameLength3, Scope, Nullable);
@@ -2723,7 +2730,14 @@ SQLRETURN SQL_API SQLSpecialColumnsW(SQLHSTMT StatementHandle,
27232730
{
27242731
CpTable = MADB_ConvertFromWChar(TableName, NameLength3, &CpLength3, Stmt->Connection->ConnOrSrcCharset, NULL);
27252732
}
2726-
2733+
#ifdef _ACTIONS_TRACE_
2734+
#ifdef __APPLE__
2735+
if (getenv("GITHUB_ACTIONS") != NULL && strncmp(getenv("GITHUB_ACTIONS"), "true", 4) == 0 && IdentifierType == SQL_ROWVER)
2736+
{
2737+
printf("# -- Nullable: %hu)\n", Nullable);
2738+
}
2739+
#endif // __APPLE__
2740+
#endif
27272741
ret= Stmt->Methods->SpecialColumns(Stmt,IdentifierType, CpCatalog, (SQLSMALLINT)CpLength1, CpSchema,
27282742
(SQLSMALLINT)CpLength2, CpTable, (SQLSMALLINT)CpLength3, Scope, Nullable);
27292743
MADB_FREE(CpCatalog);

test/basic.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ ODBC_TEST(t_bug30840)
638638
SQLCHAR conn[512], conn_out[1024];
639639
SQLSMALLINT conn_out_len;
640640

641-
if (using_dm(Connection))
641+
if (using_dm())
642642
{
643643
diag("test doesn't work with (all) driver manager(s)");
644644
return SKIP;
@@ -1394,15 +1394,14 @@ ODBC_TEST(t_mysqld_stmt_reset)
13941394
ODBC_TEST(t_odbc32)
13951395
{
13961396
HDBC hdbc1;
1397-
SQLCHAR conn[512];
1397+
SQLCHAR conn[1024];
13981398
SQLUINTEGER packet_size= 0;
13991399

1400-
sprintf((char *)conn, "DSN=%s;PORT=%u", my_dsn, my_port);
1401-
14021400
CHECK_ENV_RC(Env, SQLAllocHandle(SQL_HANDLE_DBC, Env, &hdbc1));
14031401
CHECK_DBC_RC(hdbc1, SQLSetConnectAttr(hdbc1, SQL_ATTR_PACKET_SIZE, (SQLPOINTER)(4096*1024), 0));
14041402

1405-
CHECK_DBC_RC(hdbc1, SQLDriverConnect(hdbc1, NULL, conn, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT));
1403+
CHECK_DBC_RC(hdbc1, SQLDriverConnect(hdbc1, NULL, ConnectionString(conn, FALSE, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL),
1404+
SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT));
14061405

14071406
CHECK_DBC_RC(hdbc1, SQLGetConnectAttr(hdbc1, SQL_ATTR_PACKET_SIZE, (SQLPOINTER)&packet_size, 0, NULL));
14081407

0 commit comments

Comments
 (0)