Hey list - The 0.5 series is taking its time getting to the final 0.5.0, but its all good as we are honing and refining this thing to perfection. I've already had rc2 on some near-production systems with no issue and its already widely used. This release is still on rc status since we made some very effective changes to memory management within the Session which reduce a good chunk of overhead to the garbage collection process, as well as some subtle Query fixes, both of which will benefit from widespread evaluation (no problems are known to exist).
Download SQLA 0.5rc3 at: http://www.sqlalchemy.org/download.html 0.5.0rc3 ======== - features - orm - Added two new hooks to SessionExtension: after_bulk_delete() and after_bulk_update(). after_bulk_delete() is called after a bulk delete() operation on a query. after_bulk_update() is called after a bulk update() operation on a query. - sql - SQL compiler optimizations and complexity reduction. The call count for compiling a typical select() construct is 20% less versus 0.5.0rc2. - Dialects can now generate label names of adjustable length. Pass in the argument "label_length=<value>" to create_engine() to adjust how many characters max will be present in dynamically generated column labels, i.e. "somecolumn AS somelabel". Any value less than 6 will result in a label of minimal size, consiting of an underscore and a numeric counter. The compiler uses the value of dialect.max_identifier_length as a default. [ticket:1211] - ext - Added a new extension sqlalchemy.ext.serializer. Provides Serializer/Deserializer "classes" which mirror Pickle/Unpickle, as well as dumps() and loads(). This serializer implements an "external object" pickler which keeps key context-sensitive objects, including engines, sessions, metadata, Tables/Columns, and mappers, outside of the pickle stream, and can later restore the pickle using any engine/metadata/session provider. This is used not for pickling regular object instances, which are pickleable without any special logic, but for pickling expression objects and full Query objects, such that all mapper/engine/session dependencies can be restored at unpickle time. - oracle - Wrote a docstring for Oracle dialect. Apparently that Ohloh "few source code comments" label is starting to sting :). - Removed FIRST_ROWS() optimize flag when using LIMIT/OFFSET, can be reenabled with optimize_limits=True create_engine() flag. [ticket:536] - bugfixes and behavioral changes - orm - "not equals" comparisons of simple many-to-one relation to an instance will not drop into an EXISTS clause and will compare foreign key columns instead. - Removed not-really-working use cases of comparing a collection to an iterable. Use contains() to test for collection membership. - Improved the behavior of aliased() objects such that they more accurately adapt the expressions generated, which helps particularly with self-referential comparisons. [ticket:1171] - Fixed bug involving primaryjoin/secondaryjoin conditions constructed from class-bound attributes (as often occurs when using declarative), which later would be inappropriately aliased by Query, particularly with the various EXISTS based comparators. - Fixed bug when using multiple query.join() with an aliased-bound descriptor which would lose the left alias. - Improved weakref identity map memory management to no longer require mutexing, resurrects garbage collected instance on a lazy basis for an InstanceState with pending changes. - InstanceState object now removes circular references to itself upon disposal to keep it outside of cyclic garbage collection. - relation() won't hide unrelated ForeignKey errors inside of the "please specify primaryjoin" message when determining join condition. - Fixed bug in Query involving order_by() in conjunction with multiple aliases of the same class (will add tests in [ticket:1218]) - When using Query.join() with an explicit clause for the ON clause, the clause will be aliased in terms of the left side of the join, allowing scenarios like query(Source). from_self().join((Dest, Source.id==Dest.source_id)) to work properly. - polymorphic_union() function respects the "key" of each Column if they differ from the column's name. - Repaired support for "passive-deletes" on a many-to-one relation() with "delete" cascade. [ticket:1183] - Fixed bug in composite types which prevented a primary-key composite type from being mutated [ticket:1213]. - Added more granularity to internal attribute access, such that cascade and flush operations will not initialize unloaded attributes and collections, leaving them intact for a lazy-load later on. Backref events still initialize attrbutes and collections for pending instances. [ticket:1202] - sql - Simplified the check for ResultProxy "autoclose without results" to be based solely on presence of cursor.description. All the regexp-based guessing about statements returning rows has been removed [ticket:1212]. - Direct execution of a union() construct will properly set up result-row processing. [ticket:1194] - The internal notion of an "OID" or "ROWID" column has been removed. It's basically not used by any dialect, and the possibility of its usage with psycopg2's cursor.lastrowid is basically gone now that INSERT..RETURNING is available. - Removed "default_order_by()" method on all FromClause objects. - Repaired the table.tometadata() method so that a passed-in schema argument is propigated to ForeignKey constructs. - Slightly changed behavior of IN operator for comparing to empty collections. Now results in inequality comparison against self. More portable, but breaks with stored procedures that aren't pure functions. - oracle - Setting the auto_convert_lobs to False on create_engine() will also instruct the OracleBinary type to return the cx_oracle LOB object unchanged. - mysql - Fixed foreign key reflection in the edge case where a Table's explicit schema= is the same as the schema (database) the connection is attached to. - No longer expects include_columns in table reflection to be lower case. - ext - Fixed bug preventing declarative-bound "column" objects from being used in column_mapped_collection(). [ticket:1174] - misc - util.flatten_iterator() func doesn't interpret strings with __iter__() methods as iterators, such as in pypy [ticket:1077]. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---