[storm] Storm 0.13

Gustavo Niemeyer gustavo at niemeyer.net
Tue Sep 2 13:45:16 BST 2008


On behalf of all Storm developers, I'm glad to announce that the 0.13
release is out and ready for consumption.

Download information and documentation may be found at the web site:

    https://storm.canonical.com/

The following outstanding changes were made:

Improvements
------------

 - Add group_by/having methods on ResultSet objects, to allow access to
   the "GROUP BY" and "HAVING" statements.

 - Change tests/store to keep the connection during the tests to make it
   faster.

 - Implemented support for plugging generic "tracers".  Statement
   debugging is now implemented using a tracer, and easily enabled
   with storm.tracer.debug(True) (storm.database.DEBUG = True is gone).

 - All properties now accept a "validator" parameter.  When used, a
   function like validate(object, attribute_name, value) should be
   given, and it may validate or modify the value before it's set in
   the property.  The value assigned to the property is the result
   of the validator, so the original value should be returned if
   changing it isn't intended.

 - Expressions can be passed to Store.find() as well as classes.  This
   makes it possible to request individual columns from a table,
   computed expressions or aggregates.

 - Objects will be flushed in the order they become dirty by default.
   This means that generally the order in which Python operations are
   performed will be used to define the order in which flushes are done,
   which is generally the most expected.

 - The cextensions module was fixed, optimized, and improved.  It's now
   built by default, but to actually enable it the environment variable
   STORM_CEXTENSIONS=1 must be defined at runtime.  The module will
   likely be enabled by default on a future release.

 - ClassAlias will now cache all explicitly named aliases, to prevent
   the cost of rebuilding them.

 - Result sets and reference sets now have a __contains__() method.
   While code like "item in set" was previously possible, it involved
   iterating over the result set, which is expensive for large
   databases.

 - The storm.zope.zstorm code can now be used with only the
   zope.interface and transaction packages installed.  This makes it
   easier to reuse the per-thread store management and global
   transaction handling from other web frameworks.

 - Improve handling of AUTO INCREMENT columns in the MySQL backend to
   remove an unnecessary query when adding objects to a store.


Bug fixes
---------

 - Make is_in returns False instead of NULL on an empty result set.

 - ZStorm now keeps strong references to named stores. Previously it
   only kept weak ones, so stores were recreated more often than
   necessary.

 - References now won't flush the store or query the database when
   the foreign key is None.

 - When a reference is set to an object that wasn't yet inserted in
   the database, the foreign key is immediately unset instead of
   keeping the old value up to the flushing.

 - Setting a reference to None works even if the previously referenced
   object isn't in memory.

 - When setting a reference, flush ordering is only enforced if the
   key is dirty.  This allows a number of changes that would
   previously raise OrderLoopError.

 - If the remote object in a back reference is removed, the reference
   will now be broken.

 - Fixed a race condition when two threads try to initialize the
   ClassInfo for a given class at the same time.

-- 
Gustavo Niemeyer
http://niemeyer.net



More information about the storm mailing list