From: Jason Kirtland Date: Wed, 12 Mar 2008 00:09:23 +0000 (+0000) Subject: - Retroactive textmate damage control X-Git-Tag: rel_0_4_5~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=713279c53d1e258bf3d35b86732aa4f85c267ac1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Retroactive textmate damage control --- diff --git a/CHANGES b/CHANGES index 8738966973..2c83be0cc2 100644 --- a/CHANGES +++ b/CHANGES @@ -11,22 +11,22 @@ CHANGES - Can again create aliases of selects against textual FROM clauses, [ticket:975] - - The value of a bindparam() can be a callable, in which case - it's evaluated at statement execution time to get the value. + - The value of a bindparam() can be a callable, in which + case it's evaluated at statement execution time to get the + value. - - added exception wrapping/reconnect support to result set - fetching. Reconnect works for those databases that - raise a catchable data error during results - (i.e. doesn't work on MySQL) [ticket:978] + - Added exception wrapping/reconnect support to result set + fetching. Reconnect works for those databases that raise + a catchable data error during results (i.e. doesn't work + on MySQL) [ticket:978] - - implemented two-phase API for "threadlocal" engine, - via engine.begin_twophase(), engine.prepare() - [ticket:936] + - Implemented two-phase API for "threadlocal" engine, via + engine.begin_twophase(), engine.prepare() [ticket:936] - - fixed bug which was preventing UNIONS from being cloneable, - [ticket:986] + - Fixed bug which was preventing UNIONS from being + cloneable, [ticket:986] - - added "bind" keyword argument to insert(), update(), + - Added "bind" keyword argument to insert(), update(), delete() and DDL(). The .bind property is now assignable on those statements as well as on select(). @@ -39,56 +39,58 @@ CHANGES and != now work properly with self-referential relations - the clause inside the EXISTS is aliased on the "remote" side to distinguish it from the parent table. This - applies to single table self-referential as well as + applies to single table self-referential as well as inheritance-based self-referential. - - - repaired behavior of == and != operators at the relation() - level when compared against NULL for one-to-one - relations [ticket:985] - - - fixed bug whereby session.expire() attributes were not - loading on an polymorphically-mapped instance mapped - by a select_table mapper. - - - added query.with_polymorphic() - specifies a list - of classes which descend from the base class, which will - be added to the FROM clause of the query. Allows subclasses - to be used within filter() criterion as well as eagerly loads - the attributes of those subclasses. - - - Your cries have been heard: removing a pending item from an - attribute or collection with delete-orphan expunges the item - from the session; no FlushError is raised. Note that if you - session.save()'ed the pending item explicitly, the + + - Repaired behavior of == and != operators at the relation() + level when compared against NULL for one-to-one relations + [ticket:985] + + - Fixed bug whereby session.expire() attributes were not + loading on an polymorphically-mapped instance mapped by a + select_table mapper. + + - Added query.with_polymorphic() - specifies a list of + classes which descend from the base class, which will be + added to the FROM clause of the query. Allows subclasses + to be used within filter() criterion as well as eagerly + loads the attributes of those subclasses. + + - Your cries have been heard: removing a pending item from + an attribute or collection with delete-orphan expunges the + item from the session; no FlushError is raised. Note that + if you session.save()'ed the pending item explicitly, the attribute/collection removal still knocks it out. - - session.refresh() and session.expire() raise an error when - called on instances which are not persistent within the session - - - Fixed potential generative bug when the same Query was used - to generate multiple Query objects using join(). - - - fixed bug which was introduced in 0.4.3, whereby loading an - already-persistent instance mapped with joined table inheritance - would trigger a useless "secondary" load from its joined - table, when using the default "select" polymorphic_fetch. - This was due to attributes being marked as expired - during its first load and not getting unmarked from the - previous "secondary" load. Attributes are now unexpired - based on presence in __dict__ after any load or commit - operation succeeds. - - - deprecated Query methods apply_sum(), apply_max(), apply_min(), - apply_avg(). Better methodologies are coming.... - + - session.refresh() and session.expire() raise an error when + called on instances which are not persistent within the + session + + - Fixed potential generative bug when the same Query was + used to generate multiple Query objects using join(). + + - Fixed bug which was introduced in 0.4.3, whereby loading + an already-persistent instance mapped with joined table + inheritance would trigger a useless "secondary" load from + its joined table, when using the default "select" + polymorphic_fetch. This was due to attributes being + marked as expired during its first load and not getting + unmarked from the previous "secondary" load. Attributes + are now unexpired based on presence in __dict__ after any + load or commit operation succeeds. + + - Deprecated Query methods apply_sum(), apply_max(), + apply_min(), apply_avg(). Better methodologies are + coming.... + - relation() can accept a callable for its first argument, which returns the class to be related. This is in place to assist declarative packages to define relations without classes yet being in place. - - - Added a new "higher level" operator called "of_type()": used - in join() as well as with any() and has(), qualifies the - subclass which will be used in filter criterion, e.g.: + + - Added a new "higher level" operator called "of_type()": + used in join() as well as with any() and has(), qualifies + the subclass which will be used in filter criterion, e.g.: query.filter(Company.employees.of_type(Engineer). any(Engineer.name=='foo')) @@ -102,8 +104,8 @@ CHANGES flush(). - Expressions used in filter(), filter_by() and others, when - they make usage of a clause generated from a relation using - the identity of a child object (e.g., + they make usage of a clause generated from a relation + using the identity of a child object (e.g., filter(Parent.child==)), evaluate the actual primary key value of at execution time so that the autoflush step of the Query can complete, thereby @@ -111,7 +113,7 @@ CHANGES was pending. - setting the relation()-level order by to a column in the - many-to-many "secondary" table will now work with eager + many-to-many "secondary" table will now work with eager loading, previously the "order by" wasn't aliased against the secondary table's alias. @@ -123,19 +125,19 @@ CHANGES - postgres TIMESTAMP renders correctly [ticket:981] - - postgres PGArray is a "mutable" type by default; - when used with the ORM, mutable-style equality/ - copy-on-write techniques are used to test for changes. - + - postgres PGArray is a "mutable" type by default; when used + with the ORM, mutable-style equality/ copy-on-write + techniques are used to test for changes. + - extensions - a new super-small "declarative" extension has been added, - which allows Table and mapper() configuration to take place - inline underneath a class declaration. This extension differs - from ActiveMapper and Elixir in that it does not redefine - any SQLAlchemy semantics at all; literal Column, Table - and relation() constructs are used to define the class - behavior and table definition. - + which allows Table and mapper() configuration to take + place inline underneath a class declaration. This + extension differs from ActiveMapper and Elixir in that it + does not redefine any SQLAlchemy semantics at all; literal + Column, Table and relation() constructs are used to define + the class behavior and table definition. + 0.4.3 ------ - sql