2012/03/07 - 0.2005 - refresh and retest License: Now under the Artistic License instead of GPL. Changes: The $OOPS::transfailrx regular expression for matching database errors that should be retried is now built dynamically based on which backends are used. Tests: Removed BEGIN {} blocks from all tests. Swtiched from Data::Compare to Test::Deep. Postgreql: Fixed issue with PG_BYTEA not being defined. With version 9.1 the text of some error messages is changed from version 8.3 With version 9.1, 'virtual' is now a keyword so the column virtual must now be written `virtual`. With version 9.1, even less auto-conversion happens so 0 != '0'. Postgres is no longer tested against the original schmma version. SQLite: Error messages for SQLite version 2 have changed a bit. Bugfix: missing lock_object() method added. Documentation: Section on alternatives removed as it's obsolete. Bug bounty removed. 2008/03/05 - 0.2004 - mysql improvement Mysql: Mysql version 5.0.45 does not have the SERIALIZABLE locking problem. 5.0.22 does. "FOR UPDATE" is no longer added to queries when mysql version 5.0.45 or above is detected. The mysql slow deadlock detection problem turned out to be a bug in the test suite. 2007/05/11 - 0.2003 - major release: garbage collection, bugfixes, mysql New features: * Garbage collection. It's a separate module and must be explicitly invoked. It allows you to clean up persistent data that leaks. OOPS::GC * Reference integrety checker. OOPS::Fsck. * new iterator function: walk_hash() * new helper class: OOPS::TxHash Mysql: It turns out that mysql SERIALIZABLE locking does not currently work. To get OOPS to function properly, it is necessary to add "FOR UPDATE" to every SELECT. This essentially single-threads access to the database becauase every OOPS instance reads a common row. See: http://bugs.mysql.com/?id=28029 Bugfixes: Calling virtual_object on something and then deleting the something and the calling commit() bombed. lock() didn't make it to the public interface -- oops! Multiple changes to the reference counts of unloaded objects would corrupt the unloaded objects. virtual_object() requests were not always saved. readonly mode didn't work on mysql. $ENV{OOPS_SYNC} was ignored. There is now a workaround for SQLite 1.x's file descriptor leak. Cleanup: TestCommon.pm is no longer installed. New tests: Garbage collection. Reference counting Old versions still work New iterator. 2006/09/27 - 0.1008 - new feature: lock() New methods: lock() places a write-lock on a object or scalar. Other changes: Added new test suites (tran6a.t, tran6b.t, tran6c.t, tran6d.t) 2006/09/22 - 0.1007 - minor features, fixes, repass the full regression suite New methods clear_cache() removes the read-cache for virtual hashes. New constructor arguments: readonly Disable commit() and use a less stringent transaction isolation level. less_caching Don't do read caching for virtual hashes. Re-supported: DBD::SQLite It turns out that the problem with DBD::SQLite 1.x is that it leaks file descriptors. As long as you don't create too many OOPS instances, it's safe to use. (Though because of the filedescriptor leak issue it can't pass the whole regression test suite) Changes: SCALAR now returns the exact count of items for tied hashes. Bugfixes: Calling virtual_object() on a not-yet-persistent object saved the object in it's state as of the call to virtual_object() rather than when commit() was called. Removed some warnings generated by the debugging code. 2006/09/19 0.1006 - minor tweaks Added the readonly option. Updated the address for the GPL reference. 2006/09/06 0.1005 - minor tweaks Removed some extraneous debugging printouts Allow 'username' and 'pass' as aliases for 'user' and 'password' when connecting to databases. 2006/07/04 0.1004 - focus on: bugfixes, PostgreSQL schema change, SQLite2 vs SQLite 3 Change the license to GPL. This release tested on: perl 5.8.7, PostgreSQL 8.1.4, Ubuntu 6.06LTS (Dapper Drake) perl 5.8.7, DBD::SQLite2 0.33 (sqlite 2.8.15), Ubuntu 6.06LTS (Dapper Drake) perl 5.8.7, mysql 4.1.15, Ubuntu 6.06LTS (Dapper Drake) Not supported (did not pass tests): perl 5.8.7, DBD::SQLite 1.12 (sqlite 3.2.7), Ubuntu 6.06LTS (Dapper Drake) New features: none Bugfixes: References to hash keys where the key is a large string now work (except when using mysql). Change one column definition in the PostgreSQL schema. This fixes a PostgreSQL compatability bug and this change is required whem moving from PostgreSQL 7.* to PostgreSQL 8.*. Reported by Jon Schindler. http://rt.cpan.org/Ticket/Display.html?id=19723 Bugfix: schema upgrades from 1001 to 1003 weren't always recorded correctly. Don't fail tests if Test::MultiFork isn't installed. SQLite 3 wouldn't auto-initialize. SQLite 3 gives different error messages and that caused errors rather than raising a deadlock exception. Old versions of Data::Compare will recursse infinately. Don't even try! Unfortunantly Debian (and Ubuntu) include very old versions of Data::Compare. Other changes: Ran ispell on OOPS.pod and made other edits. Added new tests (misc2.t, big.t, upgrade1003.t, failures.t) Added a new test harness: supercross7() Added support for DBD::SQLite2, auto-detect SQLite version. Dropped ab-loopspeed.t in favor of Time::HiRes. 2004/05/19 0.1003 - focus on: new features Added hooks to upgrade the schema when the schema is changed and to use an older version of OOPS if auto_upgrade isn't set and the schema can't be upgraded. Added auto_initialize. Removed some of the redundent regression tests. Fixed a bug in the tran1.t and tran1a.t test scripts. 2004/05/16 0.1002 - focus on: Pg bugfix and SQLite addtion Added support for SQLite. Discovered that DBD::Pg doesn't handle ascii null without using bind_param(). Now bind_param() is used. Added more regression tests: null.t, bigblob.t Modified slowtest.t so we can skip to a specific test. Removed the requirement that a username be specified for DBI. The problem I had with SET TRANSACTION ISOLATION LEVEL in mysql turns out to be my mistake: it sets the level for the _next_ transaction, not the current one. The LOCK IN SHARE MODE hack has been removed. Added load_object() to the OOPS::FrontEnd to match the documentation on hand-written queries. Also added dbh() to OOPS::FrontEnd to support hand-written queries. Added a quick check for schema version compatability. Minor changes to the license. 2004/05/10 0.1001 - focus on: reliability Initial revision