<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>adbcBridge notes</title><subtitle>What the drivers did, written down.</subtitle><link href="https://adbcbridge.org/notes/feed.xml" rel="self"/><link href="https://adbcbridge.org/notes/"/><id>https://adbcbridge.org/notes/</id><updated>2026-09-04T00:00:00Z</updated><author><name>the adbcBridge maintainer</name></author><entry><title>Altibase ODBC stores astral characters as CESU-8 on its wide path</title><link href="https://adbcbridge.org/notes/altibase-odbc-findings/"/><id>https://adbcbridge.org/notes/altibase-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>Altibase ODBC 7.3 disagrees with itself above the BMP, reports CREATE_PARAMS &quot;precision&quot; so a generated VARCHAR is VARCHAR(1) (22026), and numbers its byte types outside ODBC.</summary></entry><entry><title>Three things Exasol&#x27;s ODBC driver gets wrong about C types and block cursors</title><link href="https://adbcbridge.org/notes/exasol-odbc-three-quirks/"/><id>https://adbcbridge.org/notes/exasol-odbc-three-quirks/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>Exasol ODBC 25.2/26.2 refuses SQL_C_BINARY outright (HY003), fails a NULL SQL_DECIMAL parameter bound SQL_C_DEFAULT (SI002), and claims SQL_GD_BLOCK it cannot deliver.</summary></entry><entry><title>A 35-character Driver=, a compiled-in path, and a CLOB at eight rows a second</title><link href="https://adbcbridge.org/notes/ibm-i-access-odbc-on-linux-and-macos/"/><id>https://adbcbridge.org/notes/ibm-i-access-odbc-on-linux-and-macos/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>IBM i Access ODBC 1.1.0.29 against Db2 for i 7.5 — the Driver= value must stay under 36 characters, the libraries need a real /opt/ibm/iaccess, and a CLOB column costs a round trip per row.</summary></entry><entry><title>The Ingres ODBC client kills any Java process that loads it</title><link href="https://adbcbridge.org/notes/ingres-client-and-the-jvm/"/><id>https://adbcbridge.org/notes/ingres-client-and-the-jvm/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>Three defects in the Actian Ingres 10.1 ODBC client, each with its exact error text - the signal-handler takeover that aborts a JVM, the four-byte SQLWCHAR that truncates the connection string under unixODBC, and the 32-byte Driver= buffer.</summary></entry><entry><title>Kinetica&#x27;s ODBC driver executes parameter N with the value bound at N+1</title><link href="https://adbcbridge.org/notes/kinetica-odbc-parameters-off-by-one/"/><id>https://adbcbridge.org/notes/kinetica-odbc-parameters-off-by-one/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>Kinetica ODBC 7.1.9 accepts every SQLBindParameter and then shifts the values one position, sending the last as NULL under SQL_SUCCESS with an empty diagnostic queue.</summary></entry><entry><title>Which older engine releases pass the matrix entry unchanged</title><link href="https://adbcbridge.org/notes/older-releases-that-still-pass/"/><id>https://adbcbridge.org/notes/older-releases-that-still-pass/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>A sweep of older SQL Server, PostgreSQL, MariaDB and Firebird releases through the same driver and the same unmodified matrix entry, with only the port changed.</summary></entry><entry><title>The SAP HANA ODBC client decodes narrow statement text as Latin-1</title><link href="https://adbcbridge.org/notes/sap-hana-odbc-latin-1-and-type-table/"/><id>https://adbcbridge.org/notes/sap-hana-odbc-latin-1-and-type-table/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>SAP HANA client ODBC 2.29.25 (libodbcHDB) takes narrow SQL and SQL_C_CHAR parameters as Latin-1, not UTF-8, and returns its type table alphabetically so SECONDDATE outranks TIMESTAMP.</summary></entry><entry><title>SingleStore&#x27;s ODBC connector loses SQLGetTypeInfo under ANSI_QUOTES</title><link href="https://adbcbridge.org/notes/singlestore-odbc-connector-findings/"/><id>https://adbcbridge.org/notes/singlestore-odbc-connector-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-09-03T00:00:00Z</published><summary>Two defects in SingleStore Connector/ODBC 1.2.2 with their exact errors - SQLGetTypeInfo failing 42S22 under ANSI_QUOTES, and a SQLColumns segfault on a NULL catalog - and what it gets right.</summary></entry><entry><title>A parameter array in Ignite&#x27;s ODBC driver takes every row&#x27;s NULL flag from row 0</title><link href="https://adbcbridge.org/notes/apache-ignite-odbc-findings/"/><id>https://adbcbridge.org/notes/apache-ignite-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-29T00:00:00Z</published><summary>Apache Ignite&#x27;s ODBC driver drops a NULL below the first row of a column-wise parameter array - a character column stores an empty string, a BINARY column segfaults the client inside SQLExecute.</summary></entry><entry><title>A bound NULL becomes an empty string, and a parameter array stops at set 1</title><link href="https://adbcbridge.org/notes/clickhouse-odbc-findings/"/><id>https://adbcbridge.org/notes/clickhouse-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-29T00:00:00Z</published><summary>What clickhouse-odbc 1.5.5 does when you write through it - SQL_NULL_DATA ignored when a value buffer is bound, parameter arrays that land two rows of five, and no affected-row count.</summary></entry><entry><title>Five things OpenLink Virtuoso&#x27;s ODBC driver does silently and wrongly</title><link href="https://adbcbridge.org/notes/virtuoso-odbc-five-defects/"/><id>https://adbcbridge.org/notes/virtuoso-odbc-five-defects/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-29T00:00:00Z</published><summary>virtodbc.so from libvirtodbc0 7.2.12 stores UTF-16 text as garbage, aborts on any Charset= but the literal UTF-8, stores every SQL_C_SBIGINT as 0, and strides date parameter arrays by ColumnSize.</summary></entry><entry><title>Three ways Firebird&#x27;s ODBC driver loses your parameters without saying so</title><link href="https://adbcbridge.org/notes/firebird-odbc-parameter-defects/"/><id>https://adbcbridge.org/notes/firebird-odbc-parameter-defects/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-28T00:00:00Z</published><summary>Firebird ODBC 3.0.1 and 3.5.0-rc1 stride fixed-type parameter arrays by BufferLength, write NULL for every SQL_C_SBIGINT after a character bind, and discard ROWS_FETCHED_PTR set before SQLPrepare.</summary></entry><entry><title>What the Arrow Flight SQL ODBC driver claims, and what it does</title><link href="https://adbcbridge.org/notes/arrow-flight-sql-odbc-findings/"/><id>https://adbcbridge.org/notes/arrow-flight-sql-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>Arrow Flight SQL ODBC 0.9.7, the driver Dremio publishes, advertises SQLBindParameter while answering HYC00, segfaults in SQLColumns without field metadata, and is iODBC-width on Apple Silicon.</summary></entry><entry><title>Two ways a Go ODBC program dies before it prints anything</title><link href="https://adbcbridge.org/notes/go-odbc-and-arrow-finalizers/"/><id>https://adbcbridge.org/notes/go-odbc-and-arrow-finalizers/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>alexbrainman/odbc takes an access violation inside api.SQLGetDiagRec on Windows; on Linux and macOS an arrow-go finalizer releases an ArrowArrayStream mid-cgo and takes the process down.</summary></entry><entry><title>Vendor macOS drivers are built for iODBC&#x27;s four-byte SQLWCHAR</title><link href="https://adbcbridge.org/notes/macos-iodbc-width-vendor-drivers/"/><id>https://adbcbridge.org/notes/macos-iodbc-width-vendor-drivers/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>MySQL Connector/ODBC 26.7.1, Virtuoso 7.2.17 and Arrow Flight SQL ODBC 0.9.7 for macOS ship as iODBC-width drivers, and under unixODBC they return empty diagnostics or abort the process.</summary></entry><entry><title>Any text read as a timestamp comes back as today&#x27;s date, under SQL_SUCCESS</title><link href="https://adbcbridge.org/notes/opensearch-sql-odbc-findings/"/><id>https://adbcbridge.org/notes/opensearch-sql-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>OpenSearch SQL ODBC 1.5.0.0 converts any character value to today&#x27;s date when asked for SQL_C_TYPE_TIMESTAMP, and its SQLError never returns SQL_NO_DATA, so a failed connect hangs unixODBC forever.</summary></entry><entry><title>Where PostgreSQL-wire servers part company with PostgreSQL</title><link href="https://adbcbridge.org/notes/postgresql-wire-servers-and-psqlodbc/"/><id>https://adbcbridge.org/notes/postgresql-wire-servers-and-psqlodbc/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>Seven ways CrateDB, QuestDB, Materialize, RisingWave, ArcadeDB, Spanner and YDB answer psqlodbc 16 differently from PostgreSQL 16, each with the error text it produces.</summary></entry><entry><title>Two psqlodbc bugs that lost rows and narrowed integers, and two traps</title><link href="https://adbcbridge.org/notes/psqlodbc-two-fixes-and-two-traps/"/><id>https://adbcbridge.org/notes/psqlodbc-two-fixes-and-two-traps/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>psqlodbc silently discarded a committed transaction on servers without SAVEPOINT and narrowed an out-of-range int8 to -1; both are fixed, and two version-and-build traps remain.</summary></entry><entry><title>SQL_ERROR with no diagnostic, and a status array nobody writes</title><link href="https://adbcbridge.org/notes/sqliteodbc-numeric-and-param-status/"/><id>https://adbcbridge.org/notes/sqliteodbc-numeric-and-param-status/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>sqliteodbc 0.99991 fails SQLGetData(SQL_C_NUMERIC) with a bare SQL_ERROR and zero diagnostic records, and accepts SQL_ATTR_PARAM_STATUS_PTR without ever writing to it.</summary></entry><entry><title>Four conversions taos-odbc calls &quot;not implemented yet&quot;, and one that aborts</title><link href="https://adbcbridge.org/notes/tdengine-taos-odbc-findings/"/><id>https://adbcbridge.org/notes/tdengine-taos-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>taos-odbc at 3.3.6.13 has no TIMESTAMP_STRUCT conversion, one route into a BOOL parameter and no DECIMAL at all, and it aborts the whole process when a client asks for ODBC 3.80.</summary></entry><entry><title>A NULL column that reads back as the previous row&#x27;s value</title><link href="https://adbcbridge.org/notes/thirty-two-bit-sqllen-on-64-bit-linux/"/><id>https://adbcbridge.org/notes/thirty-two-bit-sqllen-on-64-bit-linux/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>IBM&#x27;s Db2 clidriver (Db2 and Informix) and Actian Ingres&#x27; driver are built with a four-byte SQLLEN on 64-bit Linux, so indicators are read at the wrong stride and NULLs disappear.</summary></entry><entry><title>The process dies with SIGABRT on the first SQL error, and it is the manager</title><link href="https://adbcbridge.org/notes/unixodbc-four-byte-sqlwchar/"/><id>https://adbcbridge.org/notes/unixodbc-four-byte-sqlwchar/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>unixODBC 2.3.12 and 2.3.14 overwrite their own stack reading the first SQL_ERROR diagnostic from a driver whose SQLWCHAR is four bytes - Virtuoso and Arrow Flight SQL on macOS, Ingres on Linux.</summary></entry><entry><title>Five Windows-only ODBC failures are one thing wearing different clothes</title><link href="https://adbcbridge.org/notes/windows-ansi-code-page-three-disguises/"/><id>https://adbcbridge.org/notes/windows-ansi-code-page-three-disguises/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-25T00:00:00Z</published><summary>Five drivers that pass on Linux fail on Windows on text: the system ANSI code page sits between the caller and the driver, and the repairs differ only in which call has to leave the wide path.</summary></entry><entry><title>MariaDB Connector/ODBC 3.2 segfaults on a NULL DATE in a parameter array</title><link href="https://adbcbridge.org/notes/mariadb-connector-odbc-findings/"/><id>https://adbcbridge.org/notes/mariadb-connector-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-24T00:00:00Z</published><summary>Five findings in MariaDB Connector/ODBC with their exact errors - 3.2&#x27;s array segfault and wrong row counts, its connect-time DUAL probe, its binary-literal path, and 3.1.15&#x27;s missing NUL terminator.</summary></entry><entry><title>What MySQL Connector/ODBC does to a DATETIME(6), and six other findings</title><link href="https://adbcbridge.org/notes/mysql-connector-odbc-findings/"/><id>https://adbcbridge.org/notes/mysql-connector-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-24T00:00:00Z</published><summary>Seven findings in MySQL Connector/ODBC 9.4, 8.4 and 26.7.1 with their exact errors - the fractional seconds pyodbc loses, a SIGFPE in get_column_size, two segfaults, and four platform traps.</summary></entry><entry><title>A Unicode string parameter cannot reach a MySQL-wire warehouse&#x27;s prepare</title><link href="https://adbcbridge.org/notes/mysql-wire-warehouses-prepared-statements/"/><id>https://adbcbridge.org/notes/mysql-wire-warehouses-prepared-statements/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-24T00:00:00Z</published><summary>Six servers behind MySQL Connector/ODBC 9.4 - what their server-side prepare does with a BLOB-typed string, a MYSQL_TYPE_NULL, a BIT array of NULLs, and a connector probe that assumes DUAL.</summary></entry><entry><title>Oracle&#x27;s SQORA driver takes a rowset change, then crashes or loses rows</title><link href="https://adbcbridge.org/notes/oracle-instant-client-odbc-findings/"/><id>https://adbcbridge.org/notes/oracle-instant-client-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-24T00:00:00Z</published><summary>Oracle Instant Client ODBC 23 (SQORA) accepts SQL_ATTR_ROW_ARRAY_SIZE on an open cursor and then segfaults in bcoReturnColData or silently drops rows; CLOB columns read a row at a time.</summary></entry><entry><title>Four things DuckDB&#x27;s ODBC driver does that a caller has to know about</title><link href="https://adbcbridge.org/notes/duckdb-odbc-findings/"/><id>https://adbcbridge.org/notes/duckdb-odbc-findings/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-23T00:00:00Z</published><summary>DuckDB ODBC 1.5.5 - SQLGetInfo(SQL_DBMS_VER) segfaults, a parameter array stores set 0 in every row, a C++ exception across the FFI aborts Rust, and :memory: is a new database per connection.</summary></entry><entry><title>SQLColumns segfaults on a NULL NUMERIC_PRECISION from mongosqld</title><link href="https://adbcbridge.org/notes/mongodb-bi-connector-through-mysql-odbc/"/><id>https://adbcbridge.org/notes/mongodb-bi-connector-through-mysql-odbc/</id><updated>2026-09-04T00:00:00Z</updated><published>2026-08-23T00:00:00Z</published><summary>MySQL Connector/ODBC 9.4 runs strtol() on the NULL NUMERIC_PRECISION the MongoDB BI Connector reports for a DECIMAL column, and the process dies inside SQLColumns.</summary></entry></feed>
