Wednesday, April 28, 2021

SQL Relay 1.9.0 Release

Version 1.9.0 of SQL Relay, the powerful connection pool, load balancer, query router, and database proxy, is now available.

The main features of this release are:

Support for TLS Encryption in the MySQL and PostgreSQL Protocol Modules

SQL Relay has long supported the MySQL and PostgreSQL protocols, on the front-end, allowing SQL Relay to be dropped-in, transparently between many MySQL or PostgreSQL applications and the database. However, SQL Relay's implementation of the MySQL and PostgreSQL protocols has lacked support for TLS encryption, until now. It is now possible to do end-to-end encryption (without a tunnel) from a MySQL or PostgreSQL application, through SQL Relay, and into the database.

Support for UTF-16 Characters in SQL Server nchar/nvarchar Fields

SQL Server 2012 introduced the ability to store UTF-16 characters in nchar/nvarchar fields in addition to the standard UCS-2 that they traditionally supported. However, SQL Relay has traditionally forced a UCS-2 encoding when using nchar/nvarchar fields, preventing SQL Server users from being able to take advantage of this feature. Starting with this release, when using ODBC to connect SQL Relay to a SQL Server database, you can now specify ncharencoding=UCS-2 or ncharencoding=UTF-16 in the connect string to instruct SQL Relay how to deal with nchar/nvarchar fields.

PHP 8 Support

SQL Relay should now compile against, and work seamlessly with PHP 8.

NodeJS 14+ Support

SQL Relay should now compile against, and work seamlessly with NodeJS 14+.

Of course, there are many other subtle new features, improvements, and bug fixes. Full ChangeLog follows:

  • added missing inequality operators to end-of-bind detection
  • fixed commit/begin without commitcount error in sqlrimportcsv
  • fetch errors aren't returned if sqlrclient protocol version < 2
  • query-intercept catches "begin transaction" now
  • query-intercept doesn't intercept various begin-type statements if the query is actually a block of sql containing commit or rollback
  • added ncharencoding option to odbc connection to enable UTF-16 values in SQL Server nchars/nvarchars
  • fixed a bug that caused output binds of length 8000+ to fail on SQL Server
  • begin() runs "begin transaction" instead of just "begin" on SQL Server
  • fixed a column-count reset bug in odbc, db2, informix, and postgresql that could cause begin queries to fail when fake transaction blocks are used
  • object lists have correct column names for mysql, odbc, and jdbc now
  • fixed a bug that caused rollback to be called insted of commit when endofsession="commit" and faketransactionblocks=yes are used
  • commit/rollback is now called at the end of session when faketransactoinblocks=yes is used, whether or not the server believes it's in a transaction block, to catch cases where the begin-interceptor is intentionally bypassed
  • sqlrimportcsv handles dates without centuries now
  • fixed crash in replay module when table name is quoted
  • mysql explain statements work now
  • fixed node-gyp.js detection on ubuntu 20.04
  • added configure options for PHP 8.x
  • added php/pdo module tweaks for PHP 8
  • mysql and postgresql protocol modules support TLS now
  • pushed most of tls/gss code up into sqlrprotocol parent class
  • fixed subtle issues in mysql/postgresql database modules that could sometimes cause reexecutes of the same query with the same bind variables to return no results the second time
  • the configure script specifically looks for liberl_interface.a now
  • updated nodejs macros for node 14+
  • fixed subtle bugs in Python getField, getFieldLength, and getRowLengthsDictionary functions
  • added GVL management to the Ruby API
  • applied patch from Igor to fix configure.vbs VC++ version detection for non-US versions

Rudiments 1.4.0 Release

Version 1.4.0 of Rudiments, the C++ class library for developing systems and applications, is now available.

Though this release does include some new classes, additions to existing classes, this release mainly features changes to improve consistency between classes, as well as some under-the-hood improvements.

ChangeLog follows:

  • added wcharacter, wcharstring, and wstringbuffer classes
  • memorymap::getLength() -> getSize()
  • added various *IgnoringCase methods to charstring/wcharstring
  • removed length()/isNullOrEmpty() with const unsigned char * arguments
  • now size="number of bytes" and length="number of characters/elements", updated comments, parameters, and some method names
  • added datetime::getCentury()
  • added datetime::getShortYear()
  • fixed jsondom::write() of non-existent string values
  • fixed datetime::parse() crash when NULL parameters are passed in
  • added commandline::toDictionary()
  • added parameterstring::getDictionary()
  • fixed potential null dereference in jsondom::write()
  • fixed potential null dereference in templateengine::replaceVariable()
  • added error reporting to templateengine class
  • fixed potentially uninitialized optimum block size in sax class
  • optimized domnode::insertNode() for empty, append, and prepend cases
  • added quoted-printable encodings to charstring
  • added lots of row/column manipulation methods to csvdom class
  • tls::setProtocolVersion() supports "v" format: SSLv3, TLSv1.3, etc.
  • applied patch from Igor to fix configure.vbs VC++ version detection for non-US versions