SQLAlchemy 0.4.6 is now available at:

http://www.sqlalchemy.org/download.html

This release includes some fixes for some refactorings in 0.4.5,  
introduces a new collate() expression construct, and improves the  
behavior of contains_eager(), a useful ORM option.

The 0.4 series is now in bugfix mode as we put the new features into  
0.5, which is in the current trunk.

changelog:

- orm
     - A fix to the recent relation() refactoring which fixes
       exotic viewonly relations which join between local and
       remote table multiple times, with a common column shared
       between the joins.

     - Also re-established viewonly relation() configurations
       that join across multiple tables.

     - contains_eager(), the hot function of the week, suppresses
       the eager loader's own generation of the LEFT OUTER JOIN,
       so that it is reasonable to use any Query, not just those
       which use from_statement().

     - Added an experimental relation() flag to help with
       primaryjoins across functions, etc.,
       _local_remote_pairs=[tuples].  This complements a complex
       primaryjoin condition allowing you to provide the
       individual column pairs which comprise the relation's
       local and remote sides.  Also improved lazy load SQL
       generation to handle placing bind params inside of
       functions and other expressions.  (partial progress
       towards [ticket:610])

     - repaired single table inheritance such that you
       can single-table inherit from a joined-table inherting
       mapper without issue [ticket:1036].

     - Fixed "concatenate tuple" bug which could occur with
       Query.order_by() if clause adaption had taken place.
       [ticket:1027]

     - Removed an ancient assertion that mapped selectables
       require "alias names" - the mapper creates its own alias
       now if none is present.  Though in this case you need to
       use the class, not the mapped selectable, as the source of
       column attributes - so a warning is still issued.

     - Fixes to the "exists" function involving inheritance
       (any(), has(), ~contains()); the full target join will be
       rendered into the EXISTS clause for relations that link to
       subclasses.

     - Restored usage of append_result() extension method for
       primary query rows, when the extension is present and only
       a single- entity result is being returned.

     - Fixed Class.collection==None for m2m relationships
       [ticket:4213]

     - Refined mapper._save_obj() which was unnecessarily calling
       __ne__() on scalar values during flush [ticket:1015]

     - Added a feature to eager loading whereby subqueries set as
       column_property() with explicit label names (which is not
       necessary, btw) will have the label anonymized when the
       instance is part of the eager join, to prevent conflicts
       with a subquery or column of the same name on the parent
       object.  [ticket:1019]

     - Same as [ticket:1019] but repaired the non-labeled use
       case [ticket:1022]

     - Adjusted class-member inspection during attribute and
       collection instrumentation that could be problematic when
       integrating with other frameworks.

     - Fixed duplicate append event emission on repeated
       instrumented set.add() operations.

     - set-based collections |=, -=, ^= and &= are stricter about
       their operands and only operate on sets, frozensets or
       subclasses of the collection type. Previously, they would
       accept any duck-typed set.

     - added an example dynamic_dict/dynamic_dict.py, illustrating
       a simple way to place dictionary behavior on top of
       a dynamic_loader.

- sql
     - Added COLLATE support via the .collate(<collation>)
       expression operator and collate(<expr>, <collation>) sql
       function.

     - Fixed bug with union() when applied to non-Table connected
       select statements

     - Improved behavior of text() expressions when used as FROM
       clauses, such as select().select_from(text("sometext"))
       [ticket:1014]

     - Column.copy() respects the value of "autoincrement", fixes
       usage with Migrate [ticket:1021]

- engines
     - Pool listeners can now be provided as a dictionary of
       callables or a (possibly partial) duck-type of
       PoolListener, your choice.

     - Added "reset_on_return" option to Pool which will disable
       the database state cleanup step (e.g. issuing a
       rollback()) when connections are returned to the pool.

-extensions
     - set-based association proxies |=, -=, ^= and &= are
       stricter about their operands and only operate on sets,
       frozensets or other association proxies. Previously, they
       would accept any duck-typed set.

- declarative extension
     - Joined table inheritance mappers use a slightly relaxed
       function to create the "inherit condition" to the parent
       table, so that other foreign keys to not-yet-declared
       Table objects don't trigger an error.

     - Fixed re-entrant mapper compile hang when a declared
       attribute is used within ForeignKey,
       i.e. ForeignKey(MyOtherClass.someattribute)

- mssql
     - Added "odbc_autotranslate" parameter to engine / dburi
       parameters. Any given string will be passed through to the
       ODBC connection string as:

             "AutoTranslate=%s" % odbc_autotranslate

       [ticket:1005]

     - Added "odbc_options" parameter to engine / dburi
       parameters. The given string is simply appended to the
       SQLAlchemy-generated odbc connection string.

       This should obviate the need of adding a myriad of ODBC
       options in the future.

- firebird
     - Handle the "SUBSTRING(:string FROM :start FOR :length)"
       builtin.


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to