SQLAlchemy 0.6.1 is now available. This is bugfix release which fixes lots of legacy Oracle issues, i.e. Oracle 8, cx_oracle 4, as well as some ORM glitches.
The ORM is also employing an LRU cache to cache the compiler output of the base format insert/update/delete clauses during a flush. In some cases this can remove lots of method overhead normally spent compiling. We may look into expanding the caching of compiled SQL statements within the ORM to continue removing redundant computation. Download SQLAlchemy 0.6.1 at: http://www.sqlalchemy.org/download.html 0.6.1 ===== - orm - Fixed regression introduced in 0.6.0 involving improper history accounting on mutable attributes. [ticket:1782] - Fixed regression introduced in 0.6.0 unit of work refactor that broke updates for bi-directional relationship() with post_update=True. [ticket:1807] - session.merge() will not expire attributes on the returned instance if that instance is "pending". [ticket:1789] - fixed __setstate__ method of CollectionAdapter to not fail during deserialize where parent InstanceState not yet unserialized. [ticket:1802] - Added internal warning in case an instance without a full PK happened to be expired and then was asked to refresh. [ticket:1797] - Added more aggressive caching to the mapper's usage of UPDATE, INSERT, and DELETE expressions. Assuming the statement has no per-object SQL expressions attached, the expression objects are cached by the mapper after the first create, and their compiled form is stored persistently in a cache dictionary for the duration of the related Engine. The cache is an LRUCache for the rare case that a mapper receives an extremely high number of different column patterns as UPDATEs. - sql - expr.in_() now accepts a text() construct as the argument. Grouping parenthesis are added automatically, i.e. usage is like `col.in_(text("select id from table"))`. [ticket:1793] - Columns of _Binary type (i.e. LargeBinary, BLOB, etc.) will coerce a "basestring" on the right side into a _Binary as well so that required DBAPI processing takes place. - Added table.add_is_dependent_on(othertable), allows manual placement of dependency rules between two Table objects for use within create_all(), drop_all(), sorted_tables. [ticket:1801] - Fixed bug that prevented implicit RETURNING from functioning properly with composite primary key that contained zeroes. [ticket:1778] - Fixed errant space character when generating ADD CONSTRAINT for a named UNIQUE constraint. - Fixed "table" argument on constructor of ForeginKeyConstraint [ticket:1571] - Fixed bug in connection pool cursor wrapper whereby if a cursor threw an exception on close(), the logging of the message would fail. [ticket:1786] - the _make_proxy() method of ColumnClause and Column now use self.__class__ to determine the class of object to be returned instead of hardcoding to ColumnClause/Column, making it slightly easier to produce specific subclasses of these which work in alias/subquery situations. - func.XXX() doesn't inadvertently resolve to non-Function classes (e.g. fixes func.text()). [ticket:1798] - engines - Fixed building the C extensions on Python 2.4. [ticket:1781] - Pool classes will reuse the same "pool_logging_name" setting after a dispose() occurs. - Engine gains an "execution_options" argument and update_execution_options() method, which will apply to all connections generated by this engine. - mysql - func.sysdate() emits "SYSDATE()", i.e. with the ending parenthesis, on MySQL. [ticket:1794] - sqlite - Fixed concatenation of constraints when "PRIMARY KEY" constraint gets moved to column level due to SQLite AUTOINCREMENT keyword being rendered. [ticket:1812] - oracle - Added a check for cx_oracle versions lower than version 5, in which case the incompatible "output type handler" won't be used. This will impact decimal accuracy and some unicode handling issues. [ticket:1775] - Fixed use_ansi=False mode, which was producing broken WHERE clauses in pretty much all cases. [ticket:1790] - Re-established support for Oracle 8 with cx_oracle, including that use_ansi is set to False automatically, NVARCHAR2 and NCLOB are not rendered for Unicode, "native unicode" check doesn't fail, cx_oracle "native unicode" mode is disabled, VARCHAR() is emitted with bytes count instead of char count. [ticket:1808] - oracle_xe 5 doesn't accept a Python unicode object in its connect string in normal Python 2.x mode - so we coerce to str() directly. non-ascii characters aren't supported in connect strings here since we don't know what encoding we could use. [ticket:1670] - FOR UPDATE is emitted in the syntactically correct position when limit/offset is used, i.e. the ROWNUM subquery. However, Oracle can't really handle FOR UPDATE with ORDER BY or with subqueries, so its still not very usable, but at least SQLA gets the SQL past the Oracle parser. [ticket:1815] - firebird - Added a label to the query used within has_table() and has_sequence() to work with older versions of Firebird that don't provide labels for result columns. [ticket:1521] - Added integer coercion to the "type_conv" attribute when passed via query string, so that it is properly interpreted by Kinterbasdb. [ticket:1779] - Added 'connection shutdown' to the list of exception strings which indicate a dropped connection. [ticket:1646] - sqlsoup - the SqlSoup constructor accepts a `base` argument which specifies the base class to use for mapped classes, the default being `object`. [ticket:1783] -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.