SQLAlchemy 0.7.5 is now available.

This release includes some major bugfixes, as well as a handful of new features:

  - Relationship loaders like joinedload() accept a "wildcard" character, e.g. 
'*', to establish the "default loading strategy" for a query.

  - New reflection features allow autoloading of tables to be smoothly 
integrated with Declarative mappings, allowing database connectivity to be 
established in a later step after classes have been defined.

  - Multiple Declarative bases can share the same registry of class names.

For a full list of changes including all bug fixes (about 27 in total), see 
CHANGES.

SQLAlchemy 0.7.5 can be downloaded at:

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

0.7.5 (January 28, 2012)
=====
- orm
  - [bug] Fixed issue where modified session state
    established after a failed flush would be committed
    as part of the subsequent transaction that 
    begins automatically after manual call 
    to rollback().   The state of the session is
    checked within rollback(), and if new state
    is present, a warning is emitted and 
    restore_snapshot() is called a second time,
    discarding those changes. [ticket:2389]

  - [bug] Fixed regression from 0.7.4 whereby
    using an already instrumented column from a
    superclass as "polymorphic_on" failed to resolve
    the underlying Column.  [ticket:2345]

  - [bug] Raise an exception if xyzload_all() is
    used inappropriately with two non-connected
    relationships.  [ticket:2370]

  - [feature] Added "class_registry" argument to
    declarative_base().  Allows two or more declarative
    bases to share the same registry of class names.

  - [feature] query.filter() accepts multiple 
    criteria which will join via AND, i.e.
    query.filter(x==y, z>q, ...)

  - [feature] Added new capability to relationship
    loader options to allow "default" loader strategies.
    Pass '*' to any of joinedload(), lazyload(),
    subqueryload(), or noload() and that becomes the
    loader strategy used for all relationships,
    except for those explicitly stated in the
    Query.  Thanks to up-and-coming contributor
    Kent Bower for an exhaustive and well 
    written test suite !  [ticket:2351]

  - [bug] Fixed bug whereby event.listen(SomeClass)
    forced an entirely unnecessary compile of the 
    mapper, making events very hard to set up
    at module import time (nobody noticed this ??)  
    [ticket:2367]

  - [bug] Fixed bug whereby hybrid_property didn't 
    work as a kw arg in any(), has().

  - Fixed regression from 0.6 whereby if 
    "load_on_pending" relationship() flag were used
    where a non-"get()" lazy clause needed to be 
    emitted on a pending object, it would fail 
    to load.

  - [bug] ensure pickleability of all ORM exceptions
    for multiprocessing compatibility. [ticket:2371]

  - [bug] implemented standard "can't set attribute" / 
    "can't delete attribute" AttributeError when 
    setattr/delattr used on a hybrid that doesn't 
    define fset or fdel. [ticket:2353]

  - [bug] Fixed bug where unpickled object didn't 
    have enough of its state set up to work
    correctly within the unpickle() event established
    by the mutable object extension, if the object
    needed ORM attribute access within 
    __eq__() or similar. [ticket:2362]

  - [bug] Fixed bug where "merge" cascade could
    mis-interpret an unloaded attribute, if the
    load_on_pending flag were used with 
    relationship().  Thanks to Kent Bower
    for tests.  [ticket:2374]

  - [feature] New declarative reflection example
    added, illustrates how best to mix table reflection
    with declarative as well as uses some new features
    from [ticket:2356].

- sql
  - [feature] New reflection feature "autoload_replace";
    when set to False on Table, the Table can be autoloaded
    without existing columns being replaced.  Allows
    more flexible chains of Table construction/reflection
    to be constructed, including that it helps with 
    combining Declarative with table reflection.
    See the new example on the wiki.  [ticket:2356]

  - [bug] Improved the API for add_column() such that
    if the same column is added to its own table, 
    an error is not raised and the constraints
    don't get doubled up.  Also helps with some
    reflection/declarative patterns. [ticket:2356]

  - [feature] Added "false()" and "true()" expression
    constructs to sqlalchemy.sql namespace, though
    not part of __all__ as of yet.

  - [feature] Dialect-specific compilers now raise
    CompileException for all type/statement compilation 
    issues, instead of InvalidRequestError or ArgumentError. 
    The DDL for CREATE TABLE will re-raise 
    CompileExceptions to include table/column information
    for the problematic column.  [ticket:2361]

  - [bug] Fixed issue where the "required" exception
    would not be raised for bindparam() with required=True,
    if the statement were given no parameters at all.
    [ticket:2381]

- engine
  - [bug] Added __reduce__ to StatementError, 
    DBAPIError, column errors so that exceptions 
    are pickleable, as when using multiprocessing.  
    However, not 
    all DBAPIs support this yet, such as 
    psycopg2. [ticket:2371]

  - [bug] Improved error messages when a non-string
    or invalid string is passed to any of the
    date/time processors used by SQLite, including
    C and Python versions.  [ticket:2382]

  - [bug] Fixed bug whereby a table-bound Column 
    object named "<a>_<b>" which matched a column 
    labeled as "<tablename>_<colname>" could match 
    inappropriately when targeting in a result
    set row.  [ticket:2377]

  - [bug] Fixed bug in "mock" strategy whereby
    correct DDL visit method wasn't called, resulting
    in "CREATE/DROP SEQUENCE" statements being 
    duplicated [ticket:2384]

- sqlite
  - [bug] the "name" of an FK constraint in SQLite
    is reflected as "None", not "0" or other 
    integer value [ticket:2364].
    SQLite does not appear to support constraint
    naming in any case.

  - [bug] sql.false() and sql.true() compile to
    0 and 1, respectively in sqlite [ticket:2368]

  - [bug] removed an erroneous "raise" in the 
    SQLite dialect when getting table names
    and view names, where logic is in place
    to fall back to an older version of 
    SQLite that doesn't have the 
    "sqlite_temp_master" table.

- mysql
  - [bug] fixed regexp that filters out warnings
    for non-reflected "PARTITION" directives,
    thanks to George Reilly [ticket:2376]

- mssql
  - [bug] Adjusted the regexp used in the
    mssql.TIME type to ensure only six digits
    are received for the "microseconds" portion
    of the value, which is expected by 
    Python's datetime.time().  Note that
    support for sending microseconds doesn't
    seem to be possible yet with pyodbc
    at least.  [ticket:2340]

  - [bug] Dropped the "30 char" limit on pymssql,
    based on reports that it's doing things
    better these days.  pymssql hasn't been
    well tested and as the DBAPI is in flux
    it's still not clear what the status
    is on this driver and how SQLAlchemy's
    implementation should adapt.  [ticket:2347]

- oracle
  - [bug] Added ORA-03135 to the never ending
    list of oracle "connection lost" errors
    [ticket:2388]

- core
  - [bug] Changed LRUCache, used by the mapper
    to cache INSERT/UPDATE/DELETE statements,
    to use an incrementing counter instead
    of a timestamp to track entries, for greater
    reliability versus using time.time(), which
    can cause test failures on some platforms.
    [ticket:2379]

  - [bug] Added a boolean check for the "finalize"
    function within the pool connection proxy's
    weakref callback before calling it, so that a 
    warning isn't emitted that this function is None 
    when the application is exiting and gc has
    removed the function from the module before the 
    weakref callback was invoked.  [ticket:2383]

- Py3K
  - [bug] Fixed inappropriate usage of util.py3k
    flag and renamed it to util.py3k_warning, since 
    this flag is intended to detect the -3 flag
    series of import restrictions only.
    [ticket:2348]

- examples
  - [feature] Simplified the versioning example
    a bit to use a declarative mixin as well 
    as an event listener, instead of a metaclass +
    SessionExtension.  [ticket:2313]

  - [bug] Fixed large_collection.py to close the
    session before dropping tables. [ticket:2346]

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to