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