Thanks for the great release :)

On 7 sep., 19:40, Michael Bayer <mike...@zzzcomputing.com> wrote:
> SQLAlchemy 0.6.4 is now available, with a significantly large number of 
> enhancements and fixes.
>
> A large focus of this release is on clarification and ease of use, including:
>
> - the largest documentation reorganization since we moved to Sphinx, with an 
> emphasis on
> one-location-per-concept.  no more jumping around to the "API Reference" to 
> find things.
>
> - revamp of the error messages when dealing with primaryjoin issues, more 
> forgiving behavior
> when it's clear what the user intent was
>
> - more warnings for known configurational mistakes with the ORM
>
> Other changes include:
>
> - an up to 90% call reduction within mapper.py when flushing highly 
> polymorphic structures
>
> - Fixed psycopg2 isolation mode setting
>
> - lots of ORM / SQL / engine fixes
>
> I am always amazed at how fast CHANGES grows from the previous release, only 
> around 6 weeks ago.    
>
> Download SQLAlchemy 0.6.4 at:
>
> http://www.sqlalchemy.org/download.html
>
> 0.6.4
> =====
> - orm
>   - The name ConcurrentModificationError has been
>     changed to StaleDataError, and descriptive
>     error messages have been revised to reflect
>     exactly what the issue is.   Both names will
>     remain available for the forseeable future
>     for schemes that may be specifying
>     ConcurrentModificationError in an "except:"
>     clause.
>
>   - Added a mutex to the identity map which mutexes
>     remove operations against iteration methods,
>     which now pre-buffer before returning an
>     iterable.   This because asyncrhonous gc
>     can remove items via the gc thread at any time.
>     [ticket:1891]
>
>   - The Session class is now present in sqlalchemy.orm.*.
>     We're moving away from the usage of create_session(),
>     which has non-standard defaults, for those situations
>     where a one-step Session constructor is desired. Most
>     users should stick with sessionmaker() for general use,
>     however.
>
>   - query.with_parent() now accepts transient objects
>     and will use the non-persistent values of their pk/fk
>     attributes in order to formulate the criterion.  
>     Docs are also clarified as to the purpose of with_parent().
>
>   - The include_properties and exclude_properties arguments
>     to mapper() now accept Column objects as members in
>     addition to strings.  This so that same-named Column
>     objects, such as those within a join(), can be
>     disambiguated.
>
>   - A warning is now emitted if a mapper is created against a
>     join or other single selectable that includes multiple
>     columns with the same name in its .c. collection,
>     and those columns aren't explictly named as part of
>     the same or separate attributes (or excluded).
>     In 0.7 this warning will be an exception.   Note that
>     this warning is not emitted when the combination occurs
>     as a result of inheritance, so that attributes
>     still allow being overridden naturally.  
>     [ticket:1896].  In 0.7 this will be improved further.
>
>   - The primary_key argument to mapper() can now specify
>     a series of columns that are only a subset of
>     the calculated "primary key" columns of the mapped
>     selectable, without an error being raised.  This
>     helps for situations where a selectable's effective
>     primary key is simpler than the number of columns
>     in the selectable that are actually marked as
>     "primary_key", such as a join against two
>     tables on their primary key columns [ticket:1896].
>
>   - An object that's been deleted now gets a flag
>     'deleted', which prohibits the object from
>     being re-add()ed to the session, as previously
>     the object would live in the identity map
>     silently until its attributes were accessed.
>     The make_transient() function now resets this
>     flag along with the "key" flag.
>
>   - make_transient() can be safely called on an
>     already transient instance.
>
>   - a warning is emitted in mapper() if the polymorphic_on
>     column is not present either in direct or derived
>     form in the mapped selectable or in the
>     with_polymorphic selectable, instead of silently
>     ignoring it.  Look for this to become an
>     exception in 0.7.
>
>   - Another pass through the series of error messages
>     emitted when relationship() is configured with
>     ambiguous arguments.   The "foreign_keys"
>     setting is no longer mentioned, as it is almost
>     never needed and it is preferable users set up
>     correct ForeignKey metadata, which is now the
>     recommendation.  If 'foreign_keys'
>     is used and is incorrect, the message suggests
>     the attribute is probably unnecessary.  Docs
>     for the attribute are beefed up.  This
>     because all confused relationship() users on the
>     ML appear to be attempting to use foreign_keys
>     due to the message, which only confuses them
>     further since Table metadata is much clearer.
>
>   - If the "secondary" table has no ForeignKey metadata
>     and no foreign_keys is set, even though the
>     user is passing screwed up information, it is assumed
>     that primary/secondaryjoin expressions should
>     consider only and all cols in "secondary" to be
>     foreign.  It's not possible with "secondary" for
>     the foreign keys to be elsewhere in any case.
>     A warning is now emitted instead of an error,
>     and the mapping succeeds. [ticket:1877]
>
>   - Moving an o2m object from one collection to
>     another, or vice versa changing the referenced
>     object by an m2o, where the foreign key is also a
>     member of the primary key, will now be more
>     carefully checked during flush if the change in
>     value of the foreign key on the "many" side is the
>     result of a change in the primary key of the "one"
>     side, or if the "one" is just a different object.
>     In one case, a cascade-capable DB would have
>     cascaded the value already and we need to look at
>     the "new" PK value to do an UPDATE, in the other we
>     need to continue looking at the "old". We now look
>     at the "old", assuming passive_updates=True,
>     unless we know it was a PK switch that
>     triggered the change. [ticket:1856]
>
>   - The value of version_id_col can be changed
>     manually, and this will result in an UPDATE
>     of the row.  Versioned UPDATEs and DELETEs
>     now use the "committed" value of the
>     version_id_col in the WHERE clause and
>     not the pending changed value. The
>     version generator is also bypassed if
>     manual changes are present on the attribute.
>     [ticket:1857]
>
>   - Repaired the usage of merge() when used with
>     concrete inheriting mappers.  Such mappers frequently
>     have so-called "concrete" attributes, which are
>     subclass attributes that "disable" propagation from
>     the parent - these needed to allow a merge()
>     operation to pass through without effect.
>
>   - Specifying a non-column based argument
>     for column_mapped_collection, including string,
>     text() etc., will raise an error message that
>     specifically asks for a column element, no longer
>     misleads with incorrect information about
>     text() or literal().  [ticket:1863]
>
>   - Similarly, for relationship(), foreign_keys,
>     remote_side, order_by - all column-based
>     expressions are enforced - lists of strings
>     are explicitly disallowed since this is a
>     very common error
>
>   - Dynamic attributes don't support collection
>     population - added an assertion for when
>     set_committed_value() is called, as well as
>     when joinedload() or subqueryload() options
>     are applied to a dynamic attribute, instead
>     of failure / silent failure.  [ticket:1864]
>
>   - Fixed bug whereby generating a Query derived
>     from one which had the same column repeated
>     with different label names, typically
>     in some UNION situations, would fail to
>     propagate the inner columns completely to
>     the outer query.  [ticket:1852]
>
>   - object_session() raises the proper
>     UnmappedInstanceError when presented with an
>     unmapped instance.  [ticket:1881]
>
>   - Applied further memoizations to calculated Mapper
>     properties, with significant (~90%) runtime mapper.py
>     call count reduction in heavily polymorphic mapping
>     configurations.
>
>   - mapper _get_col_to_prop private method used
>     by the versioning example is deprecated;
>     now use mapper.get_property_by_column() which
>     will remain the public method for this.
>
>   - the versioning example works correctly now
>     if versioning on a col that was formerly
>     NULL.
>
> - sql
>   - Calling execute() on an alias() construct is pending
>     deprecation for 0.7, as it is not itself an
>     "executable" construct. It currently "proxies" its
>     inner element and is conditionally "executable" but
>     this is not the kind of ambiguity we like these days.
>
>   - The execute() and scalar() methods of ClauseElement
>     are now moved appropriately to the Executable
>     subclass. ClauseElement.execute()/ scalar() are still
>     present and are pending deprecation in 0.7, but note
>     these would always raise an error anyway if you were
>     not an Executable (unless you were an alias(), see
>     previous note).
>
>   - Added basic math expression coercion for
>     Numeric->Integer,
>     so that resulting type is Numeric regardless
>     of the direction of the expression.
>
>   - Changed the scheme used to generate truncated
>     "auto" index names when using the "index=True"
>     flag on Column.   The truncation only takes
>     place with the auto-generated name, not one
>     that is user-defined (an error would be
>     raised instead), and the truncation scheme
>     itself is now based on a fragment of an md5
>     hash of the identifier name, so that multiple
>     indexes on columns with similar names still
>     have unique names.  [ticket:1855]
>
>   - The generated index name also is based on
>     a "max index name length" attribute which is
>     separate from the "max identifier length" -
>     this to appease MySQL who has a max length
>     of 64 for index names, separate from their
>     overall max length of 255.  [ticket:1412]
>
>   - the text() construct, if placed in a column
>     oriented
> ...
>
> preberite več >>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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