New features:
- Notification Modules
- Connection Schedules
- Query Router Modules
Full changelog:
- fixed mysql set isolation level query
- updated mysql connection to run commit/rollback at the end of every
session even if only selects were run, to make sure metadata locks are
released
- renamed sqlrclientexitstatus_t to clientsessionexitstatus_t
- updated all db connection modules to reinit the column count during
prepare rather than execute
- fixed bug where server-side errors set by conn/cursor->setError()
could inadverntantly be overriden during the next call to
conn/cursor->errorMessage()
- added several more queries to mysql stmt-api blacklist
- configure option --disable-odbc-driver actually works now
- filters can specify an error string and error number now
- added support for systemd
- fixed a memory leak by applying and updating a patch from Kasyanov
Dmitry to deallocate the error message in C++ API destructor
- legacy_stdio_definitions.lib is now included when building ODBC with
VS2015
- added support for PHP7
- added -wait option to sqlr-start for non-Windows
- disabled -disable-new-window option to sqlr-start for non-Windows
- non-ascii character encodings work with the C# API now
- rudiments prompt class is used instead of using readline directly now
- renamed "logger-events" to just "events"
- added notification framework and "events" module
- added connection schedule framework and "cron" module
- applied sec/usec patch from samchuck at neowiz to custom_nw logger to
fix subtle time calculation error
- applied a patch from samchuck at neowiz to the sqlrclient protocol
module to deallocate storage for bind variables after logging the
query to resolve a reference-after-free bug
- added router module framework with "regex", "userlist" and
"clientiplist" modules
- when router detects a possible integrity violation now, it raises an
event which can be logged or trigger a notification and disables the
instance
- router calls begin, commit, and rollback on all connections now, even
if they're executed as queries rather than using the api methods
- removed tls_userlist/krb_userlist auth modules and updated the
userlist auth module to support tls and kerberos auth
- converted most of the doc source to wikitext
- fixed ODBC driver bug that could corrupt memory and trick the driver
manager into thinking that some basic functions are unavailable
- ODBC SQLTables works more correctly now
- fixed an ODBC bug that caused the first row to be fetched twice when
using SQLBindCol
- SQL Relay now supports Kerberos encryption and authentication
- SQL Relay now supports TLS/SSL encryption and authentication
- Python 3 support
- Node.js 4.x and higher are now correctly detected and supported.
- Separate "database" and "proxied" Authentication Options
- Various ODBC-related bugs have been fixed
- A subtle bug that caused incompatibilities with the popular
logrotate utility has been fixed
- A long standing problem that occurred when using a
listenertimeout with a threaded listener (the default) has been
fixed.
- After a graceful restart, Apache workers would get stuck in the
Closing Connection state after running a PHP script that used
SQL Relay. This is now fixed.
See full changelog:
http://software.firstworks.com/2016/03/sql-relay-0650-release-announcement.html
* Fix build with Ruby 2.2.
Changelog:
0.59 - updated docs, removed some Cygwin-specific info
added support for login warnings
made bind variable buffers dynamic on the client side
added maxbindvars parameter on the server side
binding a NULL to an integer works with db2 now
moved getting started with DB docs into the cloud
added a semaphore to ensure that the listener doesn't hand off the
client to the connection until the connection is ready,
elimiating a race condition on the handoff socket that could
occur if the connection timed out waiting for the listener
just after the listener had decided to use that connection
oracle temp tables that need to be truncated at the end of the session
are truncated with "truncate table xxx" now rather than
"delete from xxx"
oracle temp tables that need to be dropped at the end of the session
are truncated first, rather than the connection re-logging in
an ora-14452 error (basically indicating that a temp table can only be
dropped after being truncated, or if the current session ends)
does not automatically trigger a re-login any more
updated cachemanager to use directory::read() directly instead of
directory::getChildName(index)
added cache and opencache commands to sqlrsh
made cache ttl a 64-bit number
added enabled="yes"/"no" parameter to logger modules
updated odbc connection code to use new/delete and rudiments methods
rather than malloc/free and native calls
retired Ruby DBI driver
fixed command line client crash when using -id "instance" with an
instance that uses authtier="database"
fixed bugs that could make reexecuted db2 selects fail and cause a
database re-login loop
tweaked spec file to remove empty directories on uninstall
fixed typo that could sometimes cause a listener crash
postgresql and mdbtools return error code of 1 rather than 0 for all
errors now
tweaked odbc driver to work with Oracle Heterogenous Agent (dblinks)
fixed bugs related to autocommit with db's that support transaction
blocks
implemented the ODBC driver-manager dialog for windows
updated windows installer to install ODBC registry settings
ODBC driver copies references now
fixed various bugs in sqlrconfigfile that caused sqlr-start with no
-id to crash or behave strangely sometimes
refactored build process to use nmake and be compatible with many
different versions of MS Visual Studio
updated the slow query logger to show the date/time that the query
was executed
consolidated c, c++ and server source/includes down a few levels
implemented column-remapping for get db/table/column commands to
enable different formats for mysql, odbc, etc.
odbc connection correctly returns database/table lists now
added support for maxselectlistsize/maxitembuffersize to MySQL
connection
updated mysql connection to fetch blob columns in chunks and not be
bound by maxitembuffersize
fixed a misspelling in sqlrelay.dtd
swapped order of init directory detection, looking for /etc/init.d
ahead of /etc/rc.d/init.d to resolve conflict with dkms on
SuSE Enterprise
C# api and tests compile and work under Mono on unix/linux now
sqlr-start spawns a new window on Windows now
added global temp table tracking for firebird
added droptemptables parameter for firebird
added globaltemptables parameter for oracle and firebird
updated mysql connection to allow mysql_init to allocate a mysql
struct on platforms that support mysql_init, rather than
using a static struct
fixed subtle noon/midnight-related bugs in date/time translation
updated mysql connection to get affected rows when not using the
statement api
updated mysql connection not to use the statement API on windows,
for now
disabled mysql_change_user, for now
fixed blob-input binds on firebird
0.58 - updated spawn() calls to detach on windows
added support for sqlrelay.conf.d
removed support for undocumented ~/.sqlrelay.conf
fixed detection of oracle jdk 7 and 8 on debian and ubuntu systems
added ini files for PHP and PDO modules
added resultsetbuffersize, dontgetcolumninfo and nullsasnulls connect
string variables to the PHP PDO driver
refactored sqlr-status and removed dependency on libsqlrserver
cleaned up and refactored server-side classes quite a bit
fixed a bug where sqlrsh was losing the timezone when binding dates
server-devel headers are now installed
removed backupschema script
moved triggers, translations, resultsettranslations and parser into
separate project
blobs work when using fake input binds now
replaced sqlr-stop script with a binary (for Windows)
preliminary support for server components on Windows
sessionhandler="thread" is now forced on Windows
added various compile flags for clang's aggressive -Wall
added support for sybase 16.0
removed unnecessary -lsybdb/-lsybdb64 for sybase 15+
fixed PQreset, PQresetStart, PQresetPoll in postgresql drop-in
replacement lib
added debug-to-file support to PHP PDO driver
fixed subtle row-fetch bug in sybase/freetds drivers that could cause
the total row count to be set to garbage
fixed support for older versions of perl (5.00x)
fixed a bug in the DB2 connoutpection that caused blob input binds to be
truncated at the first null
added support for binding streams to output bind blobs in the PHP PDO
driver
updated PHP PDO guide with notes about bind variable formats
integrated Samat Yusup's dbh driver methods for PHP PDO
added stmt driver methods for suspending/resuming result sets to the
PHP PDO driver
added row cache to mysql drop-in replacement library to fix issues on
systems with 32-bit pointers
fixed subtle db2 output bind bfers the entire result set by default now
implemented an ext_SQLR_Debug database handle attribute for perl DBI
added support for type, length, precision, scale bind variable
attributes in perl DBI
output bind clobs and blobs work in perl DBI now
addd support for perl DBI ParamValues, ParamTypes and ParamArrays
attributes
tweaked the odbc driver so it works with the jdbc-odbc bridge and
jmeter
added custom db/statement attributes to perl DBI for
DontGetColumnInfo, GetNullsAsEmptyStrings and
ResultSetBufferSize
added note about JDBC-ODBC bridge removal in Oracle Java 8
made threaded listener the default
tweaks to sqlr-connection/sqlr-scaler processes to deal with lack of
SIGCHLD/waitpid() on windows
the signal on semaphore 2 is now undone manually when sqlr-connections
shut down and doesn't rely on semaphore undo's for normal
operation
subtly tweaked freeing of Oracle column-info buffers to work around
a crash that could occur after using a cursor bind
A full refactor and split-up into separate packages for the various APIs and backends.
Changelog since 0.43 follows.
0.55 - fixed a sql translation bug related to exists clauses
added deployment projects for windows
tweaked make.batch install target to install 32-bit files under
C:\Program Files (x86)
added a timeout parameter to db2 and odbc connect strings
fixed a bug that could cause a connection's ttl to fail because a
semaphore was left signalled when another connection's ttl
expired
updated handoff="proxy" code to work with sessionhandler="thread"
replaced waitpid call in sqlrscaler with rudiments equivalent
got the server-side stuff to compile on windows
added configurable fetch buffer sizes to sybase, freetds and db2
connections re-distribute themselves periodically if the database is
behind a load balancer now
fixed a bug that caused sqlrsh to incorrectly interpret internal
commands with leading whitespace when run from a script or on
the command line
fixed a bug that caused cursors not to be completely cleaned up after
when dynamic scaling is used
fixed a bug that caused the response timeout to be handled improperly
added response timeout command to sqlrsh
added support for clobs/blobs with firebird
fixed a blob-related bug with sqlite
added support for blob input binds with db2
added support for clob/blob output binds with db2
improved clob/blob fetching with db2
inputBindClob/Blob methods work with all db's now
added -Wno-unknown-pragmas flag (if it it supported) to java build for
solaris 8
updated default item buffer sizes to 32768 for sybase, freetds, db2
and odbc
applied Gerhard Lausser's patch to improve Oracle instantclient
detection
0.54 - fixed bugs that caused problems when unopened result sets were closed
added protocol identification phase to client/server protocol
split client protocol handling out into its own class and abstracted it
updated oracle code not to relogin when dropping tables unless a
temp table with an "on commit preserve rows" was run
updated server to run table-drop and session-end queries after the
session-end commit/rollback, as some queries on some platforms (
ncluding drop-table on oracle) cause an implicit commit and
the rollback needs to be run first
replaced gettimeofday calls with calls to datetime::getSystemDateAndTime
fixed a bug in slow query logger that caused it to display the wrong
query time
a few mingw32 tweaks
fixed a few PDO driver bugs related to affected row counts and
last insert id
implemented PDO exceptions
implemented support for PDO::ATTR_EMULATE_PREPARES by using
substitution variables
added foundrows and ignorespace options to mysql connect string
fixed a bug where affectedRows() would return -1 for MySQL selects
instead of the same value as rowCount()
updated sqlr-connection code not to get db host name and ip address
at startup unless logging is enabled to work around issues
where people fail to put the db host name in dns
fixed a subtle bind format translation bug that caused errors when
translating from oracle-style binds to mysql-style if the
varaibles were out of order with the placeholders in the query
fixed bugs in the mysql and postgresql connection code that assumed
that the bind variables were bound in order, independent of
their names
resolved a paradox involved in detecting whether the current mysql
query needs to have its bind variables faked or not
added support for client-side debug-to-file
added debug-to-file support to command line clients
tweaked server processes to use process::spawn instead of system() and
process::fork()/process::exec()
added another error string to detect down mysql database
added support for a multi-threaded listener
fixed a bug that could cause a crash when logging connection-level
errors
added back x64-detection so sybase and db2 libraries will be detected
properly
added support for forward-only cursors to the PDO driver
fixed a bug that could cause one (and only one) dynamically spawned
connection daemon to ignore its ttl
added support for get/set result set buffer size to the PDO driver
updated configure test for xsubpp
updated configure test for tcl to support multi-arch
updated configure test for python to support multi-arch
added custom PDO driver attributes to access db type, version, host
name, ip address and bind format
added custom PDO driver attribute to get/set current database
added custom PDO driver attribute to set whether or not to get column
info when fetching the result set
updated db2 to re-login when it sees error -30081
0.53.1 - updated the configuration and tuning docs a bit
fixed a Makefile bug that caused "make clean" to be interrupted
extern "C"-wrapped sys/times.h for OSR500
0.53 - added support for sqlite statement api and native binds
fixed some leaks related to using sys::getHostName()
added multiarch detection
added PHP PDO driver
fixed a bind variable translation bug where output binds followed by
:= would not be detected
dropped zope support (for now)
dropped PHP Pear DB support
refactored init script - one script should work on all platforms now
updated init script installation - should work on virtually all unixes
added OS X launchd configuration
updated the sqlr-listener to clean up files related to ipc, sockets
and marking whether the db is up or down on exit
sqlr-start no longer starts the cache manager
added a second init script for the cache manager
plugins are statically linked into libsqlrserver if the platform
doesn't support shared libraries (or if --disable-shared is
specified at configure time)
the perl API should build with old versions of perl (5.00X) on older
platforms (redhat 4.2, 5.2, 6.2, etc.) now
updated postgresql bind docs
added dateyyyyddmm parameter
added yyyyddmm parameter to translatedates translation
added SQLR_MYSQL_DATE_YYYYDDMM envrionment variable to mysql drop-in
library
added SQLR_ODBC_DATE_YYYYDDMM envrionment variable to odbc driver
0.52 - sqlrsh has long reported the wrong version, fixed that
added csv support to sqlr-export and a -format xml|csv option
replaced snprintf calls with charstring::printf calls
added a test for sys/vnode.h to work around an issue with perl on
SCO OSR6
added workarounds for old versions of sqlite without sqlite3_malloc
and sqlite3_free with char * argument
fixed error with sqlserver where "describe <table>" would return
columns in alphabetical order rather than the order they
are in the table
the code freetds uses to get column names from MS SQL Server works
for temp tables now
added informix->mssqlserver translation for select into queries
added translation to convert ||'s to concat() calls or +'s
added a long-missing "delete clientsock" to sqlrlistener that could
cause a crash after enough time
various documentation tweaks
added handling for "select into" queries to
temptableslocalize/sybaseize translations
fixed various crashes that could occur when a query filter was used
updated the query routing and filtering doc
sqlrsh supports multiple commands on a single line or on the
command-line now
exit/quit in a sqlrsh script aborts the script now
improved date/time parsing for translations and result-set conversions
fixed lots of cases where const char *'s were being deleted
added 64-bit build support for windows
combined sqlrclient files for faster compiling
converted \t to actual tab in regular expressions for
posix-compatibility
0.51 - fixed minor perl DBI driver documentation issue
added support for oracle 12c
added support for db2 10.1 and 10.5
updated docs for oracle 12c, db2 10.1 and 10.5 and sybase 15.7
modernized database installation docs a little
fixed db2/sybase detection to take the system architecture into
account when searching for libs
applied various build-related patches from Ville Silventoinen
fixed rpm->rpmbuild in installation docs
added ora-00020 to list of errors that will cause the oracle
connection to attempt to re-login, per Ville Silventoinen
fixed some MS SQL Server/dateddmm parameter issues and updated docs
to explain the remaining issues
0.50 - fixed sqlrserver-config script to return data for libsqlrserver
rather than libsqlrconnection
added test for SQLROWSETSIZE for odbc that doesn't define it
updated postgresql drop-in library enough to work with psycopg2-2.4
with various caveats and tweaks
fixed NULL dereference in custom_nw logger
added support for dbversion, show tables/databases and describe for
SQL Server via freetds
fixed a subtle bug that could cause the wrong triggers to be run
fixed a reference-after-free in
sqltranslations::removeReplacementTable
fixed an uninitialized variable (sqltr) in sqlrcontroller class
updated the freetds connection to support multiple cursors correctly
added config parameters for reformatting dates in the result set
added various query translations for mssqlserver
added an mssqlserver error map for the mysql drop-in library
fixed a memory leak in the freetds version-checking code
added new search paths and default prefix for syllable
added support for null-terminated result bind lists to the mysql
drop-in library so apps can optionally bind fewer columns than
come back in the result set
added configure tests for php-config-<version>
0.49 - fixed various issues that came up when cross-compiling
fixed make uninstall to remove a few things that it missed
fixed -pthread annoyance
added -Werror to default build for most components
fixed various issues revealed by -Werror
added password encryption framework
added rot,md5 and crypt password encryption plugins
moved modules to libexec and removed the libsqlrelay_ prefix
moved modules out of the connection directory and into their own
directories under src
reorganized code tree to compile faster
updated clean targets in Makefiles to run faster
fixed a bug that could cause problems when fetching from an output
bind cursor under a very specific set of circumstances
reorganized server code into libsqlrserver
implemented the swisscomm log format as a plugin
added dbHostName and dbIpAddress methods to the client API
refactored authentication to remove a client-server round-trip
replaced handoff="reconnect" with handoff="proxy" which uses
listener-proxying to remove a client-server round-trip
disabled nagle's algorithm for all sockets
fixed a bug that could cause a hang if the db login failed
updated reading of skip and fetch parameters not to rely on buffering
refactored login error reporting
fleshed out the ODBC driver significantly
added docs for using SQL Relay from ODBC and JDBC
refactored windows make.bat script
0.48 - integrated patches from Neowiz for:
handling for oracle errors ora-01033, ora-02067 and ora-04068
bind validation when using the statement cache
optionally rejecting oracle queries with duplicate
bind variables
sqlrconnecton::setClientInfo/getClientInfo
query logging
separate authentication and response timeouts on the client-side
environment variables for setting timeouts
sqlrelay-level errors for exceeding various bounds
improved statistics gathering
refactored Oracle re-prepare logic
created a query logging framework
implemented the current slow query log as a plugin
implemented the neowiz query log format as a plugin
created a custom query framework
implemented the neowiz statistics gathering commands as custom queries
added a test program for triggers, translations and other extensions
and obscure features
fixed several bugs in the informixtooracledates translation
added a droplocalizedtemptables trigger
added support for "global temporary" to temptableslocalize translation
removed oracletemptablespreserverowsbydefault translation -
temptableslocalize is much more effective
fixed a bug that caused a "no server-side cursors" error to occur if
when a new session is started if cursors="0" in sqlrelay.conf
the client no longer aborts a result set before sending a new command,
it just sends the new command, eliminating a client/server
round-trip
replaced sqlr-connection-"dbase" with a single sqlr-connection program
that loads plugins for each database
0.47 - fixed bug that caused sqlr-export to output negative xml-entity values
fixed single-quote-escaping in sqlr-export
forced handoff="reconnect" for Cygwin and Linux<2.2
updated all command line programs to use the same command line
argument structure
added a "fields" command to sqlrsh
added a -command argument to sqlrsh so commands and queries can be
run from the command line directly
renamed query and fields to sqlr-query and sqlr-fields
improved readline detection in the configure script
added getDatabase/Table/ColumnList support to odbc and mdbtools
connections
added detection and support for openjdk
integrated patches from Neowiz for:
using -g3 if available when --enable-debug is specified
support for using the oracle statement cache
fixing an oracle column-resource-related memory leak
eliminating sqlr-start delay
"using namespace rudiments" declaration fixes
added a faq entry about common OCIEnvCreate errors
removed default id warning from sqlr-cachemanager
removed coloration from sqlrsh
updated begin, commit and rollback to return errors if they fail
updated firebird docs
added parsing of standalone constraints in a create table query
0.46 - refactored the translation framework to mimic the trigger framework
added make.batch file for building on windows
added C# API and ADO.NET adapter
added begin method to API's
added sqlrelay.xsd
added date binds
applied Georgiy Kirichenko's missing flushWriteBuffer() patch
fixed some subtle bugs in the Ruby DBI module that modern versions of
Ruby DBI reveal
fixed sql parser errors involving "not null" and union clauses
added a translation to replace double-quoted string literals with
single-quoted string literals
fixed a sql parser bug where "group" of a group by clause could be
misinterpreted as a table alias
updated the scaler to poll 10 times per second and also accept a
trigger from the listener to mitigate race conditions that
can become problematic when connections="0" is used
added C# and ADO.NET docs and updated windows documentation
updated the documentation
added support for waitfordowndatabase config parameter
applied some odbc fixes from Chae Young-ku
added explicit support for outer join operators to the sql parser
dynamic-ized triggers and translations
added a "matches" to "like" translation
added a "serial" to "autoincrement" translation
fixed debug option to query command line client
added javac compile test to configure script
fixed an __attribute__ problem that could occur if perl was compiled
with gcc>2.95 but used on a system with only gcc-2.95 available
fixed an oustanding tcl bug that caused cursors not to be created
fixed several bugs related to escaping quotes
refactored OS detection in configure script
added \n after reading from stdin on Haiku
updated docs to reflect that mysql supports ?-based bind vars
0.45 - added trigger framework
added support for getting the native database error number
added support for mapping native error numbers to MySQL error numbers
for the mysql drop-in replacement library
renamed all .C files to .cpp for windows
added msvc projects for sqlrclient, sqlrclientwrapper, sqlrutil and
sqlrsh and got them all working natively on windows
updated code so ttl="0" works as expected
updated code so dynamic scaling of cursors works as expected
documented dynamic scaling of cursors somewhat
fixed a few mdbtools errors
column aliases work as expected now with firebird
fixed a bug where if an app either enabled or disabled autocommit,
that could become the default status of autocommit rather than
what was set in the config file
added autocommit on/off to sqlrsh
fixed a bind-var-related memory leak in mysql drop-in lib
fixed return values in mysql drop-in lib
updated getTableList() to exclude system tables
applied Benno Lange's localstatedir patch to fix a case where the
localstatedir command line parameter wasn't working properly
applied Renat's listener alarm handling patch
0.44 - updated postgresql drop-in lib for postgresql 8/9 compatibility
updated mysql drop-in lib for mysql 5.2+ compatibility
applied Renat's patch to fix the client session count in the stats
added getDatabase/Table/ColumnList method/functions to API's
added string inputBind method/function with length
added bind variable translation
added transaction block emulation