

This release is the first step in the major refactoring of Tangram, which is API-backwards compatible. The differences between 2.09 and 2.10 are limited to namespace re-organisation. The test suite still succeeds unmodified, but has been tweaked to suppress warnings that deprecated modules are being used.
Various classes,
such as Tangram::Scalar,
Tangram::Set,
etc,
are now called Tangram::Type::Scalar,
Tangram::Type::Coll::Set,
etc.
However,
so long as you use Tangram::Core,
use Tangram or use Tangram::Compat before any of these old names are used,
then @INC magic should be able to catch the inclusion and load the correct module instead.
use Tangram import arguments :core and :compat_quiet.
to be documented.
get_id function debug output,
related to the test for weakref.
Also fix a bug in get_id that caused bizarre erratic behaviour in the scariest of circumstances.$storage->count($filter).
Fixed.:D See "select" in Tangram::Storage.The fix for it has made remote expressions always include filtering (via WHERE) on the type column as well as the ID column in most queries. This should not affect the result of queries; it is just passing on an assertion in the code base through to the database back-end. The times it will affect results are when your currently active schema does not match the one used to create the database and you were previously relying on side-effects.
Examples of the query differences will follow here before the 2.09 release.
This version has broken outer joins; to be fixed in the next release.
Also,
this Changes.pod seems to being delivered to some random place in your @INC; sorry about that,
the next release will exclude it via the appropriate ExtUtils::MakeMaker voodoo.
ExtUtils::MakeMaker do it for it.order => [ 'SQL' ] (see "select" in Tangram::Storage)libdbd-sqlite-perl package,
which uses a connection string of sqlite2.$storage->make_oid() (See "make_oid" in Tangram::Storage)
This release was 2.07_07 with a couple of minor bug fixes.
$storage->id_maybe_insert()) whether objects that it is saving should be inserted to the DB first,
which allows the practice illustrated by the t/musicstore/ test suite to work.Tangram::Dialect.id was hard-coded.->in() method,
a Tangram::Expr object that allows direct use of the SQL IN () construct,
rather than just via includes_or(),
or with collections using joins.Tangram::Storage::unload_all (see "unload_all" in Tangram::Storage)Most other changes from Kurt Stephens ks.perl@kurtstephens.com, with many thanks:
$self->{db}->disconnect in Tangram::Storage::disconnect() and ::DESTROY(),
if $self->{db} eq $opts->{dbh} in Tangram::Storage->connect($schema,
$cs,
$user,
$pw,
{ 'dbh' => ...
} ); See $self->{db_owned}.@sums = $storage->sum([ $expr1,
$expr2 ],
...) support.$schema->{sql}{timestamp_all_tables}.
See "Global Properties" in Tangram::Schema.->redeploy.GROUP BY in Tangram::Cursor.COUNT($remote) and SUM($filter_expr) support.Editorial release changes:
_NN version style,
so CPAN marks it as a development releaseTangram::IxHash and Tangram::IntrIxHash are next :->make_1st_id_in_tx now only called for 1st insert (Chengzhi Liang)
Tangram::Intr* and erasing objects that referred to a class which didn't use their class name as their table name [closes: 2650]limit => [ N,
Y ] in Tangram::Storage->select statements (see "select" in Tangram::Storage)Tangram::Coll::includes_or; see Tangram::Expr$schema->{sql}{table_type}$storage->{no_subselects} is auto-detected.$storage->prefetch() function for all working types,
new test t/prefetch.tDBI::execute() is called internally,
rather than being largely ignored.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
"<"
deep_update with Tangram::Ref bug fix (reported by Aaron Mackey)Selfloader from Tangram::Ref (Kate Pugh)
$storage->oid_isa($oid, "ClassName") method for marshalling OIDs
$schema->{normalize}->()ORDER BY columns (Aaron Mackey)slot" and "coll" column names in Tangram::Intr* typesFirst "not the momma" release.
Patches from lots of people were applied, don't know who 'coz the honourable grand master JLL applied a lot of them, I'll try to summarize and attribute them here:
Tangram::IntrSet::get_intrusions (? can anyone claim or explain this one?)Use of uninitialised variable in Tangram::Relational::Engine...All I can say is that there have been some very smart people looking at this code and submitting patches.

Originally as Changes in the distribution
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