CHANGES version 2.8.1 This file summarizes changes made since 1.0 Version 2.8.1 ------------- * Oracle: Fixed a transaction related memory leak Version 2.8 ----------- * Allow spaces in URL property values * PostgreSQL: Allow sending application name to the server for logging. Thanks to Chris Mayo. See the PostgreSQL URL property, application-name. Bug fixes: * ResultSet_getBlob: Ensure that returned blob size is 0 if blob is SQL null. * Oracle: Fixed ResultSet memory leak. Version 2.7 ----------- * Added tentative support for Oracle. Thanks to Volodymyr Tarasenko, and Sergey Pavlov for implementing this. This implementation does not support BLOB, though CLOB is supported. It will also not run all zdb unit tests, but should be useful for most purposes. It is released with the hope that others may still find it useful and help iron out any remaining issues. * Added new convenience zdb.h meta include file which can be used to include all required API interfaces * Internal optimizing changes and improvements * SQLite: Clear connection on rollback to prevent SQLite from issue an SQLITE_BUSY error if there are pending selects in progress. * SQLite: added a "heap_limit" URL property. Makes SQLite auto-release unused memory if memory usage goes above the specified limit [KB]. Require that SQLite is compiled with the SQLITE_ENABLE_MEMORY_MANAGEMENT option to take effect. Bug fixes: * SQLite: Ensure that the database file is specified in connection URL. Thanks to Bogdan Nicula. * PostgreSQL: Implemented Connection_setQueryTimeout() Version 2.6 ----------- * Internal optimizing changes and improvements * Enable shared cache mode for SQLite >= 3.5 * Added new configure option --enable-sqliteunlock which enables SQLite unlock notification. This feature requires SQLite >= 3.6.12 compiled with the SQLITE_ENABLE_UNLOCK_NOTIFY C-preprocessor symbol. This option greatly improves upon SQLite concurrency when libzdb and SQLite is used from a multi-threaded program. * Removed deprecated ResultSet_readData() from API Bug fixes: * PostgreSQL: Unescape values retrieved via ResultSet_getBlob() and via ResultSet_getBlobByName(). By an incurie, unescape was left out of libzdb version 2.5. Version 2.5 ----------- * Removed GPL license exceptions. The library is now licensed under the GPL version 3 only. * Deprecated ResultSet_readData(). This function _was_ useful for MySQL, but not for other drivers where it had some overhead. * Added GCC __attribute__ printf checks where applicable * PostgreSQL: Blob retrieval optimized * PostgreSQL: Added unix-socket parameter to connection URL * Internal optimizing changes and improvements Version 2.4 ----------- * The options --with_mysql=<path> and --with_postgresql=<path> to configure has a new meaning; If <path> is given it is assumed to be the full path to respectively mysql_config and to pg_config. Example: ./configure --with_mysql=/usr/local/mysql/bin/mysql_config ./configure --with_postgresql=/usr/local/pgsql/bin/pg_config * From version 2.4, libzdb places its header files into a zdb sub-directory as in, <prefix>/include/zdb. Clients must now use the include-dir compiler flag, -I<prefix>/include/zdb. * Internal optimizing changes and improvements * Changed two prototypes to 'extern void foo(void)' so the library compiles without warning if -Wstrict-prototype is used with gcc. Thanks to Paul Stevens Bug fixes: * Fixed off-by-one bug in Vector_remove * PostgreSQL: Fixed PostgresqlResultSet_getColumnSize to report correct value. * PostgreSQL: Improved error reporting and fixed potential allocation bugs in prepared statements. * PostgreSQL: Calling PreparedStatement_setString with a NULL value now works Version 2.3 ----------- * Cleaned up API and changed function return type to void for those functions that can throw exception on error. * Support variable arguments in Connection_prepareStatement() to make it easy to build prepared statements in-place Version 2.2.3 ------------- Bug fixes: * Make sure connection properties, max rows and query timeout are reset on Connection_close(), if changed. * Ensure that timeout is set for new Connections. * SQLite: Fixed a bug so the SQLite driver now will retry executing on database lock. This should greatly improve concurrent usage of SQLite and reduce database locks from occurring Version 2.2.2 ------------- Bug fixes: * Ensure that reaper progress forward and remove all connections it can * Fixed a va_copy bug on 64 bits systems Version 2.2.1 ------------- * SQLite: Improved error reporting by using sqlite3_prepare_v2() when available. Thanks to Paul Stevens for suggesting this. Bug fixes: * MySQL and PostgreSQL: Fixed off-by-one count when verifying validity of parameter and column index. Thanks to Paul Stevens for bug report. * MySQL: Workaround mysql column truncation bug. Thanks to Paul Stevens for bug report. Version 2.2 ----------- * Detailed error message added to exception. In an exception handler, the variable Exception_frame.message, now provides an alternative to Connection_getLastError() for obtaining the latest error message * From this release, building with exceptions handling is no longer optional but required * Internal optimizing changes Bug fixes: * Fixed Connection_prepareStatement() error reported on a PostgreSQL Connection. Thanks to Paul Stevens for bug report. * MySQL: Fixed error in ResultSet_getBlob() and ResultSet_getString() which lead to a segfault when trying to obtain "large" strings and blobs. Again thanks to Paul Stevens. * PostgreSQL: Fixed the "syntax error at character 12" for prepared statement deallocation. Thanks to Paul Stevens for bug report. Version 2.1 ----------- * API: Connection_ping is promoted to a public method. Clients can use this method to test if a Connection is alive. * API: Connection_clear() is exposed as a public method. Normally it is not necessary to call this method, but in some situations, if you use PreparedStatement_executeQuery it is necessary to call this function to close a prepared statement explicit. Basically, if you see this SQLite error, "SQL statements in progress", call this function to close any previous opened statements before proceeding. * Upon returning a Connection, the Connection Pool previously tried to commit a Connection if it was in a non-committed state, while now it rollback instead, which is assumed to be more correct. * Improved retry when SQLite report database lock, which should reduce the chance to meet the infamous SQLite "database is locked" error * Removed section 3 from "Tildeslash License Exception" so libzdb is licensed clear and permissive. * Internal optimizing changes Version 2.0.2 ----------- * Don't normalize path during URL parsing. If the path needs to be normalized it is the responsibility of the caller * Minor internal changes * libzdb is now licensed under GNU General Public License version 3 Version 2.0.1 ----------- * ConnectionPool_version() is now a class method * Minor internal changes Version 2.0 ----------- * Exceptions handling added to the library. This change how clients should use the library. Methods in the library that can throw an SQL Exception should now be called from inside a try-catch block. Bug fixes: * Fixed a PostgreSQL prepared statement bug. If parts of a statement was defined after its last parameter, preparation failed. Version 1.1.3 ------------- Bug fixes: * This release fixes a MySQL prepared statement bug. If a prepared statement was used with two or more number parameters, the numbers were saved with a bogus value in the database. Thanks to José Antonio Sánchez Version 1.1.2 ------------- * ResultSet_next() can be given a NULL value, upon which false is returned. Version 1.1 ------------- * Added PostgreSQL support * Using 'mysql_config' when available. Thanks to Paul Stevens paul * Removed the viral clausal from the exceptions license * Note, the caller is now responsible for freeing the URL_T object used in ConnectionPool_new(), via the URL_free() method. Version 1.0.4 ------------- * Use libtool to set release information for the library. * Simplified and removed section 4 of the license exception. * Use new version of auto-tools so library extension is set correct * Include bootstrap script for recreating configure * Minor internal changes Version 1.0.3 ------------- * Clear any previous resultset when calling Connection_execute() also. This allow MySQL implementations to issue a Connection_executeQuery() followed by Connection_execute() without having to close the Connection first. Otherwise MySQL may return a 'commands out of sync' error. Bug fixes: * Changed declaration of AbortHandler() so clients are not required to provide this function. Version 1.0.2 ------------- Bug fixes: * Refactor and consolidate PreparedStatement clearResultSet * Do not free prepared statements on Connection_executeQuery(), only the ResultSet if any. * MySQL: Avoid unnecessary re-allocation in MysqlResultSet.ensureCapacity() and set the new buffer length properly. * MySQL: Stop MysqlResultSet_next() sooner when maxRows is reached for versions < 5.0 * MySQL: Do not try to bind params in PreparedStatement unless in-params are present in the statement Version 1.0.1 ------------- * API: Connection_beginTransaction(), Connection_commit() and Connection_rollback() now returns an int (true or false) instead of void. Bug fixes: * MySQL: Removed a debug statement in MySQL prepare statement so a potential error message is not lost - MySQL pops last error messages. * MySQL: Make room for a terminating NUL byte when fetching large strings. * configure.ac: Don't link with zlib unless mysql version was confirmed * configure.ac: Don't print a warning if re2c was not found - Not required Version 1.0 ----------- * Initial release