** 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 <database>'!


** 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 - OS combination would be fantastic!  Apparently, it is my
mission to save the world from the unspeakable torture of relational
databases.
