Revision history for Perl extension Tangram.

0.01  Sun Mar 21 10:46:45 1999
	- original version; created by h2xs 1.18

0.03  Stardate: unknown
	- first public alpha release

0.08  Stardate: unknown
	- second public alpha release

0.09  Stardate: unknown

   - split Tangram.pm into several modules
   - replaced @ISA with 'use base'
   - replaced default typetags with automounting
   - prefetch now takes either class or remote
   - implemented prefetch for IntrArray and IntrSet
      *::prefetch still need real-life testing,
      especially when class(coll) <> class(item)

1.00  Nov 07 1999 - first mature release version
	- deploy() now also works directly on DBI handles
	- deploy() allows specification of SQL types via the schema hash
	- intrusive collections allow element-to-container navigation
	- improve speed of read_object
	- fixed various bugs
	- rewrote part of, and expanded documentation

1.01  Nov 12 1999 - interim version
	- added (raw) mapping between Perl strings and date/time SQL types

1.02  Nov 14 1999 - interim version
	- added support for aggregated refs, arrays and sets

1.03  Dec 28 1999 - interim version
	- added support for customizing object & class id types, etc
	- as a consequence Tangram should now work with PostgreSql
	- fixed bug: erase() failed in presence of stateless leaf classes
	- temporarily removed RawDate and RawTime tests because M$ SQL
	  cannot handle them; those modules are still present though

1.04  Jan 03 2000 - interim version
	- fixed two bugs related to explicit tables

1.05  Jan 03 2000 - interim version
	- fixed: Storage::prefetch now works with inherited members
	- fixed: _insert() ignored collections in stateless classes

1.06  Feb 29 2000 - higly experimental interim version
	- added typechecks on collection members
	- started cleaning up autovivification of colls upon save
	- documented like()
	- documented extended select options retrieve, order & filter
	- changed _limit into the Limit in test suite
	- added temporary hack in Makefile.PL to support Access
	- added mapping for flat arrays
	- factorized code common to Array & FlatArray

1.07  Feb 29 2000 - interim version
	- adapted test suite for Sybase and other NULL-picky databases
	- added experimental support for vendor extensions (Dialect)
	- added skeleton Dialect::Sybase with support for datepart
	- did extensive rework on Expr instantiation
	- began documenting Type
	- added Storage::reload()

1.08  Mar 26 2000 - interim version
	- batch allocation of object ids
	- support for Lobs contributed by marian.kelc@ruhr-uni-bochum.de
	- Storage::reset()

1.09  ? - interim version
	- String calls DBI for correct quoting, as Marian Kelc suggested
	- fixed Array problem when removing elements from middle of collection
	- (?)

1.10  Apr 19 2000 - interim version
	- changed reset() into unload() and added support for partial unloading
	- tx_do() can now propagate arguments to closure/anon-sub;
	  insert(), update() and erase() pass anon-subs to tx_do to prevent
	  leaks (thanks Radu Greab)

1.11  May 29 2000 - public version
	- ordering result set by descending order is now supported
	- die() on attempt to load from an invalid id
	- removed silly table id allocation limit (t1000) in Coll.pm

1.13  Jul 11 2000 - interim version
	- new FlatHash and DMDateTime mappings contributed by Gabor Herr
          <herr@iti.informatik.tu-darmstadt.de>
	- some more doc in Type.pod
	- date & time doc moved to DateTime.pod
	- deploy() puts \n between instructions in trace

1.15  Jul 21 2000 - interim version
	- new PerlDump mapping contributed by Gabor Herr
          <herr@iti.informatik.tu-darmstadt.de>

1.16  Jul 25 2000 - interim version
	- fixed deploy() bug: didn't take col names into account for Array, Set and Hash
	- fixed query_expr bug in Scalar and Ref: used field name instead of col name

1.17  Jul 28 2000 - interim version
	- Gabor's patches on deep updates

1.18  Jul 28 2000 - stable version
	- weakrefs!
	- tuples
	- mysql tx acquired lock regardless of tx nesting

1.19  Jul 28 2000 - stable version
	- improved id allocation for mysql
	- bitwise operators for mysql
	- manual class id allocation
	- install now works in the absence of DBI and Set::Object
	- Makefile.PL prerequisites work now
	- Guided Tour is now generated & can be run
	- added support for LIMIT in selects
	- deploy() didn't take explicit oid/cid type into account; fixed
	- deploy() wrongly defaulted to NULLable types; fixed
	- class id can now be specified
	- oid and cid now default to INTEGER
	- fixed error in Expr.pod but I don't remember what it was	
	- minor improvement to Schema.pod
	- added Springfield.pm for users to play with
	- added support for SELECT SUM

2.00  Feb ?? 2001 - first S.O.L. release
	- added copyright notices
	- added a copy of the GPL
	- implemented inlined exports
	- INSERT and UPDATE now make use of prepared statements when available
	- re-executable Cursors
	- changed database layout, Class Table is gone and 'control' table in there
	- object ids are no longer allocated on a class basis
	- introduced Tangram::Relational
	- dialect are now done via derivation
	- stored object id no longer contains type id
	- introduced Relational::Engine
	- flexible mapping

2.05pre1 May 2003 - SamV - first "not the momma" release

	- Patches from lots of people, don't know who 'coz the honourable
	  grand master JLL applied a lot of them, I'll try to summarize
	  here:
	
		- back-porting pieces for 5.00503 (that was me)
		- a more elegant solution for the
		  Tangram::AbstractArray/AbstractHash corner case than
		  the one I submitted :-)
		- code that (possibly) completes Tangram::Hash support (I
		  haven't written a test case to confirm this yet)
		- A fix to Tangram::AbstractSet that again caters to some
		  very strange corner cases (this was me too)
		- Working implementation of the Tangram::DMDateTime type
		  mapping, a good thing that running a persistent
		  application server offsets the huge time it takes to
		  load in Date::Manip :-)
		- A bug fix to Tangram::FlatArray mapping type that
		  affects deleting members (don't know whose)
		- Tangram::IntrSet::get_intrusions (? can anyone claim
		  or explain this one?)
		- Minor Tangram::PerlDump fix (a simple one)
		- Deep, deep magic in Tangram::Relational::Engine;
		  new function get_heterogeneity (anyone?)
		- Use of uninitialised variable in Tangram::Engine...
		- Other large changes to Tangram::Schema (? - get_bases,
		  get_specs, is_root, etc)
		- A problem with merging schemas when you used a
		  `back-ref' to a class that is later on in the schema
		  (me)
		- Scattered showers of changes in Tangram::Storage
		  (get_insert_statements etc, lots of `off by one'
		  (reference nesting level that is) changes)
	
	- All I can say is that there have been some very smart people
	  looking at this code and submitting patches.

2.05pre2 Jun 2003 - SamV
	- Minor Tangram::Expr defined vs logically-false fix
	  (Aaron Mackey)
	- explicitly select all ORDER BY columns (Aaron Mackey)
	- normalise default "slot" and "coll" column names in
	  Tangram::Intr* types (SamV)

2.05 Jul 2003 - SamV
	- Tangram::Scalar and Tangram::Ref column names are now passed
	  through $schema->{normalize}->()

2.06 Jul 17 2003 - SamV
	- Added $storage->oid_isa($oid, "ClassName") method for
	  marshalling OIDs
	- Fixed minor bugs causing test suite to issue large warnings
	  on 5.8.1-RC2

2.07 Nov 8 2003 - SamV
	- Fixed bug with Tangram::Intr* and erasing objects that
	  referred to a class which didn't use their class name as
	  their table name [closes: 2650]
	- Added the ability to use limit => [ N, Y ] in
	  Tangram::Storage->select statements
	- Added Tangram::Coll::includes_or; see the man page for
	  Tangram::Expr
	- Enhancement of error message from
	  Tangram::Relational::Engine [related to 2631]
	- Support for using table types via $schema->{sql}{table_type}
	- Support for sub-selects with MySQL, for the one test that
	  uses them.  Also $storage->{no_subselects} is auto-detected.
	- Completed $storage->prefetch() function for all working
	  types, new test t/prefetch.t
	- If you have NULL values in array or hash slots in your
	  database, then it won't cause a hard error, except possibly
	  with prefetch() [related to 2631]
	- Various small fixes to bizarre internal error messages
	  [related to 2631]
	- Minor documentation fixes
	- Exceptions on various DB failures are now thrown when
	  DBI::execute() is called internally, rather than being
	  largely ignored.
	- Cosmetic Test Suite changes
	- ID column name wasn't being used for the index in
          Tangram::Relational::Engine (Kurt Stephens)
        Lost patches from 2002/06/25 (Kurt Stephens):
        - Added missing Tangram::Expr and Tangram::Filter operators:
            '+', '-', '*', '/',
            '&', '|', '!',
            '==', '!=', '<', '>', '<=', '>=',
            'eq', 'ne', 'lt', 'gt', 'le', 'ge',
            'cos', 'sin', 'acos',
        - Added argument swapping for non-commutative operators, like
	  "<".
        - Fixed export problem with 5.6.1 (reported by Kate Pugh)
	- deep_update with Tangram::Ref bug fix (reported by Aaron Mackey)
	- Makefile.PL should now hopefully be more informative about
	  which modules are needed for what.
	- Removed Selfloader from Tangram::Ref (Kate Pugh)

2.07.1, 29-Dec-2003 - SamV

	- Tangram::IntrHash implemented at last :-).  Tangram::IxHash
          and Tangram::IntrIxHash are next :->
	- verbose error message in Tangram::Coll when demand paging is
	  happening on stale tied collections (eg, erroneously created
	  via dclone())
	- some reformatting, as I grasp more of the code.
	- fix for Postgres sub-select detection (Pedro Alves)
	- make_1st_id_in_tx now only called for 1st insert
	  (Chengzhi Liang)

2.07.2, 6-Jan-2004 - SamV

	- Tangram::IntrHash prefetch test added
	- Documentation enhancements
	- Tangram::Dump class to `fix' persistent references in data
	  structures prior to insertion, so that :
	- Tangram::PerlDump now can contain persistent objects safely
	- and hey, why not write a Tangram::Storable 
	- and a Tangram::YAML (not working, waiting for a CPAN bug to
	  be fixed)

2.07_03, 17-May-2004 - SamV
	- Added Tangram::IDBIF to combine multiple object fields into
	  one perl_dump style field (including a "catch-all" facility)
	  Test suite for this isn't complete yet.

	Most changes from Kurt <ks.perl@kurtstephens.com>, with many
	thanks:

        - Do not $self->{db}->disconnect in Storage::disconnect() and
          DESTROY(), if $self->{db} eq $opts->{dbh} in
          Tangram::Storage->connect($schema, $cs, $user, $pw, { 'dbh'
           => ... } ); See $self->{db_owned}.
        - Handle objects that lazily initialize Tangram::AbstractSet 
          Set::Object fields.  See UMMF.
        - Added IntrRef.pm ("Intrusive Ref") for 1-to-1 bi-directional 
          Association navigation using only one column in one table.
          Derived from IntrSet.  I need help with this one. :)
	- Added @sums = $storage->sum([ $expr1, $expr2 ], ...) support.
	- Added support for reused tables for mapping both sides of
          many-to-many UML Associations to the same table with Tangram::Set
          and Tangram::Array. See UMMF's example/ex1.
	- Added support for timestamping all tables through
          $schema->{sql}{timestamp_all_tables}.
        - Prevent additional records in Tangram control table on redeploy.
        - Added support for GROUP BY in Tangram::Cursor.
        - Added COUNT($remote) and SUM($filter_expr) support.

	Editorial release changes:
		
	- [SamV] Started using _NN version style, so CPAN marks it as
	  a development release
	- added brief test suite for aggregate functions

2.07_04, 20-May-2004

	- Various POD modifications, including the main Tangram page,
	  the addition of Tangram::Complicity and the removal of
	  bogus Tangram::Dialect
	- Enhanced TRACE messages
	- Added support for Oracle via Tangram::Oracle
	- Added support for cursors that select no objects (just
	  retrieve extra columns, eg for aggregate selects)
	- `Fixed' t/datetime.t so that it doesn't do PostgreSQL/MySQL
	  specific tests unless it is running on those databases
	- Storage and Engine now holds a handle to the
	  Tangram::Relational object that created them, allowing for
	  various DBMS dependant hooks (used to rewrite column types,
	  format dates, etc)
	- Extra sanity checking in the core
	- The id_col feature in Tangram::Schema now actually works
          :-).  Previously, there were many places where .id was
          hard-coded.
	- Added ->in() method, an expr that allows direct use of the
          SQL IN () construct, rather than just via includes_or(), or
          with Collections.
	- DMDateTime module now expects database to understand the
          ISO-8601 date format, but the MySQL driver has been enhanced
          to convert ISO-8601 to MySQL format.
	- New method Tangram::Storage::unload_all

2.07_05, 2.07_06
	- lots of changes.  full list to follow once I get the time to
	  look at the revision history :-}

2.07_06
	- Support for SQL sequences.  See the Tangram::Schema man
	  page.

2.07_07
	- added support for multiple test suites, each with their own
	  schema, to end the ballooning schema madness that was
	  affecting the springfield test suite.
	- reworked the way the DBMS date formatting worked again,
	  adding Tangram::CookedDateTime
	- added support for Time::Piece and DateTime.
	- much work on database portability.  The Pg back-end now
	  works very well, and I have also ported to SQLite.
	- much more documentation, including Tangram::Intro
	- reworked the test suite to have multiple sections
	- new test section for Object Persistathon (musicstore schema)

2.07_08
	- Tangram::Dump now checks (via $storage->id_maybe_insert())
	  whether objects that it is saving should be inserted to the
	  DB first.

2.08 26 Mar 2005
	- Release this version with a couple of minor bugfixes

2.08_051 7 Oct 2019
  - state51 specific patches