=======
0.5.0rc3
========
-- orm
+- features
- Added two new hooks to SessionExtension: after_bulk_delete and
after_bulk_update. after_bulk_delete is called after a bulk delete()
operation on a query. after_bulk_update is called after a bulk update()
operation on a query.
+ - SQL compiler optimizations. The call count for compiling a
+ typical select() construct is 20% less versus 0.5.0rc2.
+
+ - Dialects can now generate label names of adjustable length.
+ Pass in the argument "label_length=<value>" to create_engine()
+ to adjust how many characters max will be present in dynamically
+ generated column labels, i.e. "somecolumn AS somelabel". Any
+ value less than 6 will result in a label of minimal size,
+ consiting of an underscore and a numeric counter.
+ The compiler uses the value of dialect.max_identifier_length
+ as a default. [ticket:1211]
+
+ - Added a new extension sqlalchemy.ext.serializer. Provides
+ Serializer/Deserializer "classes" which mirror Pickle/Unpickle,
+ as well as dumps() and loads(). This serializer implements
+ an "external object" pickler which keeps key context-sensitive
+ objects, including engines, sessions, metadata, Tables/Columns,
+ and mappers, outside of the pickle stream, and can later
+ restore the pickle using any engine/metadata/session provider.
+ This is used not for pickling regular object instances, which are
+ pickleable without any special logic, but for pickling expression
+ objects and full Query objects, such that all mapper/engine/session
+ dependencies can be restored at unpickle time.
+
+ - Wrote a docstring for Oracle dialect. Apparently that Ohloh
+ "few source code comments" label is starting to sting :).
+
+- bugfixes and behavioral changes
+- orm
- "not equals" comparisons of simple many-to-one relation to an
instance will not drop into an EXISTS clause and will compare
foreign key columns instead.
All the regexp-based guessing about statements returning rows
has been removed [ticket:1212].
- - Dialects can now generate label names of adjustable length.
- Pass in the argument "label_length=<value>" to create_engine()
- to adjust how many characters max will be present in dynamically
- generated column labels, i.e. "somecolumn AS somelabel". Any
- value less than 6 will result in a label of minimal size,
- consiting of an underscore and a numeric counter.
- The compiler uses the value of dialect.max_identifier_length
- as a default. [ticket:1211]
-
- Further simplified SELECT compilation and its relationship to
result row processing.
can be reenabled with optimize_limits=True create_engine()
flag. [ticket:536]
- - Wrote a docstring for Oracle dialect. Apparently that Ohloh
- "few source code comments" label is starting to sting :).
-
- Setting the auto_convert_lobs to False on create_engine() will
also instruct the OracleBinary type to return the cx_oracle
LOB object unchanged.
lower case.
- ext
- - Added a new extension sqlalchemy.ext.serializer. Provides
- Serializer/Deserializer "classes" which mirror Pickle/Unpickle,
- as well as dumps() and loads(). This serializer implements
- an "external object" pickler which keeps key context-sensitive
- objects, including engines, sessions, metadata, Tables/Columns,
- and mappers, outside of the pickle stream, and can later
- restore the pickle using any engine/metadata/session provider.
- This is used not for pickling regular object instances, which are
- pickleable without any special logic, but for pickling expression
- objects and full Query objects, such that all mapper/engine/session
- dependencies can be restored at unpickle time.
- misc
- util.flatten_iterator() func doesn't interpret strings with
def test_profile_2_insert(self):
self.test_baseline_2_insert()
- @profiling.function_call_count(3858, {'2.4': 2557})
+ @profiling.function_call_count(3858, {'2.4': 2347})
def test_profile_3_properties(self):
self.test_baseline_3_properties()
- @profiling.function_call_count(14752, {'2.4': 10549})
+ @profiling.function_call_count(14752, {'2.4': 9950})
def test_profile_4_expressions(self):
self.test_baseline_4_expressions()
- @profiling.function_call_count(1442, {'2.4': 1084})
+ @profiling.function_call_count(1442, {'2.4': 1001})
def test_profile_5_aggregates(self):
self.test_baseline_5_aggregates()
- @profiling.function_call_count(1904, {'2.4': 1256})
+ @profiling.function_call_count(1904, {'2.4': 1193})
def test_profile_6_editing(self):
self.test_baseline_6_editing()
- @profiling.function_call_count(3110, {'2.4': 2198})
+ @profiling.function_call_count(3110, {'2.4': 1998})
def test_profile_7_multiview(self):
self.test_baseline_7_multiview()