Skip to content

Commit 8a4bcf8

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
1 parent 9384c10 commit 8a4bcf8

20 files changed

+305
-150
lines changed

.github/workflows/ci.yml

Lines changed: 32 additions & 36 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,38 @@ 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 }}
9792
9893
- name: make windows
9994
if: ${{ startsWith(matrix.os, 'windows') }}
10095
shell: powershell
10196
run: |
102-
cmake -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DWITH_MSI=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=SCHANNEL .
97+
cmake -DCONC_WITH_MSI=OFF -DCONC_WITH_UNIT_TESTS=OFF -DWITH_MSI=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=SCHANNEL -DDIRECT_LINK_TESTS=1 .
10398
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 }}
99+
100+
- name: Install generated MSI (Windows only)
101+
if: startsWith(matrix.os, 'windows')
102+
shell: powershell
103+
run: |
104+
pwd
105+
ls ${{ github.workspace }}\packaging\windows
106+
Get-ChildItem -Path ${{ github.workspace }}\packaging\windows\mariadb-connector-odbc-*.msi
107+
$log = "install.log"
108+
foreach ($msi in Get-ChildItem -Path ${{ github.workspace }}\packaging\windows\mariadb-connector-odbc-*.msi) {
109+
$procInstall= Start-Process msiexec.exe -ArgumentList "/i $($msi.FullName) /qn /norestart" -NoNewWindow -PassThru
110+
$procLog = Start-Process "powershell" "Get-Content -Path `"$log`" -Wait" -NoNewWindow -PassThru
111+
$procMain.WaitForExit()
112+
$procLog.Kill()
113+
}
111114
112115
- name: Run test suite
113116
shell: bash
114117
run: |
115118
echo "$PWD"
116119
117-
118-
ls -lrt
120+
chmod 777 test
121+
ls -lrta
119122
cd ./test
120123
echo "$PWD"
121-
ls -lrt
122124
if [ "$DB_TYPE" = "mysql" ] ; then
123125
cp ../libmariadb/caching_sha2_password.* ../
124126
fi
@@ -127,16 +129,16 @@ jobs:
127129
TEST_DRIVER="MariaDB ODBC 3.1 Driver"
128130
# INSTALLFOLDER=''
129131
ls ./RelWithDebInfo
130-
cd ../wininstall && for msi in mariadb-connector-odbc-*.msi ; do msiexec /i $msi /qn /norestart; done
131132
set +x
132133
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"
133134
set -ex
134135
else
135-
export ODBCINI="${{ github.workspace }}/test/odbc.ini"
136-
export ODBCSYSINI=${{ github.workspace }}/test
137136
138-
cat $ODBCSYSINI/odbcinst.ini
139-
cat $ODBCSYSINI/odbc.ini | grep -v PASSWORD
137+
cat $ODBCINSTINI
138+
cat $ODBCINI | grep -v PASSWORD
139+
140+
chmod 666 $ODBCINI $ODBCSYSINI/odbcinst.ini
141+
ls -lrt
140142
fi
141143
ctest --verbose
142144
@@ -147,13 +149,7 @@ jobs:
147149
DB_TYPE: ${{ matrix.db-type }}
148150
LOCAL_DB: ${{ steps.setup-env.outputs.database-type }}
149151
os: ${{ matrix.os }}
150-
TEST_DSN: maodbc_test
151152
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 }}
157153
TEST_SOCKET:
158154
SSLCERT: ${{ matrix.db-type == 'container' && format('{0}/.github/workflows/certs/server.crt', github.workspace) || '' }}
159155
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)
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: 7 additions & 2 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)
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);

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)