0.38 - implemented mysql_stmt function support in mysql connection fixed mysql_autocommit detection fixed missing self before __getRow and __getRowRange in python db driver implemented query filtering and routing interbase/firebird dead-db/relogin works now added test for 0 length result set to PySQLRDB's fetchmany method added mysql_config sanity test to configure script NULL's are escaped in fake input BLOB binds now query router works pretty well now applied Sharpinskiy Dmitry's odbc unicode patch integrated Devananda's statistics gathering code added support for mysql stored procedures integrated Devananda's mysql result set updates sqlrelay.conf.example installed as $datadir/examples/sqlrelay.conf now integrated Andreas Behr's listener crash patch removed erroneous reference to sqlrcon_errormessage in php pear db another multibyte clob fix added "delimiter" command to sqlrsh to change delimiter from ; to whatever removed msql support added db2 9.1 installation doc added firebird 2.0 installation docs router connection overrides authtier=database fixed a bug where clients would hang if they requested a cursor when none were available added some additional mdb 5 checks to configure script added iconv const char parameter check to configure script the main listener doesn't listen for clients until all of the connections have started now added notes about tcp_tw_recycle/tcp_tw_reuse in tuning doc ping causes the connection to relogin if it returns false now added iconv include/library find to configure script fixed sqlrlistener so forked listeners don't remove the pid file switched oracle 8 column size variable type from sb4 to ub2 if maxqueuelength>maxlisteners then scaling isn't used 0.37 - integrated Charles Frank's SID code fixed bug in configure script where it would erroneously report that the MDB tools connection wouldn't be built uses (u)int[16|32]_t instead of short/long, etc. changed row count, affected rows to use a 64 bit value got rid of all plain "int" references in C/C++ api single-quotes and backslashes are escaped when using fake input binds now fixed "integer expression expected" error when running configure --disable-python changed "connections" to "instance id's" in /etc/sqlrelay sqlrsh's help displays help for ping/identify commands changed sybase installation instructions to use alien on debian de-supported python<2.1 clob/lob's aren't deleted if their length is 0 removed lago support fixed some bugs in tcl api added tcl tests implemented native binds for postgresql8, added "fakebinds" connectstring parameter to provide back-compatibility added configure test for -Wall switched lots of: char a[charstring::length(b)]; to: char *a=new char[charstring::length(b)]; ... delete[] a; to improve compiler compatibility removed #ifdef __GNUC__ around static variable definitions, I'll add #ifndefs for compilers that don't allow them (like SCO's) if necessary fixed bugs where getRow(),getRowAssoc(),getOutputBind(),etc. in various api's wouldn't return binary data correctly updated mysql dropin api so unsupported functions return unknown-error and mysql_error/mysql_errorno work when they do updated php pear db code with david forums' patches removed references to prepare_tokens/types/etc. and overrode freePrepared() python api pays attention to retrytime/tries now fixed a hang when username/password are wrong fixed a crash when too many cursors were requested switched most sprintf's for snprintf's made maxquerysize, maxstring/lob/clobbindvaluelength configurable added configurable idle client timeout removed broken sybase/freetds encryption connect string option for now added --with-initscript-prefix configure option to make init script location configurable php module should compile against php 4.0 again, though without cleanup functions added -pthread when compiling as well as linking sqlr-start links against -lm now uses file::generateKey() rather than ftok now, uses project 1, not 0 added loadbalanced as a connection parameter, with default of false, if the db is load balanced, then if one connection determines that it has gone down, only that connection will re-login added /usr/local/lib to list of base dirs to find zope in, for OpenBSD 3.7 fixed a bug where bind cursors weren't getting cleaned up java api build creates a jar file oracle 8 connection's fetchatonce/maxselectlistsize/maxitembuffersize are configurable at run time now fixed a bug where the null indicator wasn't being set to 0 for lob's updated docs to indicate that getConnectionPort/Socket() are only valid after suspendSession() and getResultSetId() is only valid after suspendResultSet() updated php docs; fixed some typo's sorted out some lob length issues in mysql updated inputBind to take an int64_t fixed a bug where DB2 connections wouldn't reconnect if the db went down fixed a bug where DB2 update/delete with no affected rows was returning an error added nls_lang connection string option to oracle7/8 connections added getOutputBindBlob/Clob() methods for perl/php/python/ruby api's if a bind variable or substitution variable isn't a string,long or double (or if prec/scale aren't specified for a double) then the inputBind(s)/substitution(s) functions return false PHP Pear db's query() returns a result set for "SHOW TABLES" now Got perl dbi clob/blob binds working again, documented how to use them freetds connection funnels everything through a single cursor, although it appears to higher levels that there is more than 1 cursor, so nested queries won't work if a result set buffer size is used, but errors no longer occur fixed a bug where fetching a clob from oracle containing utf8 data could cause a buffer overrun and subsequent crash applied Gena01's php pear db patches, some other fixes made SID code work for all databases, use other instances of SQL Relay rather than a mysql database started on query router code implemented php pear DB sequence functions for oracle all programs create pid files now, sqlr-stop stops them by iterating over the pid files and killing the pid's in the files rather than using ps added some checks for tcl functions/types in configure script configure script filters out non-g++ CFLAGS from mysql_config if using g++ lots of configure script updates for cygwin java api uses jlong instead of jint now for cursor/connection 0.36.4 - fixed mdbsql detection fixed const error in mdbtools connection added const to *connection::identify()/pingQuery() methods improved efficency of sending lob's added Py_INCREF(Py_None) before returning Py_None's or adding them to an array fixed php pear db bug that caused NULL values not to be inserted 0.36.3 - added allowShortReads option to non-readline sqlrsh build fixes to php pear db driver for autoExecute sqlrsh uses libreadline even on systems that don't have libhistory now changed test -n -r "${sysconfdir}/sqlrelay.conf" to test ! -r "${sysconfdir}/sqlrelay.conf" in init scripts 0.36.2 - added -lnnz10 to instantclient configuration 0.36.1 - added support for oracle instantclient added python 2.4 to spec file 0.36 - configure script defaults db2 version to 8 configure script detects various odbc function paramters, uses them to build odbc connection applied Matthias Klose's freetds patchlevel patch added Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS in various places in CSQLRelay.C fixed freetds version check even more INSTALL is moved to INSTALL.txt for OS X now applied Matthias Klose's Zope configure patch added mdbtools connection fixed double-free of debug file name sqlrsh exits after running a script now ctrl-D doesn't crash sqlrsh now connections=0 is valid now, will start no connections and dynamically scale from there upped MAXQUERYLENGTH to 65536 removed MAXQUERYLENGTH from sqlrdefines.h fixed bug where query length > MAXQUERYLENGTH could cause segfault when copying references sqlr-listener and sqlr-scaler refuse to start now if runasuser/runasgroup can't read the config file sqlr-scaler shouldn't loop up if sqlr-listener is killed now fixed bug where scaler's group might not be set properly processes don't try to set their user/group unless they're different from the user/group that the process is currently running as, should prevent "cannot switch group to nobody" messages per Matthias Klose's bug reports: set manpage section to 8 for sqlr-ipclean, sqlr-start, sqlr-stop fixed MDBTOOLS detection to handle includes/libs installed in /usr/include, /usr/lib fixed another odbc SQLLEN/SQLINTEGER bug updated config.guess fixed PHP api to use resource lists - cleans up itself now with no need to use sqlrcon/cur_free fixed PHP Pear DB script bug which would cause an error code to be returned if -1 was returned for affected rows (ie. if a database doesn't support affected rows) added -framework Python to compile python stuff on Darwin/Mac OS X added connectstring descriptions to PHP Pear DB docs added code which toggles TCP_NODELAY to flush data written to either side of the connection here and there rather than wait on the Nagle delay, improved performance over a network substantially added .PHONY makefile flag, removed INSTALL -> INSTALL.txt hack added /usr/sfw to configure script's search paths uses rudiments error class added /sw to configure script's search paths added -Wno-long-double if system supports it several macosx-related configure script changes fixed denied/allowed ip's configure script looks for some stuff under /cygdrive/c/Progrm Files now for php 5, the pear db driver uses PEAR::loadExtension rather than DB::assertExtension 0.35 - added (slightly modified) pkgconfig stuff from Dolphpower's pkgconfig patch added PHP Pear DB driver added --with-db2-version configure option STRIPPROG is set before calling install-sh now added fixup socket to listener so forked clients can retrieve the handoff socket from a newly spawned database connection, this makes it possible to use scaling and handoff=pass switched many int arguments and return values to bool did some code cleanup to listener, scaler, sqlrconfigfile fixed reversed affected rows logic for freetds 0.61 support mysql_change_user now in mysql connection added mysql client api drop-in replacement library configure script looks around for ssl library now configure script doesn't look for crypto library now, instead it just uses ssl library flags which should include crypto library if ssl needs it fixed a few things in the perl DBI driver: made bind variable index 1-based for execute() removed clearBinds() after execute() initialized a few hash values when execute() fails added support for output bind parameters odbc connection uses ODBC v 3.0 column attribute names now added setResultSetBufferSize(100) to perl dbi, php pear db, ruby dbi and python db drivers added support for temp tables for all databases that support them added tests for drop-in api's applied a db2 version-8 specific patch from Masanori Akaishi added search for libgthreads to configure for SCO configure uses -pthread on cygwin now the default implementation of commit/rollback allocate a new cursor now applied a reexecute bug patch from Tony Fleisher and Erik Hollensbe and fixed a bug that it revealed postgresql connection uses "select 1" for ping instead of calling PQstatus (which doesn't actually check the connection status) fixed changeUser() bug where login/initCursor was done in the wrong order and the cursor array was getting deleted Oracle8 connection checks the version of the database now and uses proxy credentials for authtier=database only when the database supports it, otherwise it uses sqlrconnection::changeUser() added oracle 10g support moved some code back into sqlrconnection class from helper classes renamed constructor/destructor.C *ctor/*dtor.C for connection and c++ to remove object file name collisions, between the collisions and a bug in strip, the static C++ api library wouldn't work applied a patch so varchars in oracle8 can be up to 32768 bytes long fixed a bug where db2 connections would return the result set of the previous query if the current query returned no rows lots of fixes to sybase/freetds connections, sybase properly uses cursors now fixed db2 connection, had confused SQL_SUCCESS/SQL_ROW_SUCCESS and SQL_SUCCESS_WITH_INFO/SQL_ROW_SUCCESS_WITH_INFO added support for sybase rpc commands improved support for interbase stored procedures DESTDIR works as expected now applied perl dbi patch from Tony Fleisher and Erik Hollensbe fixed bug where SEEK_END was used instead of SEEK_SET to lock sockseq lots of minor cygwin-related build fixes applied Srinivas Devarakonda's fake binds patch applied Jason Hihn's patch for sqlite3 added ifdefs to maintain sqlite<3 compatibility applied Leonard Rochael Almeida's python segfault patch added test for python version < 2.1 and deprecation notice configure uses full path name instead of -L, -l for tclstubs library, on some platforms, libtool fails to build a shared library if .a files are linked into it using -L, -l no stripping is done at build, link or install time now 0.34.3 - updated spec file for suse 9.0 applied a patch to fix a typo in C API spec file searches for zope and python paths uses includedir instead of incdir now doc's are installed in ${datadir}/doc/sqlrelay now instead of ${prefix}/doc/sqlrelay 0.34.2 - updates for fedora core 1 compatibility Mac OS 10.2 compatibility improvements A few documentation updates 0.34.1 - fixed rpm build by upgrading to libtool 1.5 and using -inst-prefix-dir for postgresql client api drop-in replacement library 0.34 - sqlrelay.conf parameters weren't getting defaulted properly scaler checks to see if a DB is marked as down before it tries to log into it, if it is marked as down, then it tries a different DB connection sends it's connectionid to listener along with port/socket listener check to see if a DB is marked as down before trying to hand off a client to it. if it is, then the listener forks and pings the db to get it to come back up. php API uses RETURN_STRINGL for getField and getOutputBind now python API uses Py_BuildValue("s#" ...) for getField and getOutputBind now java API has getFieldAsByteArray() and getOutputBindAsByteArray() methods now ruby api uses rb_str_new() instead of rb_str_new2() for getField and getOutputBind now incorporated Vladimir Kouznetsov's code for interbase stored procedures perl API is binary safe now perl API returns empty lists for get*Row*() methods now if the row is beyond the end of the result set perl API returns undef for getField() and getOutputBind() for NULL values now netbsd init script is fixed now applied lots of patches from Takeshi Taguchi for typo's and compiler warnings added postgresql drop-in api added support for column precision/scale to core classes and all DB's that support it all databases return the number of bytes required to store the column on the server for getColumnLength now added support for determining whether a column is nullable or a primary key for databases that support it fixed a bug where supplying a NULL path in sendFileQuery() would cause a crash fixed a bug where NULL binds weren't being faked at all added a hack for broken glibc-2.3's split up sqlrconnection.C and sqlrcursor.C in connection base classes added support for tcl < 8.2 inputBindBlob in java api takes a byte array now instead of a String postgresql connection uses PQfmod if PQfsize returns -1 updated libtool scripts cleaned up and sped up unsupported signal checks in configure script fixed bug where failure to specify metrics caused crashing sqlrconfigfile class doesn't cause crashes when id isn't found anymore config file arguments that are less than a certain value (in most cases less than 1) are set to the default value now sqlrconfigfile class uses list class now to store user/connectstring lists updated config.guess, config.sub, ltmain.sh rpath is optional for everything now rearranged data in shared memory segment a bit, simplified code use a struct for data in shared memory segment now, should alleviate alignment problems on sparc/ppc all API's are linked against appropriate thread libs now revamped oracle installation docs oracle 8i/9i are linked only against -lclntsh and `cat sysliblist` now added freetds/sybase libcs/ctpublic.h clash warnings db2, oracle, freetds, sybase use -rpath by default now gcc uses -pipe option if available configure has --enable-small code option .o files are stripped of .note and .comment if possible added LD_ASSUME_KERNEL=2.4.1 note to db2 install docs fixed db2inst1 -> testdb typo in db2 install docs updated mysql/lago/postgresql/sybase/db2/interbase docs a bit added oracle8i/9i-specific tests better ps aux/-efal detection -fomit-frame-pointer -fno-exceptions are used now, debugging build just uses -fno-exceptions freetds connection disables affected rows for freetds-0.61 freetds tests use sendQuery("commit tran") instead of commit(), for some reason that's necessary with freetds libmysqlclient.so is referred to directly instead of using -LPATH -llib because libtool likes to append .libs to paths that don't end in "lib" on some platforms (notably Solaris x86) and libmysqlclient.so is almost always installed in $(somepath)/lib/mysql instead of $(somepath)/lib don't link directly against -lstdc++ any more, instead, set up libtool to use g++ to link everything added more verbose logIn error reporting to oracle8 connection 0's for bind var counts aren't sent when fetching from a bind cursor now fixed bind cursor fetch problems 0.33.1 - fixed double-install of /etc/init.d/sqlrelay on redhat added -lstdc++ to libs if using gcc3 applied fixes to commandline clients 0.33 - configure script figures out rpm build directory better added sane defaults for every configfile parameter updated dtd sqlr-config-gtk fills in default values now "listener and connection" attribute values in config file have been changed to "listener_and_connection" to satify xmllint, but "listener and connection" still works updated sqlrelay.conf.example added sqlrclient-config and sqlrclientwrapper-config scripts removing rpm's removes /usr/local/firstworks/java , include/sqlrelay, and var if they're empty programs return proper exit status's now connection class's listen() method takes a parameter indicating whether to detach before/after logging in. Detach before allows DB2 to work, detach after allows an exit status to be returned if logging in fails query.py isn't installed anymore, it's redundant getRow was using row instead of whichrow, fixed that added sendQuery that takes a length parameter to handle binary data added upper/lower/mixed column name methods java API's are in com.firstworks.sqlrelay package now added init scripts queries with substitutions correctly reset their length after the substitutions are applied now incorporated minx's LOB-fetching bugfixes into oracle8 connection oracle 8.1.7's OCILobRead doesn't return OCI_NEED_DATA, worked around that oracle8 connection handles NULL LOB's correctly now as well query and sqlrsh programs set their result set buffer sizes to 100 now so huge queries don't use up all your ram added getOutputBindLength method to API's added __del__ methods to PySQLRDB classes several connections didn't process the correct number of connect-string variables uses rudiments' updated client/server architecture uses rudiments' logger class now renamed libauthenticator, libconfigfile, libconnection to libsqlr* and added support for using them as shared libraries libsqlrconfigfile is based on rudiments xmlsax class now sqlr-config-gtk is based on rudiments xmldom class now dependency on libxml no longer exists LOB and string binds use memorypool class now fixed init script and ruby api uninstall problems applied Leo Almeida's python db patches which handle closing cursors/connections better moved a bunch of sqlrconnection class code into other classes, created a few new classes that are used by it alone postgresql connection closes stdout/stderr after logging in now added -localstatedir command line option to redirect /usr/local/firstworks/var to somewhere else moved allocate calls into logIn() methods of connections and deallocate methods into logOut() methods; makes reconnect work with oracle8 added support for cursor output binds changed the way that the clients and servers negotiate which cursor that the client should use added REEXECUTE_QUERY and FETCH_FROM_BIND_CURSOR protocol directives changed SENDING_QUERY directive to NEW_QUERY removed all iostream references, should allow sqlrelay to be compiled against uclibc (for all connections that can also be compiled against uclibc) added error message if ftok fails in listener added Paolo Dotta's liveconnection=PQstatus fix to the postgres connection added signal option to sqlr-stop it's possible to do negative input bind long's now when relogging in to a db that went down, cursors are just reset, not deleted/created, this allows the query to be re-executed fixed a memory leak in Oracle8 connection where OCIHandleFree was being used instead of OCIDescriptorFree Postgresql connection supports typemangling=lookup option now where the connection will query the pg_type table at startup and return type name values from it Fixed lurking memory bug in api where column buffers weren't getting created if dontGetColumnInfo() was called, but the longdatatype member was getting referenced anyway. def and def_lob's are properly initialized now in oracle8 connection api uses rudiments' file class for cache files now libtool is used where possible uses (a modified version of) Matthias Saou's spec file to build RPM's now builds tgz's for Slackware now supports freetds-0.61 connection daemon drops temporary tables when a client session is ended for postgresql and mysql libtool is used to make php, python modules now applied Vladimir Kouznetsov's PHP api patches to fix null behaviour perl, php api builds are quieter now remove unnecessary -pedantic from CXXFLAGS modularized configure script incorporated Takeshi Taguchi's TCL API 0.32 - affectedRows and totalRows were returning 0 instead of -1 for databases that don't know that value, now they return -1 python api's suspendSession() returns 1 or 0 now suspendResultSet was screwing up the results of firstRowIndex() and rowCount() but they are fixed now python/ruby API's would crash if getColumnNames was called after calling dontGetColumnInfo invalid DDL caused sqlr-connection-oracle8 to crash, that's fixed now fixed several cached-result-set related bugs client automatically retries reads that were interrupted by signals now, this should fix lots of spurious "network error" bug reports client suppresses low level error messages unless debug is set on now complies with gcc3 now make rpm ignores perl/ruby if you don't have them now postgres database returns affected row count now bug fix - ruby api returns column length now instead of type when getColumnLength is called ruby api handles nil socket now added ruby dbd api contributed by Michael Neuman updated clientapi documentation with regard to commit/rollback and server-side authentication fixed oraclentier documentation bugs spec files take config directories into account now sendRowCounts in libconnection took unsigned longs, but was being passed -1's if the database couldn't supply the parameter, dumb configure looks for libssl and links it into the python lib now perl getRow and getColumnNames don't segfault now when there is no row or columns fixed abortResultSet/cacheData/finishCaching-related segfault handoff between listener and database connection can be done by passing file descriptors or by instructing the client to reconnect congfigure looks in /opt/sfw for software now - per the solaris companion CD configure looks for python.o and ccpython.o now configure looks for sybase stuff in /usr/local/sybase configure looks for serversocketpool.h instead of server.h to find rudiments now connections listen on inet/unix ports only if listener is configured to now configure script correctly determines the existence of oci.h now updated dtd - port not required any more, authentication -> authtier authentication or authtier work for compatibility now allowed/denied ips configuration option profiling libraries libsqlrclient_p.a and libsqlrclientwrapper_p.a are now generated getColumnType(char *col) wasn't returning the correct column type for nonstandard types sqlrcursor recycles column data and result set buffers now and creates the columnnames array on demand instead of every time the postgresql connection has an autocommit-yes/no option now which defaults to autocommit when in non-autocommit mode, the postgresql connection does a commit/begin before ddl statements now added autocommit options to db2, oracle and odbc databases added autoCommitOn/Off() api calls ruby API builds against local c++ library instead of the one installed to the system now listener creates semaphore/shared memory segment now, other programs just attach to it listener checks/sets a pid file listener throws errors, refuses to start if the pid file is already out there or if it can't create a semaphore set or shared memory segment connections, scaler refuse to start unless the listener is running configure detects sybase on freebsd but there seems to be a problem with sybase on freebsd - core dump in configure program configure script detects, configures for Oracle 9i now, at least on Linux configure script shouldn't put -L/usr/lib or -Wl,--rpath /usr/lib into compile strings any more include files moved to sqlrelay subdir of incdir perl api suspendSession returns int now ruby and php api inputBinds and substitutions work now postgresql connection correctly returns REAL datatype in typemangling mode postgresql connection correctly returns NULL's now mysql connection correctly returns affected rows now fake binds like :var1 and :var11 are no longer screwed up decimal and int64 datatypes are recognized as numbers now msql connection correctly returns datatypes now lago connection correctly returns column lengths now lago connection correctly returns whether a column is null or not sybase/freetds connections correctly interpret the "db" connectstring parameter now sybase/freetds smalldatetime and smallmoney types are properly represented now bind-by-position works in sybase now sybase/freetds reports correct field length now sybase/freetds/interbase now support 256 input and 256 output bind vars correctly affected rows is enabled for freetds version > 0.52 queries returning MONEY/SMALLMONEY columns are disabled for freetds version < 0.53 freetds connection correctly supports fake bind variables now freetds connection doesn't spew unknown marker errors when cleaning up after result sets that weren't ct_describe'd configure script finds libxml in /opt/gnome now -version or --version returns version for cmdline programs now replaced VERSION with SQLR_VERSION throughout code to avoid conflicts incorporated a patch to enable php-4.1.1 compatibility sqlite connection rewritten to be more conventional, also supports transactions in sqlite 2 sqlr-stop correctly cleans up the tempfile dir and properly figures out what directory that is instead of always using /usr/local/firstworks/var/sqlrelay/tmp interbase returns correct datatypes now non-faked NULL binds work correctly now added server-side debugging sqlr-start can run with -strace option now to generate strace files for sqlr-connections configure script now looks for gnome-xml first and only looks for libxml if it doesn't find gnome-xml closeCursors works correctly now changed server connect string parameter to db for db2 changed database connect string parameter to db for interbase libconnection detaches from the controlling tty before logging into the database now. This is necessary for db2 connections to work. db2 date/time/timestamp types are reported instead of unknown now port connection string parameter not used in freetds/sybase anymore implemented ping for db2, interbase, msql undef as value for an input bind/substitution works in perl api now java/php api's handle NULL strings correctly now, especially in substitutions/inputBinds sockseq permissions get set correctly now interbase connection uses 1 transaction for ddl and another for non-ddl now, ddl is committed immediately transactions work in interbase now fields, query and sqlrsh don't crash (or act strangely) now if the -id command line option is used with an invalid id added -lcrypt to interbse compile requirements to support Firebird configure looks for libxml2/parser.h as well as libxml/parser.h now support for ruby 1.6.7 changed python module name from CSQLRelay to SQLRelay.CSQLRelay in Py_InitModule call ruby build script replaces "CC = cc" with "CC = $(CXX)" and "CC = gcc" with "CC = $(CXX)" now instead of just replacing gcc with g++ reworked the rpm-building stuff added -lcrypto to python api build script bench doesn't compile by default now configure checks /opt for db2 now incorporated Dieter Maurer's patch which aligns the port number in shared memory correctly for Solaris and others rpm build should work on non-redhat systems now fixed many memory leaks in C++ api replaced lots of strstreams with char arrays oracle connections print more error messages when they fail to log in oracle8 connection cleans up when repreparing for binds now connections close cursors after pings now for connections which check whether a result set is NULL before cleaning it up, the result set is set to NULL after cleaning it up, and also in the cursor constructor, this prevents calls to abort() (which in turn call cleanUpData()) from cleaning up a pointer that has already been cleaned up connections that have to set environment vars do so in a manner that will work with old versions of libc, putenv and setenv now fixed improper AC_TRY_LINK calls in configure, changed AC_TRY_RUN's to AC_TRY_LINK's everything should be compatible with autoconf 2.53 now added -lm to Oracle libs 0.31 - skipped 0.30 - replaced lingerOnClose() calls with a read that will fall through when the client closes it's end of the connection implemented the close() method for PySQLRDB's cursor class if a library's include files are in /usr/include, -I/usr/include is no longer put into the compile string, it was causing problems for gcc3 use umask to set file permissions instead of doing it using fstream directly, works with gcc3's fstream now added commit/rollback methods to the API to help get around some ODBC databases not implementing those methods added support for ODBC>=3.0 when using iodbc renamed ruby API files to fall in line with ruby DBI naming conventions bug fix: had failed to NULL terminate user/password in listener implemented Oracle n-tier authentication for Oracle8i new authentication scheme - listener/connection/listener and connection/database options support for SQLite-2.0 which doesn't need GDBM bug fie: Zope adapter's _finish and _abort didn't call close() better detection/auto-install of Zope API added test for gtk12-config and gtk10-config in configure reworked build system to configure faster fixed bug where an invalid query would end the session fixed ps -efa/ps aux bug for BSD systems 0.29 - bind variable debug doesn't screw up
 anymore
	added Zope detection/auto-install
	configure script finds java install from various rpms now
	explicit check for Oracle's libwtc.a/libwtc.so
	check for ld -G vs ld -shared
	looks for postgresql libs/includes in many new places
	configure checks to see if odbc or lago need threads now
	sqlr-config-gtk doesn't make libcfparse.a now, just links against
		configfile.o
	much more robust library detection in configure script now
	sqlr-stop works with systems that don't have SYSV ps command
	sqlr-config-gtk should compile against gtk-1.0 now
	ruby api should "make clean" even when ruby isn't in your PATH now
	mysql connection should compile against mysql's that dont have the
		mysql_real_connect method now
	in connection class, wherever I was setting busy=0, I call abort() now,
		this ensures that busy=0, suspendresultset=0 and cleanUpData()
		get's called
	make clean cleans up all bench dirs now
	make makes all bench dirs now
	fixed ICONVPATH/LIBICONVPATH problem in configure
	if libxml wasn't found, the query,fields and sqlrsh commands will
		compile now, just without the -id and -config options
	zope install copies python api into zope dir now instead of symlinking
		to it
	

0.28 -	sqlrsh compiles against readline version 2 now
	fixed a bug where a connection daemon would dump core if dynamic scaling
		is turned on and it fails to log into the database or create
		cursors
	support for .sqlrelay.conf
	cleaned up signed/unsigned short/long's everywhere
	c api's sqlrcur_getOutputBind didn't work, but it does now
	took care of a bunch of compiler warnings
	if you leave out the -connectionid parameter when running
		sqlr-connection-xxx it will use the first connectionid
		if one exists
	added cursors parameter to the config file and sqlr-config-gtk
	connection daemons shouldn't core dump now if they fail to log in
	implemented executemany and rowcount in pythondb api
	documented pythondb api similarly to other api's
	libconnection runs returnResultSetData immediately after handleQuery
		and resumeResultSet now.  This obviates the need for the
		client to send a FETCH_RESULT_SET command/cursor and fixes a
		bug where the client could fetch the wrong result set by
		sending the wrong cursor.
	fixed a bug that would cause previous queries to be re-executed instead
		of the current query when prepareFileQuery is used
	by default, postgresql connection returns numeric types now
	added mangletypes connect string option to postgresql connection
	made ping/identify more efficient, made them connection-based rather
		than cursor based
	configure --includedir should work now
	documented perl DBD api similarly to other api's
	client debug messages detect whether the app is a web app or not by
		checking for the DOCUMENT_ROOT environment variable and
		put 
 tags around debug messages if it's found
	sqlr-listener doesn't fork bomb any more when trying to run 2 on the
		same port, now it exits gracefully
	fixed a bug where the connection daemons weren't calling 
		disconnectClient()
	C API doesn't convert back and forth between a class pointer and a long
		anymore, now it uses a typedef struct pointer for the same
		thing, simplfies the code
	listener sockets linger on close now, for 10 seconds
	changed sqlr-stop to use awk instead of cut

0.27 -	added java API
	all API shared object libraries are linked against $(LIBSTDCPP) now
	in the C++ API, if copyrefs is turned on, cachefile name is copied now
		this is an "oops" fix
	defined getRowLengths (and friends) functions in the python api,
		this is another "oops" fix
	fixed the ruby Makefile, sometimes it wouldn't make properly
	resumeSession() wasn't copying the unix socket into the buffer when
		copyReferences() was set, but it does now

0.26 -  implemented rebinding/reexecution
	pythondb API's execute method uses its "parameters" as input binds
	pythondb API's callproc method calls execute
	pythondb api is threadsafe at level 1, not 0
	changed sqlrelay.conf.example and all docs to use port 9000 since that's
		the default port in defaults.h
	configure script now deals with sysconfdir, localstatedir, libdir, 
		etc. directives now
	sqlrsh uses gnu readline if it's available
	added ruby API

0.25 -	made relative pathnames work in --with-xxx-prefix configure arguments
	prepareFileQuery returns 1 or 0 now, depending on whether the file
		could be opened or not.  It also sets the error messsage in
		that case and no longer prints it out unless debug is set on.
	forgot to set liveconnection to 1 in a lot of cases
	modified client/server protocol so it doesn't send negative numbers
		across networks, should fix a lot of problems
	removed implicit directory for caching files in API
	added -scaninterval and -cachedirs command line parameters to 
		cachemanager
	fixed api so it won't try to substitute or execute a NULL query if 
		prepareFileQuery fails
	api returns better errors now
	added getFieldLength()'s methods/functions
	code cleanup, especially s/Header/ColumnInfo/g
	it's now possible for the API's to tell the server not to get or send
		column info
	fixed double-type bind/substitution problem in php api
	Oracle8 connection uses array fetch now
	fixed a bug that would have caused dml to possibly not be committed 
		and duplicated instead
	fixed a configure bug that wouldn't find libgds.so for interbase
	connections create/connect to semaphores, detach after logging in 
		now, should elimiate problem of semaphores/shared memory 
		segments hanging around after failed logins
	made sure to close/unlink sockets during shutdown
	made sure to lock the sockseq file, I can't believe I missed that...
	added XNETLIB to src/cmdline/Makefile.in
	added an -enable-static option to the configure script
	modified everything to allow multiple statements to be executed through
		a single connection
	fixed a bug that could cause getField() commands to return the wrong
		data (or segfault) when resuming a suspended session with a
		suspended result set
	fixed a bug that could cause cache file's to lose data when not 
		buffering the entire result set at once
	fixed a bug that would cause cached result sets to get truncated when
		ending a session
	python getRow methods don't crash on an empty result set now
	connections use the same inet/unix port for the duration of their
		existence now instead of getting a new one for each client
		session
	PHP and Python API's used to both call setResultSetBufferSize() instead
		of setCacheTtl() when their setCacheTtl method was called
	Removed all offset-related API functions, replaced them with a row
		indexing system
	caught a bug that would cause python getRowRange to potentially
		run off the end of the result set
	PySQLRDB.py uses CSQLRelay.so directly now instead of going through
		PySQLRClient yielding a reasonable performance improvement
	Moved some code from PySQLRClient.py to CSQLRelay.C
	Added bind-by-position support to oracle connections, validateBinds()
		no longer tries to validate bind-by-position variables
	Added fakeInputBinds method, call it in all connections where the
		db doesn't support binds directly
	configure script will find libxml2.a/.so now
	removed -O2 flag, was causing floor/pow functions to work improperly
		with iostreams
	postgresql connection returns UNKNOWN_DATATYPE now for all of it's
		non-standard datatypes
	postgresql connection returns 0 instead of -1 for lengths of varchar and
		char types now
	modified perl-dbd api to use input bind methods instead of substitutions
	added lots of comments to the perl-dbd api
	the user/password connect string options work for interbase now
	the python/pythondb api connection constructors take the same parameters
		as the other api's now
	added check for gethostbyname in libnsl, added it to lago compiles
	added libsocket to pthreads check
	perl API tries 3 different ways to compile instead of just trying to 
		figure out how ahead of time
	php API tries 2 different ways to compile instead of just trying to 
		figure out how ahead of time
	oops, not-connected to oracle error is 3114 not 3144, fixed that
	added a call logOut() to reLogIn() in libconnection


0.24 -  listener cleans up unix socket file on exit
	connections clean up unix socket files after use
	some cygwin compatibility tweaks
	fixed bugs in the sqlrelay.conf DTD
	changed oracle7 connection to ofen 10 rows at a time
	changed oracle8 connection to prefetch 10 rows at a time
	changed db2 connection to use fixed size, recycled buffers
	changed db2 and odbc connections to SQLFetchScroll 10 rows at a time
	changed freetds connection to use fixed size, recycled buffers
	added port argument to freetds connectstring
	configure script looks for python 1.6, 2.0 and 2.1 now
	configure script looks for libiconv and uses it with libxml if
		necessary
	added -lwtc8 to ORACLELIBS, some versions appear to need it
	improved/simplified freetds connection code and set it up to work with
		array fetches, should that ever work in freetds
	added sybase connection
	modified bind variable methods in libconnection... established 0 as
		non-null and -1 as null
	added bindVariablePrefix() method to libconnection... established : as
		the default prefix
	removed nonNullBindValue() and nullBindValue() methods from oracle
		and interbase connections since the base class methods now
		work for those datbases
	added bindVariableIsNull() methods to db2 and odbc connections which
		were missing that method
	fixed interbase bind problem
	changed sybase connection to ct_fetch 10 rows at a time
	updated the docs.
	updated the dblist.h file for the gtk config program with the current
		list of database connection types
	fixed a bug in the interbase connection that would cause it to crash
		unless a dialect was selected
	modified bench programs to use multi-row fetch like the connections do
	added @DLLIB@ to ORACLE_LIBS in config.mk.in  Solaris 2.6 appears to
		need it
	added a test for libaio.so and added it to the list of ORACLE_LIBS,
		Solaris 2.6 appears to need it
	make clean now removes the .pics directories that Konqueror makes
	changed cacheOn() to cacheToFile(), making it thread safe
	all programs use rudiments permissions class now
	Python and PHP API's use the C++ API directly now instead of going
		through the C wrapper
	Perl API should compile on any system now
	added --with-gdbm-prefix and --with-iconv-prefix to configure script
	changed order that configure searches for Perl, php-config
	removed attempt to statically link oracle connection
	better odbc detection in configure script
	restored iodbc compatibility
	added compatibility with older versions of mysql
	

0.23 -  added an interbase connection
	added a comma after LONGVARCHAR in the datatypestring array in 
		datatypes.h -- fixed misidentified column types in db2 and
		interbase
	fixed transposed configure/make in installing.html document
	changed "unixport" to "socket" in sqlrelay.conf and in sqlr-config-gtk
		in sqlrelay.conf, unixport still works for back-compatibility
	odbc connection does binds now
	found and fixed a memory leak that was causing memory associated with
		executing a statement not to be freed
	added libxml's libz dependancy back, some libxml's can read compressed
		files
	moved commitOrRollback() to after processQuery()
	fixed the python docs, the constructor syntax was really wrong
	changed parseQuery() method to prepareQuery() in libconnection

0.22 -  added #!/bin/sh to top of sqlr-stop and backupschema
	removed a bunch of strlen()'s that weren't necessary
	passed variable sizes into functions that needed them instead of 
		letting the function calculate it or using a strlen()
	initVariables only happens in copyreferences mode now
	used fixed size, recycled buffers instead of dynamic 
		allocation/destruction in lots of places
	in the api, several buffers aren't allocated now until the first time
		they're needed, then they're recycled afterwards
	client/listener authentication protocol is different
	connection catches attempts to send really large queries, bind 
		variables or bind values and shuts down the connection
	api endeavors to catch those closed connections and react with an 
		descriptive error or fail with a broken pipe error
	added db2 connection
	added precision/scale parameters to double binds
	added runasuser/runasgroup parameters
	added db2 and odbc benchmark programs
	added db2 test script
	None's in python inputBinds and substitutions work as NULL's now
	fixed bug that caused openCachedResultSet() to miscalculate the
		total number of rows in the result set and crash trying to
		access the 0'th row
	made sqlr-stop keep from trying to kill itself
	updated documentation

0.21 -  failure to read the query size, skip, or fetch sizes could cause the 
		connection daemon to crash, fixed that
	connection daemon and api use static, recycled bindvar array instead 
		of dynamic allocation
	modularized the bind/substitution var code in the api
	got rid of fakeBinds(), you just can't fake binds
	API call to validate binds rather than automatically doing it in the
		connection daemon
	insert/update with a NULL input bind inserts/updates a NULL now 
		instead of a ""
	added getNullsAsNulls() and getNullsAsEmptyStrings() methods so NULLs
		can be returned as either NULLs or empty strings

0.20 -  fixed sendQuery after openCachedResultSet API bug
	added ODBC connection
	fixed Oracle-related build bug
	tweaks for gcc-2.96
	added sqlr-config-gtk
	modified the NEWS file
	added support for input and output scalar bind variables
	eliminated Final queries
	eliminated Cache queries
	implemented new methods for caching
	implemented 4 stage (prepare, substitute, bind, execute) querying
	fixed unititalized variable problem in returnResultSet() 
		of libconnection
	made getRow() and getColumnNames() perl methods return arrays like 
		you'd expect them to
	fixed failure to delete semaphores/sharedmemory segments when
		killing listener bug
	zend-ized the php API more than it was.
	added api method allowing the programmer to override the function
		used to print debug messages
	php API can now print debug messages
	added copyReferences() method and functionality to C++ API to fix
		problems related to lost references and garbage-collecting
		in perl/python/php
	added substitution/bind support for long and double types
	added -version command line arg to all programs
	changed the NEWS file
	removed namespace from sqlrelay.conf, it wasn't done correctly anyway,
		maybe I'll add it back later...
	removed sendEndOfSession from Python API
	Perl, Python and PHP API's have type-independant functions/methods for
		getting fields, setting substitution and bind variables, etc.
	added substitutions and inputBinds functions to Perl, Python, PHP API's
	added getRowHash, getRowDict to Perl, Python API's
	renamed getarray to getrowassoc in PHP API
	reformatted the PHP API code
	updated docs
	Makefile tweakage
	input/output bind code in libconnection makes sure the variables exist
		in the query before trying to bind them now
	sqlr-stop removes temp files now
	handled NULLs better in substitutions and inputBinds
	removed sendField for int/floats from libconnection
	the listener can pass sockets to connection daemons now instead of
		requiring the client to reconnect

0.19 -	made sure to delete alarmhandler in main.C for all db connections
	made sure to delete each authstring before deleting the array itself
		in the listener
	major protocol changes, should be much faster and use much less
		memory
	made a lot of changes so the result set can be buffered in chunks 
		instead of all at once
	added functionality for getting the number of rows affected by an
		insert/update/delete if the back end database supports it
	if a connection receives a query, but the database is down, when it
		re-connects, it retries the query now
	fixed oracle float value problem
	added functions to python and php api's
	fixed perl bug with cached queries
	fixed bug where (query length)%511==0 and (query length)!=511
	added API test scripts
	added oracle8 connection (uses OCI8)
	renamed oracle connection to oracle7
	added support for LONG's in oracle7 connection
	added support for LOB's in oracle8 connection
	added ping and identify methods
	made isTransactional() return 1 by default, adjusted connection daemons
		in response
	made oracle connection daemons use OCI commit and rollback functions
	documented client-server protocol and connection daemon library
	fixed mysql,msql connections to work with suspended result sets
	ping was broken in most of the connections, fixed it
	defaulted sessiontimeout to 60 seconds
	fixed bug where next query after an error would fail
	sending auth/query strings work like sending the rest of the strings 
		now
	bug fix - connection calls cleanUpData() for non-select queries now
	bug fix - connection calls cleanUpData() when the result set is done 
		now
	made openCachedResultSet() leave the session open

0.18 -	handled PL_na/na conversion better in perl API
	removed redundant -fpic and unnecessary -DPIC
	fixed problem with Perl API that caused rudiments library not to be
		linked in at run-time
	fixed a bug in query.py that kept it from connecting
	bunch of --with-xxx-prefix build fixes
	fixed Solaris linker issues
	changed killsqlr to sqlr-stop and improved it
	allowed c++ to be used instead of forcing g++
	fixed mysql bench bug
	fixed a few memory leaks
	preliminary CYGWIN support
	added -s to executable compilation string and removed calls to strip
	changed build to detect a shared object version of libstdc++ and use 
		"ld -G -o" with it if there is one.  If there is only the
		static version of libstdc++.a then the build uses "c++ -Wl,-G"
		This is to provide generic support for systems with or without
		GNU ld, systems with or without a shared object version of
		libstdc++, systems with multiple versions of libstdc++ and
		perl Makefiles.
	removed libz dependancy from libxml
	fixed scaler to accurately scale connections without overrunning
		maxconnections
	added socket paramter to sqlrc_alloc in PHP API.
	output from sqlr-connections started by sqlr-scaler doesn't go to 
		/dev/null anymore
	made python API thread-happy
	changed configure script to look for libg++.so and use it if it
		finds it.  This is mainly for FreeBSD compatibility.
	postgresql/msql connections redirect their stdout/stderr to /dev/null
		now because both spew data now and then

0.17 -	commit/rollback only gets issued at end of session if any non-select
		queries were issued during the session since the last
		commit/rollback was issued
	fixed bug in API - sendEndOfSession followed by a query would fail
	added unix domain socket support
	got rid of extern "C" { #undef __cplusplus ... #define __cplusplus }
		it caused more problems than it solved
	spelled persistent correctly in the NEWS file
	added --with-xxx-prefix command line options to configure script
	fixed NULL number problem with oracle connections
	can now leave a session open and pass the port/socket to another
		client which can resume the session
	added dynamic connection scaling
	changed sendEndOfSession() to endSession() and sendLeaveSessionOpen()
		to suspendSession()
	blocked all signals but SIGINT and SIGTERM in listener
	blocked all signals but SIGINT, SIGTERM and SIGALRM in connection
	updated Python and PHP API's; converted sendEndOfSession to endSession

0.16 -	added debug command to sqlrsh
	bug fixes for queries longer than 511 characters
	updated query.py
	updated PHP module - fixed error handling, added documentation
	added perl DBD module
	fixed documentation errors
	updated the NEWS file
	added endofsession attribute to the sqlrelay:instance tag in the
		config file.  connection can now issue either a commit or
		a rollback when the client dies or ends it's session.
	fixed bug in mysql connection which caused random errors, I have no
		idea how it ever worked, but it almost always did.
	changed license on perl API to Artistic
	made connections advertise to listener via shared memory rather than
		a fifo
	added some minimal sqlrsh documentation
	fixed a long standing synchronization problem - actually the change
		was in the rudiments library, but the effect is most
		noticable here
	made the freetds connection sendNullField() when the ct_convert command
		returns a NULL instead of a string for the field value

0.15 -  config file parser fixes
	freetds connection, bench and testsuite
	added return values to returnData and returnHeader in libconnection
	bench directory compiles by default now
	listener hands off client to connection which sends data directly
		back to client instead of going through the listener first
	transmissions between client and daemons are done in blocks rather
		than character at a time now
	client/daemon protocol optimizations
	added getLongest() methods to C,C++,Perl API
	python/zope API reports errors correctly now
	python/zope API will reconnect if connection is dropped somehow
	added sqlrsh command line program
	added Python API docs
	added PHP API
	blocked SIGPIPE, handled broken pipes another way

0.14 -	documenation improvements and fixes
	added -fpic -fPIC -DPIC to CXXFLAGS
	added extern "C" and #undef/#define __cplusplus in various places
	added modes to install scripts
	Python API
	Zope Adapter
	bench directory with benchmark programs
	testsuite directory with test scripts
	updated connection code to handle double quotes, backslashes and
		semicolons correctly in every case
	updated API's to handle double quotes, backslashes and semicolons
		correctly too

0.13 -	build fix: calls to "test" are now more compatible with non-bash
		shells

0.12 -	if connection receives an end of session, it sends a commit to
		the database, or more precisely calls the commit() method
		of the connection class which, for transactional databases,
		sends a commit and for non-transactional databases, does
		nothing.
	build now succeeds with gnome-xml
	added support for SQLite and Lago databases
	build now detects a suitable cpp command and uses it when building
		the perl API instead of just calling cpp directly
	VERY preliminary work on FreeTDS (Sybase/MS SQL Server) connection

0.11 -	perldoc documentation for the perl API
	added warnings to indicate when default parameters are fallen back on
	cleaner build
	added extern "C"'s around c includes - fixed dynamic loading bugs
	added varargs functions to perl API

0.10 -	put LDFLAGS into Makefiles
	configure now adds -static to LDFLAGS to generate static binaries if
		possible (not possible when linking sqlr-connection-oracle on 
		linux) Ran into problems when dynamically linking a binary on 
		one OS release then trying to run it against the slightly 
		different libraries of another release.  Stripped, static 
		binaries run faster and use less memory than dynamically linked
		ones anyway.  The only price you pay is space on the 
		filesystem.  If you'd like dynamic linking though and think 
		that it will work for you, just remove -static from the 
		config.mk.in file before running configure or the config.mk 
		file after running configure.
	general Makefile maintenance
	reorganized code into libconnections and classes which inherit from it
		for each connection.  No more #IFDEF BUILD_XXX's.
		Connection classes for new databases should be easier to code
		now.
	moved commandline processing into listener and connection classes and
		out of the main.C files
	little optimizations here and there
	can send multiple Final queries per connection now
	can open connections to a cluster of databases or a set of replicated
		databases within a single id now
	multiple users/passwords per id
	if a connection detects that the database went down, the other 
		connections to that database don't advertise themselves
	C API
	Preliminary Perl API
	Connect string doesn't have to have a trailing semicolon now.
	Fixed mysql connection bug which caused it to never return a result 
		set.
	Oracle 8.1.5 compatibility (perhaps 8.1.x ?)

0.9 -	oops fix.  it's now possible to store " and \ in the database
	moved config file parsing routines from main into listener/connection 
		classes to help support a future plugin architecture
	reengineered Makefiles to be friendlier to non-gnu make

0.8 -	XML config file (requires libxml-1.8.7 or newer)
	fixed a bug where connections could fail to advertise

0.7 -	added PostgreSQL support
	added mSQL support

0.6 -	documentation installs now
	added MySQL support
	fixed some documentation typo's

0.5 -	more robust build/install/uninstall

0.4 -	configure based install. 
	Reorganization of includes.
	make install/uninstall directives.
	Got rid of RCS.

0.3 -	Stability fixes.
	Synchronization fixes.

0.2 -	First Release. Totally different from 0.1.
	
0.1 -	Not Released.