Skip to content

Commit 0913f18

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 0913f18

20 files changed

+325
-153
lines changed

.github/workflows/ci.yml

Lines changed: 39 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,44 @@ 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+
}
111120
112121
- name: Run test suite
113122
shell: bash
114123
run: |
115124
echo "$PWD"
116125
117-
118-
ls -lrt
126+
chmod 777 test
127+
ls -lrta
119128
cd ./test
120129
echo "$PWD"
121-
ls -lrt
122130
if [ "$DB_TYPE" = "mysql" ] ; then
123131
cp ../libmariadb/caching_sha2_password.* ../
124132
fi
@@ -127,16 +135,16 @@ jobs:
127135
TEST_DRIVER="MariaDB ODBC 3.1 Driver"
128136
# INSTALLFOLDER=''
129137
ls ./RelWithDebInfo
130-
cd ../wininstall && for msi in mariadb-connector-odbc-*.msi ; do msiexec /i $msi /qn /norestart; done
131138
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"
139+
#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"
133140
set -ex
134141
else
135-
export ODBCINI="${{ github.workspace }}/test/odbc.ini"
136-
export ODBCSYSINI=${{ github.workspace }}/test
137142
138-
cat $ODBCSYSINI/odbcinst.ini
139-
cat $ODBCSYSINI/odbc.ini | grep -v PASSWORD
143+
cat $ODBCINSTINI
144+
cat $ODBCINI | grep -v PASSWORD
145+
146+
chmod 666 $ODBCINI $ODBCSYSINI/odbcinst.ini
147+
ls -lrt
140148
fi
141149
ctest --verbose
142150
@@ -147,13 +155,7 @@ jobs:
147155
DB_TYPE: ${{ matrix.db-type }}
148156
LOCAL_DB: ${{ steps.setup-env.outputs.database-type }}
149157
os: ${{ matrix.os }}
150-
TEST_DSN: maodbc_test
151158
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 }}
157159
TEST_SOCKET:
158160
SSLCERT: ${{ matrix.db-type == 'container' && format('{0}/.github/workflows/certs/server.crt', github.workspace) || '' }}
159161
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: 13 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,12 @@ SQLRETURN SQL_API SQLSpecialColumns(SQLHSTMT StatementHandle,
26812681
if (!Stmt)
26822682
return SQL_INVALID_HANDLE;
26832683
MADB_CLEAR_ERROR(&Stmt->Error);
2684-
2684+
#ifdef __APPLE__
2685+
if (getenv("GITHUB_ACTIONS") != NULL && strncmp(getenv("GITHUB_ACTIONS"), "true", 4) == 0 && IdentifierType == SQL_ROWVER)
2686+
{
2687+
printf("# -- Nullable: %hu)\n", Nullable);
2688+
}
2689+
#endif // __APPLE__
26852690
return Stmt->Methods->SpecialColumns(Stmt,IdentifierType, (char *)CatalogName, NameLength1,
26862691
(char *)SchemaName, NameLength2,
26872692
(char *)TableName, NameLength3, Scope, Nullable);
@@ -2723,7 +2728,12 @@ SQLRETURN SQL_API SQLSpecialColumnsW(SQLHSTMT StatementHandle,
27232728
{
27242729
CpTable = MADB_ConvertFromWChar(TableName, NameLength3, &CpLength3, Stmt->Connection->ConnOrSrcCharset, NULL);
27252730
}
2726-
2731+
#ifdef __APPLE__
2732+
if (getenv("GITHUB_ACTIONS") != NULL && strncmp(getenv("GITHUB_ACTIONS"), "true", 4) == 0 && IdentifierType == SQL_ROWVER)
2733+
{
2734+
printf("# -- Nullable: %hu)\n", Nullable);
2735+
}
2736+
#endif // __APPLE__
27272737
ret= Stmt->Methods->SpecialColumns(Stmt,IdentifierType, CpCatalog, (SQLSMALLINT)CpLength1, CpSchema,
27282738
(SQLSMALLINT)CpLength2, CpTable, (SQLSMALLINT)CpLength3, Scope, Nullable);
27292739
MADB_FREE(CpCatalog);

test/basic.c

Lines changed: 1 addition & 1 deletion
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;

0 commit comments

Comments
 (0)