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.

Reply via email to