Happy New Year, SQLAlchemy 0.6.6 is now available. This release features another long list of tweaks, fixes, and small enhancements, piling up since our last release in October.
The 0.6 series is not surprisingly our most successful series ever, with SQLA 0.6.5 racking up 36,000 downloads from Pypi in a period of 76 days, approximately 15K per month, plus about 2K a month from Sourceforge. The majority of my time is now spent developing 0.7, which is nearly ready for beta releases pending a few more little features I'd like to try to get in. 0.7 is really exciting with its new event API, lots of other nice touches and of course the most radical reduction in callcounts we've had in a few years. 0.6.6 is primarily a bugfix release and includes important fixes to the C extensions, the unit of work, subquery eager loading, obscure edge cases with pretty much all of the major dialects, as well as a kick in the pants to SQLSoup. See the full changelog and download SQLAlchemy 0.6.6 at: http://www.sqlalchemy.org/download.html 0.6.6 ===== - orm - Fixed bug whereby a non-"mutable" attribute modified event which occurred on an object that was clean except for preceding mutable attribute changes would fail to strongly reference itself in the identity map. This would cause the object to be garbage collected, losing track of any changes that weren't previously saved in the "mutable changes" dictionary. - Fixed bug whereby "passive_deletes='all'" wasn't passing the correct symbols to lazy loaders during flush, thereby causing an unwarranted load. [ticket:2013] - Fixed bug which prevented composite mapped attributes from being used on a mapped select statement. [ticket:1997]. Note the workings of composite are slated to change significantly in 0.7. - active_history flag also added to composite(). The flag has no effect in 0.6, but is instead a placeholder flag for forwards compatibility, as it applies in 0.7 for composites. [ticket:1976] - Fixed uow bug whereby expired objects passed to Session.delete() would not have unloaded references or collections taken into account when deleting objects, despite passive_deletes remaining at its default of False. [ticket:2002] - A warning is emitted when version_id_col is specified on an inheriting mapper when the inherited mapper already has one, if those column expressions are not the same. [ticket:1987] - "innerjoin" flag doesn't take effect along the chain of joinedload() joins if a previous join in that chain is an outer join, thus allowing primary rows without a referenced child row to be correctly returned in results. [ticket:1954] - Fixed bug regarding "subqueryload" strategy whereby strategy would fail if the entity was an aliased() construct. [ticket:1964] - Fixed bug regarding "subqueryload" strategy whereby the join would fail if using a multi-level load of the form from A->joined-subclass->C [ticket:2014] - Fixed indexing of Query objects by -1. It was erroneously transformed to the empty slice -1:0 that resulted in IndexError. [ticket:1968] - The mapper argument "primary_key" can be passed as a single column as well as a list or tuple. [ticket:1971] The documentation examples that illustrated it as a scalar value have been changed to lists. - Added active_history flag to relationship() and column_property(), forces attribute events to always load the "old" value, so that it's available to attributes.get_history(). [ticket:1961] - Query.get() will raise if the number of params in a composite key is too large, as well as too small. [ticket:1977] - Backport of "optimized get" fix from 0.7, improves the generation of joined-inheritance "load expired row" behavior. [ticket:1992] - A little more verbiage to the "primaryjoin" error, in an unusual condition that the join condition "works" for viewonly but doesn't work for non-viewonly, and foreign_keys wasn't used - adds "foreign_keys" to the suggestion. Also add "foreign_keys" to the suggestion for the generic "direction" error. - sql - Fixed operator precedence rules for multiple chains of a single non-associative operator. I.e. "x - (y - z)" will compile as "x - (y - z)" and not "x - y - z". Also works with labels, i.e. "x - (y - z).label('foo')" [ticket:1984] - The 'info' attribute of Column is copied during Column.copy(), i.e. as occurs when using columns in declarative mixins. [ticket:1967] - Added a bind processor for booleans which coerces to int, for DBAPIs such as pymssql that naively call str() on values. - CheckConstraint will copy its 'initially', 'deferrable', and '_create_rule' attributes within a copy()/tometadata() [ticket:2000] - engine - The "unicode warning" against non-unicode bind data is now raised only when the Unicode type is used explictly; not when convert_unicode=True is used on the engine or String type. - Fixed memory leak in C version of Decimal result processor. [ticket:1978] - Implemented sequence check capability for the C version of RowProxy, as well as 2.7 style "collections.Sequence" registration for RowProxy. [ticket:1871] - Threadlocal engine methods rollback(), commit(), prepare() won't raise if no transaction is in progress; this was a regression introduced in 0.6. [ticket:1998] - Threadlocal engine returns itself upon begin(), begin_nested(); engine then implements contextmanager methods to allow the "with" statement. [ticket:2004] - postgresql - Single element tuple expressions inside an IN clause parenthesize correctly, also from [ticket:1984] - Ensured every numeric, float, int code, scalar + array, are recognized by psycopg2 and pg8000's "numeric" base type. [ticket:1955] - Added as_uuid=True flag to the UUID type, will receive and return values as Python UUID() objects rather than strings. Currently, the UUID type is only known to work with psycopg2. [ticket:1956] - Fixed bug whereby KeyError would occur with non-ENUM supported PG versions after a pool dispose+recreate would occur, [ticket:1989] - mysql - Fixed error handling for Jython + zxjdbc, such that has_table() property works again. Regression from 0.6.3 (we don't have a Jython buildbot, sorry) [ticket:1960] - sqlite - The REFERENCES clause in a CREATE TABLE that includes a remote schema to another table with the same schema name now renders the remote name without the schema clause, as required by SQLite. [ticket:1851] - On the same theme, the REFERENCES clause in a CREATE TABLE that includes a remote schema to a *different* schema than that of the parent table doesn't render at all, as cross-schema references do not appear to be supported. - mssql - The rewrite of index reflection in [ticket:1770] was unfortunately not tested correctly, and returned incorrect results. This regression is now fixed. - oracle - The cx_oracle "decimal detection" logic, which takes place for for result set columns with ambiguous numeric characteristics, now uses the decimal point character determined by the locale/ NLS_LANG setting, using an on-first-connect detection of this character. cx_oracle 5.0.3 or greater is also required when using a non-period-decimal-point NLS_LANG setting. [ticket:1953]. - firebird - Firebird numeric type now checks for Decimal explicitly, lets float() pass right through, thereby allowing special values such as float('inf'). [ticket:2012] - declarative - An error is raised if __table_args__ is not in tuple or dict format, and is not None. [ticket:1972] - sqlsoup - Added "map_to()" method to SqlSoup, which is a "master" method which accepts explicit arguments for each aspect of the selectable and mapping, including a base class per mapping. [ticket:1975] - Mapped selectables used with the map(), with_labels(), join() methods no longer put the given argument into the internal "cache" dictionary. Particularly since the join() and select() objects are created in the method itself this was pretty much a pure memory leaking behavior. - examples - The versioning example now supports detection of changes in an associated relationship(). -- 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.
