** 11-05-98 RELEASE 1.50 - Fixed order of PUTBACK/POPSTACK. ** 11-04-98 RELEASE 1.49 - Stargate reengineering for ObjStore::Lib::PDL. - MIN_PERL_DEFINE clean up for 5.005_53. - Various API improvements. Safer safe_rv(). osp_pathexam fixes. - Safer typemap code. Added debugging mode for dynacasts. Resolved serious name conflict by renaming ObjStore::Server to ObjStore::ServerInfo (Gack!!). - Various tweaks & fixes. ** 10-13-98 RELEASE 1.48 - The transient memory leak is finally fixed!! A patch for 5.005_02 is bundled with this distribution (see patches/leak.fix). The patch is also planned to be included by default in 5.005_5x. - Many updates for Event 0.20+. - Integrated osp_keypack1 into the API. - Reduced maximum number of keys from eight to four. ** 09-26-98 RELEASE 1.47 - WARNING: the fatal_exceptions option is now always OFF. - Binary API changes are now detected at run-time. This is more consistant with the rest of the perl world. - Fixed coredump when seeking to an incomplete key. - Add ObjStore::UNIVERSAL::DELETED method. Use this flag to announce that an object is queued for unconditional destruction. - ObjStore::Mortician wasn't restarting properly. Fixed. - Internal adjustments necessary for ObjStore::Lib::PDL. - Culled more statistics from ObjStore::Serve. Switched to safe signal handling. ** 09-12-98 RELEASE 1.46 - Use PERL5PREFIX to install into a different directory tree. - Improved ObjStore::Index::POSH_PEEK. Made pretty. - Shell-style output redirection >> for posh. - Improved the design of the ObjStore::Serve::defaultLoop. Reduced excessive statistics. - Improved ObjStore::Table3::fetch in an array context. - Added cast-to-integer overloading for ObjStore::UNIVERSAL. For example, $hash{ 0+$object }=1. - Fixed posh reporting of forced-loaded packages. - Reduced the number of potential "Attempt to free unreferenced scalar during global destruction" warnings (hopefully!). - Improved various diagnostic messages. - Documentation corrections & updates. ** 08-22-98 RELEASE 1.45 - The == and != operators could give incorrect results in some cases. Fixed. - Fixed nested destruction of Tree::Fat representations. (Cursors were being shared between levels! Gack!) ** 08-05-98 RELEASE 1.44 - Improved backward compatibility with respect to blessings in old databases. (Now that we have old databases... :-) - As threatened, new_ref() without arguments now creates a hard reference instead of a protected reference. - Fixed a nasty pathexam problem exposed by ObjStore::REP::HashRecord. Sort comparisons were being botched. ** 07-28-98 RELEASE 1.43 - Fixed index bugs. The lexicographical ordering logic was broken. Also there was a potential memory corruption problem. ** 07-27-98 RELEASE 1.42 - ObjectStore 5.1 is required. Static linkage is no longer supported. OTOH, it is now easy to create persistent C++ objects that are seemlessly integrated into perl databases. Raw C++ performance must be sacrificed no longer! As there is no longer any application schema, APIs to configure it have been removed. A new environment variable, OSPERL_SCHEMA_DBDIR, overrides the default schema directory. Indu Strypundit is quoted as calling this release a tour-de-force of technical bravada. "We suspected that the number forty-two in the version might be significant. It was." - Many of the core API classes have been through yet another round of extensive polishing in preparation for a binary API freeze (or at least a chill :-). The pathexam apparatus has been entirely rewritten and is now available at the perl level as ObjStore::PathExam. - Various osperlserver enhancements including: a -shutdown option, an -reload option, and a automatic snapshotting of all VERSIONs on startup (see ObjStore::Serve). - Simplified read-only protocol for indices. Either keys are indexable just once or they must be read-only. - A few more problems with exception handling were fixed. Errors were not being reported properly in rare circumstances. - Use the 'methods' command to enquire about available methods in posh (5.005 only). - Schema support for non-ObjStore::Index cursors and ObjStore::Set have been dropped. sync_INC/get_INC is no longer supported. The readonly method is no longer implemented (but you can still check easily with eval). ** 07-07-98 RELEASE 1.41 - If an object is blessed into a package matching RE m/_fake\:\:/, then the package will be ignored (on reads). A script for generic import of CSV files is now a trival exercise. - os_transaction::checkpoint has been tested and appears to work as well as standard transactions. The performance gain appears measurable. - Prototyped an ObjStore::Index with a (splash) binary heap representation. - Indices now auto-dereference (just once) in the case that references are used. - Transaction deadlocks are no longer re-tried automatically. If you relied on this behavior it is fairly easy to cobble it together yourself. Perl 5.005 will allow die $ref, which makes the implementation even closer to trival. ** 05-30-98 RELEASE 1.40 - Scrubbed code with Insure++ (Parasoft). Insure++ is a product similar to Purify, except better. Fixed a bug in the os_Dictionary hash representation. - A better effort is made to vivify the @ISA tree when it is (partially) unloadable. This change is aimed towards allowing the creation of databases without any .pm file support (discardible scaffolding). - Relaxed restrictions on comparing index keys of differing type. - Edit the Makefile.PL to add -DOSP_SAFE_BRIDGE if you still need it!! ** 05-10-98 RELEASE 1.39 - Fixed a long standing problem with transaction memory usage. Memory associated with keeping track of persistent objects is now released as soon as possible (instead of at the end of the transaction). A true checkpoint is now possible (but insufficiently tested). - Optionally, during update transactions reference counts are no longer affected by reads (this was not the case in prior versions!). Efficiency of certain types of updates should be improved. You will need to manually invoke the HOLD method in the rare circumstance that a transient variable is the only reference to a persistent object (or otherwise risk a SEGV/BUS error). Due to the gravity of this change, the optimization is turned off for 1.39 by default. In anticipation of enabling it, a warning is generated to help pinpoint any problems in existing code. Please test your code against 1.39 before upgrading to the next release!! - Lots of tweaks. Reorganized transaction code and osperlserver. All allocators should now accept 'transient' as a valid segment. ObjStore::Serve and ObjStore::Server supercede the jumbled logic initially prototyped in ObjStore::Process. ** 04-23-98 RELEASE 1.38 - Support for multiple threads. Changed ObjStore::Transaction->new() to conform the standard method call convention. While partially tested (perl 5.004_64 solaris), additional internal reorganization and testing is still needed. - osperlserver no longer invokes the 'evolve' method upon restart. - VERSIONs are not longer required for persistent classes. Instead '0.001' is defaulted. Be aware that you must use a version greater than '0.001' once you add an explicit version. ** 04-10-98 RELEASE 1.36 - Added ObjStore::Posh::Remote & qtposh. However, qtposh may not work without patches for Event and PerlQt. Mileage may vary. (Qt is a cross-platform GUI library like Tk. See http://www.troll.no) - Various minor fixes. ** 04-06-98 RELEASE 1.35 - Another read-only mode is available for ObjStore::Index. A distinction is made between exclusive and shared read-only keys. The default mode has been changed to _exclusive_ read-only. Also added support for shift and pop. - Delay object destruction with ObjStore::Mortician. Also, general improvements to the serverization modules. - Optimized typemap slightly. Also fixed typemap bugs in ObjStore::Index::seek & ObjStore::Index::configure. Optimized reallocation of (persistent) memory in string assignments. (1.34 code was buggy!) - Overloaded == & != operator tests no longer work if either argument is non-persistent. While this breaks backward compatiblility, I believe the extra strictness is worth it. - The automatic safe_require code was apparently a bit _TOO_ safe. Exceptions were been hidden! Fixed. - Improved Digital AXP hints. ** 03-28-98 RELEASE 1.33 - Stringification of persistent objects can no longer cause ObjectStore exceptions. Error reporting is therefore much more robust. - Use ObjStore::NoInit to delay initialization of the ObjectStore library. This opens time to modify configuration parameters (or for forking) before becoming a known OS client. - First-cut at database job scheduling. See ObjStore::Job! - Blessings were not sticking to databases in certain cases. Fixed. ** 03-21-98 RELEASE 1.32 - Major improvements to serverization code. See osperlserver, ObjStore::ServerDB, and ObjStore::Process. It is likely that not all changes are backward compatible to 1.30 (but I'm pretty sure improvements will outweigh breakage :-). - ObjStore::AV::Set now checks for duplicates. ** 03-13-98 RELEASE 1.31 - Posh will move directly to a database specified on the command line. Also, the default is now mvcc mode. Fixed a problem with persisting command history. - Changed the behavior ObjStore::AV::Set::exists(...) to be more consistent. - Fixed a problem in the is_evolved() method. - $ObjStore::TRANSACTION_PRIORITY is now a tied scalar. - Replaced (get|set)_(read|write)lock_timeout (yikes!) with a single perl-style lock_timeout API. - Reorganized the BOOT section to meet the requirements of the perl compiler. ObjStore::shutdown is now called in an END block to insure proper clean up (abort pending transactions, etc.) and initialization is now delayed until run-time (vs. compile-time). ** 03-06-98 RELEASE 1.30 - Instant, effortless event dispatching for network distributed perl objects using dynamic transactions. (See ObjStore::Process :-) - Minor changes to ObjStore::Table3 to support multiple index types and the notion of a primary index. Simplified the implementation of ObjStore::AV::Set. Now can be used as an index in an ObjStore::Table3. ObjStore::AV::Set changes are not backward compatible. - Persistent bless logic unnecessarily complains when blessing in multiple databases. Temporarily disabled the imperfect assertion. - Added subscribe & unsubscribe to Databases & Segments. - Added 'nextKey' method to ObjStore::HV & ObjStore::Index. Reserved the 'help' method of all persistent objects. - Tweaks to ObjStore::CSV. - Defect found and fixed in Tree::Fat. - Always adding -DDEBUGGING to CFLAGS is wrong. Fixed. - posh now persists command history from prior sessions (5.004_58+). ** 02-21-98 RELEASE 1.29 - Complete, nesting, tied array support (5.004_58+). - Rewrote ObjStore::AppInstance to eliminate unnecessarily confusing data flow. The new version is NOT backward compatible. - Fixed a bug that allowed bad pointers to appear in tree nodes and possibly other places. Instances of this bug occurred rarely. - Fixed an uninitialized pointer that was causing exceptions to turn into BUS errors. Added more regression tests. - Fixed a minor bug in ObjStore::Path::Ref. ** 02-07-98 RELEASE 1.28 - Relaxed overly strict index behavior. Fixed performance of add & remove for non-unique indices. Fixed a serious bug when seeking unique indices. Path traverse silently ignores records when there is a missing key or undef'd slot. Fixed index comparison for mixed numeric values. Added more tests. - Tweaked ObjStore::AVHV evolution code. - posh accepts [more] command line args. Command-line perl code is no longer partially committed (this was an artifact of the incomplete integration between eval and transactions). - Improved CSV module. - Try to create the cache directory on startup. (See $OS_CACHE_DIR) ** 01-24-98 RELEASE 1.26 - Preliminary support for exceptions on Digital Unix AXP (and other platforms for which ODI exploits ANSI C++ exceptions). - Fat-Tree representation arrays. - The Fat-Tree code was re-factored and the memory layout changed. Unfortunately, any indices created with a prior version will need to be dropped (before upgrading) and re-built (after upgrading). Either this or a schema evolution (yikes!) is necessary. All other data should migrate without a hiccup. ** 01-18-98 RELEASE 1.25 - Completed test coverage analysis of the C++ code (with the assistance of Devel::CCov). A number of minor bugs were uncovered and fixed. Most notable bug: splash hashes did not take advantage of already empty slots during STORE (I never claimed they were a model of efficiency :-). - Fixed: problems when doing updates while two databases are open, one in mvcc mode and one in update mode. $db->is_writable is now the preferred method to determine if you can update data. - Split each group of collection representations into its own XS file. Optimized creation of new persistent objects. (This may cause backward compatibility problems if you were passing an exact representation type to a 'new' method.) The 'new' method will be auto-generated at compile-time in a forthcoming release. ** 01-10-98 RELEASE 1.24 - The index readonly locking has been tweaked again. You'll need to re-create any indices. Let me know if I got it right this time! - Re-organized the logic of blessing with a significant performance improvement. Greatly expanded tracking of version numbers. Be aware that bless now requires all classes throughout the @ISA heirarchy to set their $VERSION since is_evolved compares them (and no longer compares the @ISA tree). - Persistent per-class globals via a new $o->stash() method. - Improved the API for private root data. Also, moved the private root to a separate segment (so it's easier to study memory usage). - $db->sync_INC uses unshift instead of push. ** 01-07-98 EMERGENCY RELEASE 1.23 - Fixed refcnt problems in bless & indices. - Indices now set readonly locks *ONLY* on fields that are used as keys. - Notification API. ** 01-06-98 RELEASE 1.22 - Real indices! Queries such as /date between qw(Nov97 Jan98)/ are now easy! And you can index on multiple keys: $index->configure(path => "last_name, first_name"). - No longer ignores -MCarp=verbose! - posh: both cd & ls now use the same path resolver. - Builds via Makefile.PL. Ported to Digital Unix 4.0 / AXP. - The stargate no longer destroys data as it is copied. - 'new_cursor' now defaults to transient memory. ** 12-13-97 RELEASE 1.21 - THE TUTORIAL IS DONE! See ObjStore::Tutorial! - Fixed numerous minor bugs; fixed ObjStore::UNIVERSAL::isa; significant changes to posh; NOREFS invokation optimized out unless the method is present; re-organized the stargate; moved CSV stuff to ObjStore::CSV; untested support for kernel threads. ** 11-21-97 RELEASE 1.20 - 'bless' now stores the @ISA tree at bless-time. Use $o->isa($class) to query it. For the transient @ISA, use $o->UNIVERSAL::isa($class). - Reference support revamped. Transient references and unprotected references are now supported. - Basic import/export of 2D structure via CSV files (Excel format). ** 10-31-97 RELEASE 1.19 (Haloween Edition) - Emulation of RDBMS tables. Unstructured perl databases are, well, unstructured. The RDBMS table paradigm is a surprisingly good way to structure data. And since you can store complex nested structures per row, add the same row to multiple tables, or nest tables, it's not half bad. - Persistent support for fake hashes (requires 5.004_50+). Schema evolution for the same. - $o->NOREFS method invoked when an object becomes persistently unreachable. - Transaction support has been complete rewritten. Nested transactions are now fully supported. - Bless is now non-intrusive and customizable. ** 10-11-97 RELEASE 1.17 - PERL / OBJECTSTORE SHELL !! - First-class cursors for collections. - osp_copy script to copy databases. Source code included. - Support for cross database references. - Sets depreciated. The interface is there, but they are re-implemented with hashes. ** 10-03-97 RELEASE 1.16 - All transient data related to persistent memory is now garbage collected immediately after a transaction finishes. This should fix any strange reference count problems that extensive testing has been uncovering. I am very interested to see any examples of code that still leaks memory. To recover memory already lost, a script to copy databases is in the works. - The default stargate now destroys transient data as it is copied into the database. This is necessary to prevent the inadvertant creation of uncollectable cyclic structures. ** 09-27-97 RELEASE 1.15 - Expanded analysis of Perl, Java, C++, and SQL as database languages. - Partial arrays. Mileage may vary. - Automatic retry in the event of deadlock (69). - Blessed objects now try to 'require' their class the first time they are instantiated in transient memory. ** 08-16-97 RELEASE 1.11 - ospeek restricted to show only three instances per class. ** 08-11-97 RELEASE 1.10 - Overloaded the stringify operator for persistent objects. - Important typemap fixes plus other minor stuff. ** 08-06-97 RELEASE 1.09 - At our site we are now using osperl for about 2GB worth of data! - ObjectStore transactions and exceptions now fully integrated into Perl. Cursors have been removed from persistent data; read_only transactions now properly supported. Read_only transactions are blazingly fast! - Regularized allocators. Specify cardinality when creating containers. new ObjStore::$type($near, $card); Customize representation selector. - Regularized peristent typing in preparation for extensibility. - Peek rewrite with ideas from Data::Dumper. Peek on circular data structures. - Unions removed from the schema. This fix makes it easy to evolve in the event of future schema enhancements. - Reference counts are now 32bits wide (and check for overflow :-). - Static functions (e.g. ObjStore::Segment::of) are now called with :: instead of -> for greater efficiency. You wouldn't want to subclass the core classes anyway. ** 07-05-97 RELEASE 1.06 - Improved peek. Now peek from the command line - 'ospeek '! ** RELEASE 1.03 - Can't wait for reasonable tied arrays! Added array-based Sets. They're not tied, but at least they're inefficient. - Found and fixed problems with reference counting. Now the tests can be run and the database does not grow. - Blessings now persistent! (Untested) ** RELEASE 1.02 - Added ObjStore::peek($var) - like Data::Dumper except that it works better on gigantic databases. Only three elements are printed from large hashes, while small hashes are printed completely. The meaning of 'large' can be customized (not yet). ** RELEASE 1.00 - The first release, written during our 60 day evaluation. I knew a Perl - ObjectStore combination would be fantastic! Apparently it is my mission to save the world from the unspeakable torture of relational databases...I do it gladly. :-)