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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---