Tuesday, September 11, 2018

SQL Relay 1.4.0 Release Announcement

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

Like the last release, this release is mainly focused on integrating recent improvements and customizations, contributed by or developed for various clients into the official distribution.




Notable Changes and Improvements

dbase="mariadb" is now supported. You don't have to use dbase="mysql" when running SQL Relay against mariadb any more.

sqlr-import can import CSV files now.

sqlr-export correctly escapes double-quotes now.

Query translations are applied to the select-database query now.

The MySQL/MariaDB connect string supports an api=stmt/classic option now that selects which MySQL API to use. When api=classic, the mysql_*() functions are used and binds are faked. When api=stmt, the mysql_stmt_*() functions are used and binds are supported natively. It turns out that the classic API is faster, even with modern MySQL, so if you don't specifically need the functionality of the stmt API, then api=classic might work better for you. When using the MySQL Front-End Modules, you can even point an app that uses the stmt API at SQL Relay which is configured to use api=classic, and vice-versa.

The ODBC connect string supports a unicode=yes/no option that makes it possible to disable unicode with drivers that don't support it, such as the Cloudera Impala ODBC driver.


There are a lot of other changes too, but everything else is subtle or behind-the-scenes.

Full ChangeLog follows:

  • odbc connection module - trace=yes/no/default now instead of just yes/no
  • pushed detachbeforelogin parameter up to sqlrserverconnection class
  • updated to use rudiments container clearAndDelete...() methods
  • fixed nonsensical uint32_t majorversion>=0 comparison in freetds conn
  • fixed nonsensical uint16_t isnull==-1 comparison in odbc conn
  • fixed return NULL in method that returns false in router conn
  • added manual removal of build directory in nodejs clean target
  • updated nodejs clean target with - in front of node-gyp clean
  • fleshed out the installing-sqlrelay-from-packages doc
  • connect string "timeout" -> "connecttimeout" in docs
  • dbase="mariadb" works now
  • docs have been updated to acknowledge mariadb
  • added configure test to disable ODBC on platforms without SQLULEN
  • updated mysql_config test to add -L/usr/local/lib if it fails, to deal with libiconv, which is located there, on newer freebsd
  • updated mysql drop-in test not to test def_length if def is NULL
  • added NODEGYPPYTHON flag that can be set manually on netbsd
  • fixed gcj/gcj3/kaffe detection on older systems
  • fixed some buggy static module declarations/assignments
  • sqlr-import can import csv files now
  • sqlr-export correctly escapes double-quotes now
  • query translations apply to the select-database query now
  • added api=stmt/classic option to mysql connection module
  • added a per-cursor bindpool
  • added unicode=yes/no opiton to odbc connection module
  • fixed a bug that could cause stale column metadata to a protocol module between prepare and execute when binds are being faked
  • added stalecursors logger
  • added send()/recv() passthrough operations
  • made various bind-related buffers per-cursor
  • added pattern option to query notification event

Rudiments 1.1.0 Release Announcement

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

This release features some fairly significant restructuring of the SAX and DOM related classes. In particular, xmlsax has been genericized into sax, xmldomn has been genericized ingo dom, and xmldomnode has been genericized into domnode. The xmlsax/xmldom classes have been reworked to inherit from sax/dom. The jsonsax/jsondom classes have been added to manipulate JSON objects. The csvsax/csvdom classes have been added to manipulate CSV files. And, finally, the xmldomevents class has been renamed to just domevents, as it can be used with any class that inherits from dom.

The bytebuffer class has also been overhauled and is now implemented similarly to std::basic_string, with similar performance characteristics.

The url class supports HTTP POST now.

Otherwise, there are a ton of internal fixes and improvements.

ChangeLog follows:

  • fixed some dictionary and xmlsax memory leaks
  • fixed lib/lib64 detection in configure script
  • fixed Werror management in configure script
  • fixed race condition in threadmutext test
  • --enable-built-in-regex works on uw7 now
  • added regularexpression match-with-length methods
  • fixed file test on OSR and UnixWare
  • disabled chown in file test on Windows (not reliable over cifs)
  • fixed file descriptor passing on OSR
  • updated xmldomnode::print() to use the output interface
  • added various clearAndDelete...() methods to container classes
  • reenabled chat class by default
  • updated process::backtrace() to take an output, consolidated methods
  • added explicit virtual destructors to input/output classes
  • removed unused containerutilinlines.h header
  • improved dlopen/-ldl configure test
  • abstracted sax and dom classes
  • added csvsax and csvdom classes
  • renamed xmldomnode and xmldomevents to domnode and domevents
  • refactored write/print/xml methods of dom/domnode classes
  • refactored some classes to have trivial constructors
  • renamed regularexpression::compile() to setPattern(), added getPattern()
  • renamed memorypool::deallocate() to memorypool::clear()
  • renamed memorypool::allocateAndClear() to memorypool::allocateAndZero()
  • added clear-with-parameter-reset methods and parameter-getters to dynamicarray, bytebuffer, stringbuffer
  • added cursordomnode class
  • added jsonsax and jsondom classes
  • added some http-post options to url class
  • improved performance of charstring::integerLength(), charstring::parseInteger(), and stringbuffer::append(integer)
  • refactored bytebuffer/stringbuffer to improve performance
  • getStringLength() -> getSize() in read() with terminator
  • added safe-to-include-byteswap.h-after-netinet/in.h configure test
  • updated tls code to actually use RUDIMENTS_SSL_VOID_PTR macro
  • moved various madvise/mprotect/mlock methods to sys class
  • added tests for systems that have, but don't define tzset, ftruncate, and fsync
  • various windows spawn() fixes