Version 1.1.0 of SQL Relay, the powerful connection pool, load balancer, query router, and database proxy, is now available.
ODBC Improvements
The main focus of this release is ODBC improvements.
ODBC is unimaginably complex. To illustrate this point, the ODBC Driver for SQL Relay consists of 11223 lines of code, while the SQL Relay Client Library that it wraps only consists of 8748 lines. The API also provides several different ways do to do the various things, and different apps use different ways. It's a daunting task to implement even the majority of commonly used features, and then there's always that one app that uses some particular feature. As such, the ODBC driver hasn't gotten the attention that it deserves.
This release brings many, many major and minor improvements to the ODBC Driver for SQL Relay. It is especially improved when used with an ODBC backend, and even more so when using ODBC on the backend to access MS SQL Server, a very common use case.
The improvements are far too numerous (and in most cases, subtle) to describe here. If you had an ODBC app that was having trouble with SQL Relay, try it again.
Windows Improvements
There were basically build problems with older versions of SQL Relay that prevented it from running on some systems, and prevented it from running correctly on others.
The vast majority of these problems have been vetted and solved.
As with ODBC, if you had a platform that had trouble running SQL Relay, try it again.
32-bit Output Bind Length
This release also remedies a significant oversight. On the client-side, and in the protocol, input and output bind variables have always had a 32-bit length. Until this release, though, due to an oversight, in the server API, output bind variables had 16-bit lengths. This basically made it impossible to fetch a string longer than 32678 bytes from the database. Some databases limit varchar fields to this length, so it's not a problem with those databases, but it created significant problems in some distinct cases.
This oversight has been remedied. In fact, this is the tiny, but significant, ABI-breaking change that caused the bump to 1.2.0 from 1.1.0.
Bug Fixes and Improvements
This release also includes the standard array of random bug fixes and minor improvements. Full Changelog follows.
- fixed subtle error in sqlr-import that could cause it to skip empty/NULL fields
- implemented getCurrentDatabase for odbc connections
- implemented selectDatabaseQuery for odbc connections
- added NCHAR, NVARCHAR, NTEXT, XML, and DATETIMEOFFSET types, updated odbc connection module to recognize them
- added --with-windows-version to configure.vbs
- enabled "liveconnection" test for "Lost connection to MySQL server during query" error
- made server-side string outputBind() method's valuesize 32-bits
- added missing mapColumn() call to sqlrservercontroller::getField()
- fixed var directories in Windows deployment projects
- added run-as-Admin requirement to Windows installer
- implemented ODBC SQLProcedures, SQLProcedureColumns, SQLGetTypeInfo, SQLPrimaryKeys, and SQLStatistics, though currently they only work when using the odbc connection module
- implemented ODBC SQLTables to get schema and table type lists, though currently only works when using the odbc connection module
- ODBC SQLProcedures, SQLProcedureColumns, SQLColumns, SQLTables, SQLGetTypeInfo, SQLPrimaryKeys, and SQLStatistics properly set the error now if there was one
- ODBC SQLError properly cycles through the error records now
- updated ODBC SQLGetInfo(SQL_DRIVER_ODBC_VER) to return a value corresponding to the value set by SQLSetAttrInfo(SQL_ATTR_ODBC_VERSION)
- fixed string outputBind() signature in odbc connection module
- fixed a couple of short -> int16_t/uint16_t errors in odbc and mysql connection modules
- ODBC SQLBindParameter(in/out) calls outputBind() now, to work with apps like Delphi which broadly use in/out for out parameters
- refactored odbc connection module's methods to get object lists to support dot-separated object identifiers
- various odbc driver improvements
- updated odbc driver to interpret SQL_C_(X)LONG types as (u)int32_t's rather than long's
- updated odbc connection module to use SQL_C_SBIGINT/SQL_BIGINT for integer binds, rather than SQL_C_LONG/SQL_INTEGER
- fixed uninitialized null/blob flags in sqlrclientprotocol::returnRow()
- various variables are now properly typed (SQLLEN vs. SQLINTEGER) in the odbc connection module
- added "divider on/off" command to sqlrsh
- fixed several cases where microseconds were represented by an int16_t made them all int32_t's
- parsing/generation of fractional seconds pays attention to length of value/format-string now
- fixed a bug that caused fractional seconds to be dropped sometimes
- odbc lazy-fetches now
- odbc driver fakes SQLBindParameter with data-at-exec by deferring the execute and buffering the data locally now
- bumped odbc MAX_COLUMN_COUNT to 384
- added a mars=yes/no flag to enable MS SQL Server MARS when using the odbc driver for MS SQL Server with the odbc connection module
- ODBC SQLGetInfo(SQL_USER_NAME) gets the schema from the backend when used with the odbc connection module now
- increased listen backlogs to 128 from 15/5
- normalize translation doesn't remove spaces around _'s any more
- implemented output bind null indicators properly for db2/informix
- odbc connection supports dynamic maxcolumncount/maxfieldlength now
- fixed but that caused the results of non-tree-based query translations to be concatenated
- updated odbc connection to fetch blob columns in chunks and not be bound by maxitembuffersize
- fixed a bug that could cause a buffer overrun when using maxitembuffersize with odbc, db2, and informix
- configure script finagles the multiarch dir for platforms where gcc -print-multiarch doesn't return anything, but the multiarch dir is necessary to find python3
- configure script can find php-7 on openbsd now
- node is used to run node-gyp.js now
- configure script looks for /etc/php7 now
- configure script looks for node-gyp under /usr/lib*/node_modules/nmp[6789] now
- php pdo api uses zend_long in place of ssize_t now
- fixed uninitialized ncols in mysql connection module