Thread: iodbctestw with Homebrew psqlodbc not using W(ide) API calls, fails to connect
iodbctestw with Homebrew psqlodbc not using W(ide) API calls, fails to connect
After installing psqlodbc from Homebrew, I did the following to configure the DSNs:
~/.odbc.ini:
[homebrew-a-localhost]
Description = homebrew-a-localhost
Driver = /opt/homebrew/lib/psqlodbca.so
Servername = localhost
Port = 5432
Database = kwedinger
Username = kwedinger
Password = <omitted in this email>
Debug = 1
[homebrew-w-localhost]
Description = homebrew-w-localhost
Driver = /opt/homebrew/lib/psqlodbcw.so
Servername = localhost
Port = 5432
Database = kwedinger
Username = kwedinger
Password = <omitted in this email>
Debug = 1
When I run iodbctest DSN=homebrew-a-localhost to connect to my local PostgreSQL instance using the ANSI driver, all is well. I am presented with the SQL> prompt and I can run queries.
When I run iodbctestw DSN=homebrew-w-localhost to connect to the same local PostgreSQL instance using the Unicode driver, I see this:
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.1623.0502
1: SQLDriverConnect = ??????????????????????????????????????????????� (101) SQLSTATE=??1
1: ODBC_Connect = ??????????????????????????????????????????????� (101) SQLSTATE=??1
When I look at the trace log, I see that the W(ide) APIs are not being used. The trace log is below.
Shouldn’t iodbctestw with a Unicode driver use the W(ide) APIs? Perhaps I am missing something inside .odbc.ini?
** iODBC Trace file
** Trace started on Tue Oct 01 10:57:44 2024
** Driver Manager: 03.52.1623.0502
[000000.000923]
iodbctestw 1E8507240 ENTER SQLAllocHandle
SQLSMALLINT 1 (SQL_HANDLE_ENV)
SQLHANDLE 0x0 (SQL_NULL_HANDLE)
SQLHANDLE * 0x100e8c110
[000000.000946]
iodbctestw 1E8507240 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 (SQL_HANDLE_ENV)
SQLHANDLE 0x0 (SQL_NULL_HANDLE)
SQLHANDLE * 0x100e8c110 (0x600003894870)
[000000.000968]
iodbctestw 1E8507240 ENTER SQLSetEnvAttr
SQLHENV 0x600003894870
SQLINTEGER 200 (SQL_ATTR_ODBC_VERSION)
SQLPOINTER 0x3
SQLINTEGER * -5 (SQL_IS_UINTEGER)
[000000.000992]
iodbctestw 1E8507240 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x600003894870
SQLINTEGER 200 (SQL_ATTR_ODBC_VERSION)
SQLPOINTER 0x3
SQLINTEGER * -5 (SQL_IS_UINTEGER)
[000000.001019]
iodbctestw 1E8507240 ENTER SQLAllocHandle
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHANDLE 0x600003894870
SQLHANDLE * 0x100e8c118
[000000.001052]
iodbctestw 1E8507240 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHANDLE 0x600003894870
SQLHANDLE * 0x100e8c118 (0x132604080)
[000000.001073]
iodbctestw 1E8507240 ENTER SQLSetConnectOption
SQLHDBC 0x132604080
SQLUSMALLINT 1051 (unknown connection attribute)
SQLLEN 4310203497
[000000.001094]
iodbctestw 1E8507240 EXIT SQLSetConnectOption with return code 0 (SQL_SUCCESS)
SQLHDBC 0x132604080
SQLUSMALLINT 1051 (unknown connection attribute)
SQLLEN 4310203497
[000000.001115]
iodbctestw 1E8507240 ENTER SQLGetInfo
SQLHDBC 0x132604080
SQLUSMALLINT 171 (SQL_DM_VER)
SQLPOINTER 0x16ef7a4d1
SQLSMALLINT 255
SQLSMALLINT * 0x16ef7a2d8
[000000.001145]
iodbctestw 1E8507240 EXIT SQLGetInfo with return code 0 (SQL_SUCCESS)
SQLHDBC 0x132604080
SQLUSMALLINT 171 (SQL_DM_VER)
SQLPOINTER 0x16ef7a4d1
| 03.52.1623.0502 |
SQLSMALLINT 255
SQLSMALLINT * 0x16ef7a2d8 (15)
[000000.001183]
iodbctestw 1E8507240 ENTER SQLDriverConnect
SQLHDBC 0x132604080
SQLPOINTER 0x0
SQLCHAR * 0x16ef7a6f0
| DSN=homebrew-w-localhost |
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x100e8c12c
SQLSMALLINT 4096
SQLSMALLINT * 0x16ef7a2da
SQLUSMALLINT 1 (SQL_DRIVER_COMPLETE)
[000000.015278]
iodbctestw 1E8507240 EXIT SQLDriverConnect with return code -1 (SQL_ERROR)
SQLHDBC 0x132604080
SQLPOINTER 0x0
SQLCHAR * 0x16ef7a6f0
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x100e8c12c
SQLSMALLINT 4096
SQLSMALLINT * 0x16ef7a2da
SQLUSMALLINT 1 (SQL_DRIVER_COMPLETE)
[000000.015310]
iodbctestw 1E8507240 ENTER SQLGetDiagRec
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 1
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015380]
iodbctestw 1E8507240 EXIT SQLGetDiagRec with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 1
SQLCHAR * 0x16ef7a041
| ??1 |
SQLINTEGER * 0x16ef7a03c (101)
SQLCHAR * 0x16ef7a050
| ???????????????????????????????????????? |
| ??????� |
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015406]
iodbctestw 1E8507240 ENTER SQLGetDiagRec
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 2
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015481]
iodbctestw 1E8507240 EXIT SQLGetDiagRec with return code 100 (SQL_NO_DATA_FOUND)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 2
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
Keith Wedinger | Principal Consultant | M. 614.551.0373
Improving – It’s what we do.™
Re: iodbctestw with Homebrew psqlodbc not using W(ide) API calls, fails to connect
Thanks Jon. I came to this conclusion as well after building and running the tests on macOS. Specifically, I noticed that the tests by default run against the Unicode driver and all of the tests are passing. When I get some time, I want to dig into what’s going on inside iodbctestw.
Keith Wedinger | Principal Consultant | M. 614.551.0373
Improving – It’s what we do.™
From: Jon Raiford <raiford@labware.com>
Date: Thursday, October 3, 2024 at 1:22 PM
To: Keith Wedinger <keith.wedinger@improving.com>
Subject: Re: iodbctestw with Homebrew psqlodbc not using W(ide) API calls, fails to connect
This looks to be an iodbctestw issue and not a pgsqlodbc issue. It’s best to follow up with the iodbctest people and provide your trace file (or whatever else they need).
Jon
From: Keith Wedinger <keith.wedinger@improving.com>
Date: Wednesday, October 2, 2024 at 4:59 AM
To: pgsql-odbc@postgresql.org <pgsql-odbc@postgresql.org>
Subject: iodbctestw with Homebrew psqlodbc not using W(ide) API calls, fails to connect
After installing psqlodbc from Homebrew, I did the following to configure the DSNs:
~/.odbc.ini:
[homebrew-a-localhost]
Description = homebrew-a-localhost
Driver = /opt/homebrew/lib/psqlodbca.so
Servername = localhost
Port = 5432
Database = kwedinger
Username = kwedinger
Password = <omitted in this email>
Debug = 1
[homebrew-w-localhost]
Description = homebrew-w-localhost
Driver = /opt/homebrew/lib/psqlodbcw.so
Servername = localhost
Port = 5432
Database = kwedinger
Username = kwedinger
Password = <omitted in this email>
Debug = 1
When I run iodbctest DSN=homebrew-a-localhost to connect to my local PostgreSQL instance using the ANSI driver, all is well. I am presented with the SQL> prompt and I can run queries.
When I run iodbctestw DSN=homebrew-w-localhost to connect to the same local PostgreSQL instance using the Unicode driver, I see this:
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.1623.0502
1: SQLDriverConnect = ??????????????????????????????????????????????� (101) SQLSTATE=??1
1: ODBC_Connect = ??????????????????????????????????????????????� (101) SQLSTATE=??1
When I look at the trace log, I see that the W(ide) APIs are not being used. The trace log is below.
Shouldn’t iodbctestw with a Unicode driver use the W(ide) APIs? Perhaps I am missing something inside .odbc.ini?
** iODBC Trace file
** Trace started on Tue Oct 01 10:57:44 2024
** Driver Manager: 03.52.1623.0502
[000000.000923]
iodbctestw 1E8507240 ENTER SQLAllocHandle
SQLSMALLINT 1 (SQL_HANDLE_ENV)
SQLHANDLE 0x0 (SQL_NULL_HANDLE)
SQLHANDLE * 0x100e8c110
[000000.000946]
iodbctestw 1E8507240 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 (SQL_HANDLE_ENV)
SQLHANDLE 0x0 (SQL_NULL_HANDLE)
SQLHANDLE * 0x100e8c110 (0x600003894870)
[000000.000968]
iodbctestw 1E8507240 ENTER SQLSetEnvAttr
SQLHENV 0x600003894870
SQLINTEGER 200 (SQL_ATTR_ODBC_VERSION)
SQLPOINTER 0x3
SQLINTEGER * -5 (SQL_IS_UINTEGER)
[000000.000992]
iodbctestw 1E8507240 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x600003894870
SQLINTEGER 200 (SQL_ATTR_ODBC_VERSION)
SQLPOINTER 0x3
SQLINTEGER * -5 (SQL_IS_UINTEGER)
[000000.001019]
iodbctestw 1E8507240 ENTER SQLAllocHandle
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHANDLE 0x600003894870
SQLHANDLE * 0x100e8c118
[000000.001052]
iodbctestw 1E8507240 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHANDLE 0x600003894870
SQLHANDLE * 0x100e8c118 (0x132604080)
[000000.001073]
iodbctestw 1E8507240 ENTER SQLSetConnectOption
SQLHDBC 0x132604080
SQLUSMALLINT 1051 (unknown connection attribute)
SQLLEN 4310203497
[000000.001094]
iodbctestw 1E8507240 EXIT SQLSetConnectOption with return code 0 (SQL_SUCCESS)
SQLHDBC 0x132604080
SQLUSMALLINT 1051 (unknown connection attribute)
SQLLEN 4310203497
[000000.001115]
iodbctestw 1E8507240 ENTER SQLGetInfo
SQLHDBC 0x132604080
SQLUSMALLINT 171 (SQL_DM_VER)
SQLPOINTER 0x16ef7a4d1
SQLSMALLINT 255
SQLSMALLINT * 0x16ef7a2d8
[000000.001145]
iodbctestw 1E8507240 EXIT SQLGetInfo with return code 0 (SQL_SUCCESS)
SQLHDBC 0x132604080
SQLUSMALLINT 171 (SQL_DM_VER)
SQLPOINTER 0x16ef7a4d1
| 03.52.1623.0502 |
SQLSMALLINT 255
SQLSMALLINT * 0x16ef7a2d8 (15)
[000000.001183]
iodbctestw 1E8507240 ENTER SQLDriverConnect
SQLHDBC 0x132604080
SQLPOINTER 0x0
SQLCHAR * 0x16ef7a6f0
| DSN=homebrew-w-localhost |
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x100e8c12c
SQLSMALLINT 4096
SQLSMALLINT * 0x16ef7a2da
SQLUSMALLINT 1 (SQL_DRIVER_COMPLETE)
[000000.015278]
iodbctestw 1E8507240 EXIT SQLDriverConnect with return code -1 (SQL_ERROR)
SQLHDBC 0x132604080
SQLPOINTER 0x0
SQLCHAR * 0x16ef7a6f0
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x100e8c12c
SQLSMALLINT 4096
SQLSMALLINT * 0x16ef7a2da
SQLUSMALLINT 1 (SQL_DRIVER_COMPLETE)
[000000.015310]
iodbctestw 1E8507240 ENTER SQLGetDiagRec
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 1
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015380]
iodbctestw 1E8507240 EXIT SQLGetDiagRec with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 1
SQLCHAR * 0x16ef7a041
| ??1 |
SQLINTEGER * 0x16ef7a03c (101)
SQLCHAR * 0x16ef7a050
| ???????????????????????????????????????? |
| ??????� |
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015406]
iodbctestw 1E8507240 ENTER SQLGetDiagRec
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 2
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
[000000.015481]
iodbctestw 1E8507240 EXIT SQLGetDiagRec with return code 100 (SQL_NO_DATA_FOUND)
SQLSMALLINT 2 (SQL_HANDLE_DBC)
SQLHDBC 0x132604080
SQLSMALLINT 2
SQLCHAR * 0x16ef7a041
SQLINTEGER * 0x16ef7a03c
SQLCHAR * 0x16ef7a050
SQLSMALLINT 512
SQLSMALLINT * 0x0
Keith Wedinger | Principal Consultant | M. 614.551.0373
Improving – It’s what we do.™