Thread: [Sqlalchemy-commits] sqlalchemy: - add test for [ticket:2142]
Brought to you by:
zzzeek
From: <co...@sq...> - 2011-04-23 19:15:01
|
details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/de898fa40417 changeset: 7570:de898fa40417 user: zzzeek date: Sat Apr 23 15:05:50 2011 -0400 description: - add test for [ticket:2142] Subject: sqlalchemy: - add failing test for [ticket:2142] details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/a20e97801385 changeset: 7571:a20e97801385 user: zzzeek date: Sat Apr 23 15:13:45 2011 -0400 description: - add failing test for [ticket:2142] diffstat: .hgignore | 1 - .hgtags | 6 +- CHANGES | 2980 ++++++-- CHANGES_PRE_05 | 4107 ++++++++++++ CHANGES_PRE_06 | 6207 ------------------- LICENSE | 2 +- README | 11 + README.py3k | 14 +- README.unittests | 80 +- doc/build/builder/builders.py | 7 +- doc/build/core/connections.rst | 46 +- doc/build/core/engines.rst | 31 +- doc/build/core/event.rst | 101 - doc/build/core/events.rst | 30 - doc/build/core/expression_api.rst | 22 +- doc/build/core/index.rst | 8 +- doc/build/core/interfaces.rst | 17 +- doc/build/core/internals.rst | 46 - doc/build/core/pooling.rst | 21 +- doc/build/core/schema.rst | 196 +- doc/build/core/tutorial.rst | 20 +- doc/build/core/types.rst | 41 +- doc/build/dialects/drizzle.rst | 72 - doc/build/dialects/index.rst | 1 - doc/build/dialects/mysql.rst | 4 - doc/build/dialects/postgresql.rst | 2 - doc/build/dialects/sqlite.rst | 2 - doc/build/index.rst | 17 +- doc/build/intro.rst | 97 +- doc/build/orm/collections.rst | 13 +- doc/build/orm/events.rst | 43 - doc/build/orm/examples.rst | 7 + doc/build/orm/extensions/hybrid.rst | 15 - doc/build/orm/extensions/index.rst | 7 - doc/build/orm/extensions/mutable.rst | 24 - doc/build/orm/index.rst | 7 +- doc/build/orm/interfaces.rst | 92 +- doc/build/orm/internals.rst | 48 - doc/build/orm/loading.rst | 17 +- doc/build/orm/mapper_config.rst | 222 +- doc/build/orm/query.rst | 2 +- doc/build/orm/relationships.rst | 5 +- doc/build/orm/session.rst | 43 +- doc/build/orm/tutorial.rst | 32 +- doc/build/testdocs.py | 16 +- examples/association/__init__.py | 31 +- examples/association/basic_association.py | 138 +- examples/association/dict_of_sets_with_default.py | 87 - examples/association/proxied_association.py | 146 +- examples/beaker_caching/caching_query.py | 24 +- examples/custom_attributes/custom_management.py | 3 +- examples/custom_attributes/listen_for_events.py | 46 +- examples/derived_attributes/__init__.py | 10 + examples/derived_attributes/attributes.py | 168 + examples/sharding/attribute_shard.py | 24 +- examples/versioning/test_versioning.py | 9 +- examples/vertical/dictlike-polymorphic.py | 64 +- ez_setup.py | 20 +- lib/sqlalchemy/__init__.py | 6 +- lib/sqlalchemy/connectors/mxodbc.py | 9 +- lib/sqlalchemy/connectors/mysqldb.py | 150 - lib/sqlalchemy/connectors/pyodbc.py | 3 +- lib/sqlalchemy/connectors/zxJDBC.py | 2 +- lib/sqlalchemy/databases/__init__.py | 2 - lib/sqlalchemy/dialects/__init__.py | 1 - lib/sqlalchemy/dialects/access/base.py | 5 + lib/sqlalchemy/dialects/drizzle/__init__.py | 18 - lib/sqlalchemy/dialects/drizzle/base.py | 576 - lib/sqlalchemy/dialects/drizzle/mysqldb.py | 65 - lib/sqlalchemy/dialects/firebird/base.py | 26 +- lib/sqlalchemy/dialects/firebird/kinterbasdb.py | 23 +- lib/sqlalchemy/dialects/informix/informixdb.py | 2 +- lib/sqlalchemy/dialects/maxdb/base.py | 11 +- lib/sqlalchemy/dialects/mssql/adodbapi.py | 3 +- lib/sqlalchemy/dialects/mssql/base.py | 92 +- lib/sqlalchemy/dialects/mssql/information_schema.py | 2 +- lib/sqlalchemy/dialects/mssql/mxodbc.py | 6 +- lib/sqlalchemy/dialects/mssql/pymssql.py | 3 +- lib/sqlalchemy/dialects/mssql/pyodbc.py | 27 +- lib/sqlalchemy/dialects/mysql/__init__.py | 2 +- lib/sqlalchemy/dialects/mysql/base.py | 141 +- lib/sqlalchemy/dialects/mysql/mysqlconnector.py | 2 +- lib/sqlalchemy/dialects/mysql/mysqldb.py | 160 +- lib/sqlalchemy/dialects/mysql/oursql.py | 4 +- lib/sqlalchemy/dialects/mysql/pymysql.py | 36 - lib/sqlalchemy/dialects/oracle/base.py | 40 +- lib/sqlalchemy/dialects/oracle/cx_oracle.py | 21 +- lib/sqlalchemy/dialects/oracle/zxjdbc.py | 2 +- lib/sqlalchemy/dialects/postgresql/base.py | 156 +- lib/sqlalchemy/dialects/postgresql/pg8000.py | 15 +- lib/sqlalchemy/dialects/postgresql/psycopg2.py | 133 +- lib/sqlalchemy/dialects/postgresql/pypostgresql.py | 4 +- lib/sqlalchemy/dialects/sqlite/__init__.py | 4 +- lib/sqlalchemy/dialects/sqlite/base.py | 101 +- lib/sqlalchemy/dialects/sqlite/pysqlite.py | 50 +- lib/sqlalchemy/dialects/sybase/base.py | 2 - lib/sqlalchemy/dialects/sybase/pyodbc.py | 2 +- lib/sqlalchemy/dialects/sybase/pysybase.py | 2 +- lib/sqlalchemy/engine/base.py | 928 +- lib/sqlalchemy/engine/ddl.py | 114 +- lib/sqlalchemy/engine/default.py | 469 +- lib/sqlalchemy/engine/reflection.py | 24 +- lib/sqlalchemy/engine/strategies.py | 39 +- lib/sqlalchemy/engine/threadlocal.py | 12 +- lib/sqlalchemy/engine/url.py | 3 +- lib/sqlalchemy/event.py | 347 - lib/sqlalchemy/events.py | 429 - lib/sqlalchemy/exc.py | 79 +- lib/sqlalchemy/ext/associationproxy.py | 68 +- lib/sqlalchemy/ext/compiler.py | 115 +- lib/sqlalchemy/ext/declarative.py | 162 +- lib/sqlalchemy/ext/horizontal_shard.py | 7 +- lib/sqlalchemy/ext/hybrid.py | 421 - lib/sqlalchemy/ext/mutable.py | 552 - lib/sqlalchemy/ext/sqlsoup.py | 9 +- lib/sqlalchemy/interfaces.py | 103 +- lib/sqlalchemy/log.py | 199 +- lib/sqlalchemy/orm/__init__.py | 283 +- lib/sqlalchemy/orm/attributes.py | 1336 ++- lib/sqlalchemy/orm/collections.py | 28 +- lib/sqlalchemy/orm/dependency.py | 185 +- lib/sqlalchemy/orm/deprecated_interfaces.py | 583 - lib/sqlalchemy/orm/descriptor_props.py | 405 - lib/sqlalchemy/orm/dynamic.py | 69 +- lib/sqlalchemy/orm/events.py | 1046 --- lib/sqlalchemy/orm/exc.py | 3 - lib/sqlalchemy/orm/identity.py | 107 +- lib/sqlalchemy/orm/instrumentation.py | 691 -- lib/sqlalchemy/orm/interfaces.py | 653 +- lib/sqlalchemy/orm/mapper.py | 1255 +-- lib/sqlalchemy/orm/properties.py | 360 +- lib/sqlalchemy/orm/query.py | 477 +- lib/sqlalchemy/orm/scoping.py | 88 +- lib/sqlalchemy/orm/session.py | 507 +- lib/sqlalchemy/orm/state.py | 263 +- lib/sqlalchemy/orm/strategies.py | 524 +- lib/sqlalchemy/orm/sync.py | 22 +- lib/sqlalchemy/orm/unitofwork.py | 121 +- lib/sqlalchemy/orm/util.py | 185 +- lib/sqlalchemy/pool.py | 319 +- lib/sqlalchemy/queue.py | 191 + lib/sqlalchemy/schema.py | 1013 +-- lib/sqlalchemy/sql/__init__.py | 1 - lib/sqlalchemy/sql/compiler.py | 559 +- lib/sqlalchemy/sql/expression.py | 1087 +-- lib/sqlalchemy/sql/functions.py | 26 +- lib/sqlalchemy/sql/operators.py | 6 - lib/sqlalchemy/sql/util.py | 14 +- lib/sqlalchemy/test/__init__.py | 33 + lib/sqlalchemy/test/assertsql.py | 300 + lib/sqlalchemy/test/engines.py | 311 + lib/sqlalchemy/test/entities.py | 89 + lib/sqlalchemy/test/orm.py | 117 + lib/sqlalchemy/test/pickleable.py | 81 + lib/sqlalchemy/test/profiling.py | 228 + lib/sqlalchemy/test/requires.py | 333 + lib/sqlalchemy/test/schema.py | 85 + lib/sqlalchemy/test/testing.py | 805 ++ lib/sqlalchemy/test/util.py | 81 + lib/sqlalchemy/topological.py | 83 + lib/sqlalchemy/types.py | 483 +- lib/sqlalchemy/util.py | 1882 +++++ lib/sqlalchemy/util/__init__.py | 32 - lib/sqlalchemy/util/_collections.py | 897 -- lib/sqlalchemy/util/compat.py | 211 - lib/sqlalchemy/util/deprecations.py | 118 - lib/sqlalchemy/util/langhelpers.py | 791 -- lib/sqlalchemy/util/queue.py | 191 - lib/sqlalchemy/util/topological.py | 83 - lib/sqlalchemy_nose/config.py | 173 + lib/sqlalchemy_nose/noseplugin.py | 166 + setup.cfg | 3 +- setup.py | 445 +- sqla_nose.py | 18 +- test/aaa_profiling/test_compiler.py | 36 +- test/aaa_profiling/test_memusage.py | 57 +- test/aaa_profiling/test_orm.py | 142 +- test/aaa_profiling/test_pool.py | 23 +- test/aaa_profiling/test_resultset.py | 56 +- test/aaa_profiling/test_zoomark.py | 33 +- test/aaa_profiling/test_zoomark_orm.py | 31 +- test/base/test_dependency.py | 20 +- test/base/test_events.py | 309 - test/base/test_except.py | 35 +- test/base/test_utils.py | 50 +- test/bootstrap/config.py | 170 - test/bootstrap/noseplugin.py | 182 - test/dialect/test_access.py | 4 +- test/dialect/test_firebird.py | 33 +- test/dialect/test_informix.py | 4 +- test/dialect/test_maxdb.py | 12 +- test/dialect/test_mssql.py | 105 +- test/dialect/test_mxodbc.py | 7 +- test/dialect/test_mysql.py | 109 +- test/dialect/test_oracle.py | 99 +- test/dialect/test_postgresql.py | 438 +- test/dialect/test_sqlite.py | 127 +- test/dialect/test_sybase.py | 4 +- test/engine/_base.py | 167 + test/engine/test_bind.py | 31 +- test/engine/test_ddlevents.py | 274 +- test/engine/test_execute.py | 644 +- test/engine/test_metadata.py | 514 + test/engine/test_parseconnect.py | 15 +- test/engine/test_pool.py | 418 +- test/engine/test_reconnect.py | 86 +- test/engine/test_reflection.py | 167 +- test/engine/test_transaction.py | 158 +- test/ex/test_examples.py | 4 +- test/ext/test_associationproxy.py | 257 +- test/ext/test_compiler.py | 47 +- test/ext/test_declarative.py | 478 +- test/ext/test_horizontal_shard.py | 54 +- test/ext/test_hybrid.py | 245 - test/ext/test_mutable.py | 281 - test/ext/test_orderinglist.py | 6 +- test/ext/test_serializer.py | 24 +- test/ext/test_sqlsoup.py | 6 +- test/lib/__init__.py | 24 - test/lib/assertsql.py | 314 - test/lib/engines.py | 305 - test/lib/entities.py | 83 - test/lib/fixtures.py | 296 - test/lib/orm.py | 111 - test/lib/pickleable.py | 98 - test/lib/profiling.py | 238 - test/lib/requires.py | 364 - test/lib/schema.py | 79 - test/lib/testing.py | 739 -- test/lib/util.py | 129 - test/orm/_base.py | 213 + test/orm/_fixtures.py | 478 +- test/orm/inheritance/test_abc_inheritance.py | 8 +- test/orm/inheritance/test_abc_polymorphic.py | 11 +- test/orm/inheritance/test_basic.py | 369 +- test/orm/inheritance/test_concrete.py | 76 +- test/orm/inheritance/test_magazine.py | 10 +- test/orm/inheritance/test_manytomany.py | 12 +- test/orm/inheritance/test_poly_linked_list.py | 14 +- test/orm/inheritance/test_polymorph.py | 85 +- test/orm/inheritance/test_polymorph2.py | 54 +- test/orm/inheritance/test_productspec.py | 9 +- test/orm/inheritance/test_query.py | 309 +- test/orm/inheritance/test_selects.py | 9 +- test/orm/inheritance/test_single.py | 104 +- test/orm/test_association.py | 42 +- test/orm/test_assorted_eager.py | 286 +- test/orm/test_attributes.py | 1833 +--- test/orm/test_backref_mutations.py | 108 +- test/orm/test_bind.py | 23 +- test/orm/test_cascade.py | 1723 +--- test/orm/test_collection.py | 89 +- test/orm/test_compile.py | 42 +- test/orm/test_composites.py | 362 +- test/orm/test_cycles.py | 217 +- test/orm/test_defaults.py | 38 +- test/orm/test_deprecations.py | 118 +- test/orm/test_descriptor.py | 133 - test/orm/test_dynamic.py | 191 +- test/orm/test_eager_relations.py | 526 +- test/orm/test_evaluator.py | 29 +- test/orm/test_events.py | 1134 --- test/orm/test_expire.py | 229 +- test/orm/test_extendedattr.py | 85 +- test/orm/test_froms.py | 1931 ----- test/orm/test_generative.py | 141 +- test/orm/test_immediate_load.py | 16 +- test/orm/test_instrumentation.py | 259 +- test/orm/test_joins.py | 1879 ----- test/orm/test_lazy_relations.py | 152 +- test/orm/test_legacy_mutable.py | 375 - test/orm/test_load_on_fks.py | 12 +- test/orm/test_manytomany.py | 114 +- test/orm/test_mapper.py | 1149 +- test/orm/test_merge.py | 304 +- test/orm/test_naturalpks.py | 165 +- test/orm/test_onetoone.py | 19 +- test/orm/test_pickled.py | 270 +- test/orm/test_query.py | 4124 ++++++++++-- test/orm/test_relationships.py | 753 +- test/orm/test_scoping.py | 198 +- test/orm/test_selectable.py | 49 +- test/orm/test_session.py | 574 +- test/orm/test_subquery_relations.py | 295 +- test/orm/test_transaction.py | 139 +- test/orm/test_unitofwork.py | 965 +- test/orm/test_unitofworkv2.py | 403 +- test/orm/test_update_delete.py | 544 - test/orm/test_utils.py | 64 +- test/orm/test_versioning.py | 222 +- test/perf/README | 17 - test/perf/cascade_speed.py | 93 + test/perf/insertspeed.py | 2 +- test/perf/large_flush.py | 2 +- test/perf/masscreate.py | 39 + test/perf/masscreate2.py | 36 + test/perf/masseagerload.py | 54 + test/perf/massload.py | 63 + test/perf/massload2.py | 70 + test/perf/masssave.py | 54 + test/perf/objselectspeed.py | 4 +- test/perf/objupdatespeed.py | 4 +- test/perf/orm2010.py | 186 - test/perf/ormsession.py | 4 +- test/perf/poolload.py | 37 + test/perf/sessions.py | 10 +- test/perf/stress_all.py | 2 +- test/perf/wsgi.py | 52 + test/sql/_base.py | 4 + test/sql/test_case_statement.py | 7 +- test/sql/test_columns.py | 95 + test/sql/test_compiler.py | 263 +- test/sql/test_constraints.py | 83 +- test/sql/test_defaults.py | 650 +- test/sql/test_functions.py | 23 +- test/sql/test_generative.py | 81 +- test/sql/test_labels.py | 8 +- test/sql/test_metadata.py | 1183 --- test/sql/test_query.py | 135 +- test/sql/test_quote.py | 13 +- test/sql/test_returning.py | 15 +- test/sql/test_rowcount.py | 4 +- test/sql/test_selectable.py | 15 +- test/sql/test_types.py | 265 +- test/sql/test_unicode.py | 9 +- test/zblog/blog.py | 35 + test/zblog/mappers.py | 135 + test/zblog/tables.py | 53 + test/zblog/test_zblog.py | 116 + test/zblog/user.py | 41 + 330 files changed, 30533 insertions(+), 48243 deletions(-) diffs (truncated from 109388 to 300 lines): diff -r d989bc0ca637 -r a20e97801385 .hgignore --- a/.hgignore Sat Apr 23 10:45:11 2011 -0700 +++ b/.hgignore Sat Apr 23 15:13:45 2011 -0400 @@ -5,7 +5,6 @@ .orig$ .egg-info .*,cover -.un~ \.coverage \.DS_Store test.cfg diff -r d989bc0ca637 -r a20e97801385 .hgtags --- a/.hgtags Sat Apr 23 10:45:11 2011 -0700 +++ b/.hgtags Sat Apr 23 15:13:45 2011 -0400 @@ -76,7 +76,5 @@ 1db7766705b70f5326b614699b7c06d46168d19d rel_0_6_3 2db46b7f51c1e64f06d9c31c49ff6e15be98e9ca rel_0_6_4 ff12fe7cac947ce9e28be4e8b4473df2c0adaa04 rel_0_6_5 -92a08c9934aa8e4d080386102d76235ee1897829 rel_0_7b1 -e08d40f2b46cdaffc1af0c4950151963efa6e3f1 rel_0_7b2 -e92d07007ae1f922bf51bf912d5491f45c73a7ff rel_0_7b3 -3f4f05942eb7a3b87443b07b54260e067ece3918 rel_0_7b4 +3ef75b251d060573ccd994598d03f3c30f0e012c rel_0_6_6 +f01a42b4a5aa2dbd4df52fa5ce440c891daba54d rel_0_6_7 diff -r d989bc0ca637 -r a20e97801385 CHANGES --- a/CHANGES Sat Apr 23 10:45:11 2011 -0700 +++ b/CHANGES Sat Apr 23 15:13:45 2011 -0400 @@ -3,217 +3,153 @@ ======= CHANGES ======= -0.7.0b5 -======= -- (note b5 may become 0.7.0) +0.6.8 +===== - orm - - Fixed regression introduced in 0.7b4 (!) whereby - query.options(someoption("nonexistent name")) would - fail to raise an error. Also added additional - error catching for cases where the option would - try to build off a column-based element, further - fixed up some of the error messages tailored - in [ticket:2069] - - - It is an error to call query.get() when the - given entity is not a single, full class - entity or mapper (i.e. a column). This is - a deprecation warning in 0.6.8. + - Calling query.get() against a column-based entity is + invalid, this condition now raises a deprecation warning. [ticket:2144] - sql - - Some improvements to error handling inside - of the execute procedure to ensure auto-close - connections are really closed when very - unusual DBAPI errors occur. - - - metadata.reflect() and reflection.Inspector() - had some reliance on GC to close connections - which were internally procured, fixed this. - - - Added explicit check for when Column .name - is assigned as blank string [ticket:2140] - - Fixed bug whereby if FetchedValue was passed to column server_onupdate, it would not have its parent "column" assigned, added test coverage for all column default assignment - patterns. [ticket:2147] also in 0.6.8 - -- postgresql - - Fixed the psycopg2_version parsing in the - psycopg2 dialect. - -0.7.0b4 -======= -- general - - Changes to the format of CHANGES, this file. - The format changes have been applied to - the 0.7 releases. - - - The "-declarative" changes will now be listed - directly under the "-orm" section, as these - are closely related. - - - The 0.5 series changes have been moved to - the file CHANGES_PRE_06 which replaces - CHANGES_PRE_05. - - - The changelog for 0.6.7 and subsequent within - the 0.6 series is now listed only in the - CHANGES file within the 0.6 branch. - In the 0.7 CHANGES file (i.e. this file), all the - 0.6 changes are listed inline within the 0.7 - section in which they were also applied - (since all 0.6 changes are in 0.7 as well). - Changes that apply to an 0.6 version here - are noted as are if any differences in - implementation/behavior are present. - + patterns. [ticket:2147] + +0.6.7 +===== - orm - - Some fixes to "evaulate" and "fetch" evaluation - when query.update(), query.delete() are called. - The retrieval of records is done after autoflush - in all cases, and before update/delete is - emitted, guarding against unflushed data present - as well as expired objects failing during - the evaluation. [ticket:2122] + - Tightened the iterate vs. remove mutex around the + identity map iteration, attempting to reduce the + chance of an (extremely rare) reentrant gc operation + causing a deadlock. Might remove the mutex in + 0.7. [ticket:2087] + + - Added a `name` argument to `Query.subquery()`, to allow + a fixed name to be assigned to the alias object. + [ticket:2030] + + - A warning is emitted when a joined-table inheriting mapper + has no primary keys on the locally mapped table + (but has pks on the superclass table). [ticket:2019] + + - Fixed bug where "middle" class in a polymorphic hierarchy + would have no 'polymorphic_on' column if it didn't also + specify a 'polymorphic_identity', leading to strange + errors upon refresh, wrong class loaded when querying + from that target. Also emits the correct WHERE criterion + when using single table inheritance. [ticket:2038] + + - Fixed bug where a column with a SQL or server side default + that was excluded from a mapping with include_properties + or exclude_properties would result in UnmappedColumnError. + [ticket:1995] + + - A warning is emitted in the unusual case that an + append or similar event on a collection occurs after + the parent object has been dereferenced, which + prevents the parent from being marked as "dirty" + in the session. This will be an exception in 0.7. + [ticket:2046] + + - Fixed bug in query.options() whereby a path + applied to a lazyload using string keys could + overlap a same named attribute on the wrong + entity. Note 0.7 has an updated version of this + fix. [ticket:2098] - Reworded the exception raised when a flush is attempted of a subclass that is not polymorphic against the supertype. [ticket:2063] - - Still more wording adjustments when a query option - can't find the target entity. Explain that the - path must be from one of the root entities. - - Some fixes to the state handling regarding backrefs, typically when autoflush=False, where the back-referenced collection wouldn't properly handle add/removes with no net change. Thanks to Richard Murri for the test case + patch. [ticket:2123] - (also in 0.6.7). - - - Added checks inside the UOW to detect the unusual - condition of being asked to UPDATE or DELETE - on a primary key value that contains NULL - in it. [ticket:2127] - - - Some refinements to attribute history. More - changes are pending possibly in 0.8, but - for now history has been modified such that - scalar history doesn't have a "side effect" - of populating None for a non-present value. - This allows a slightly better ability to - distinguish between a None set and no actual - change, affects [ticket:2127] as well. - a "having" clause would be copied from the inside to the outside query if from_self() - were used; in particular this would break - an 0.7 style count() query [ticket:2130]. - (also in 0.6.7) - - - the Query.execution_options() method now passes - those options to the Connection rather than - the SELECT statement, so that all available - options including isolation level and - compiled cache may be used. [ticket:2131] + were used. [ticket:2130]. + + - It is an error to call query.get() when the + given entity is not a single, full class + entity or mapper (i.e. a column). This is + a deprecation warning in 0.6.8. + [ticket:2144] - sql - - The "compiled_cache" execution option now raises - an error when passed to a SELECT statement - rather than a Connection. Previously it was - being ignored entirely. We may look into - having this option work on a per-statement - level at some point. [ticket:2131] - - - Restored the "catchall" constructor on the base - TypeEngine class, with a deprecation warning. - This so that code which does something like - Integer(11) still succeeds. - - - Fixed regression whereby MetaData() coming - back from unpickling did not keep track of - new things it keeps track of now, i.e. - collection of Sequence objects, list - of schema names. [ticket:2104] + - Column.copy(), as used in table.tometadata(), copies the + 'doc' attribute. [ticket:2028] + + - Added some defs to the resultproxy.c extension so that + the extension compiles and runs on Python 2.4. + [ticket:2023] + + - The compiler extension now supports overriding the default + compilation of expression._BindParamClause including that + the auto-generated binds within the VALUES/SET clause + of an insert()/update() statement will also use the new + compilation rules. [ticket:2042] + + - Added accessors to ResultProxy "returns_rows", "is_insert" + [ticket:2089] - The limit/offset keywords to select() as well as the value passed to select.limit()/offset() will be coerced to integer. [ticket:2116] - (also in 0.6.7) - - - fixed bug where "from" clause gathering from an - over() clause would be an itertools.chain() and - not a list, causing "can only concatenate list" - TypeError when combined with other clauses. - - - Fixed incorrect usage of "," in over() clause - being placed between the "partition" and "order by" - clauses. [ticket:2134] - - - Before/after attach events for PrimaryKeyConstraint - now function, tests added for before/after events - on all constraint types. [ticket:2105] - - - Added explicit true()/false() constructs to expression - lib - coercion rules will intercept "False"/"True" - into these constructs. In 0.6, the constructs were - typically converted straight to string, which was - no longer accepted in 0.7. [ticket:2117] - engine - - The C extension is now enabled by default on CPython - 2.x with a fallback to pure python if it fails to - compile. [ticket:2129] - -- schema - - The 'useexisting' flag on Table has been superceded - by a new pair of flags 'keep_existing' and - 'extend_existing'. 'extend_existing' is equivalent - to 'useexisting' - the existing Table is returned, - and additional constructor elements are added. - With 'keep_existing', the existing Table is returned, - but additional constructor elements are not added - - these elements are only applied when the Table - is newly created. [ticket:2109] - -- types - - REAL has been added to the core types. Supported - by Postgresql, SQL Server, MySQL, SQLite. Note - that the SQL Server and MySQL versions, which - add extra arguments, are also still available - from those dialects. [ticket:2081] - --event - - Added @event.listens_for() decorator, given - target + event name, applies the decorated - function as a listener. [ticket:2106] - -- pool - - AssertionPool now stores the traceback indicating - where the currently checked out connection was - acquired; this traceback is reported within - the assertion raised upon a second concurrent - checkout; courtesy Gunnlaugur Briem - [ticket:2103] - - - The "pool.manage" feature doesn't use pickle - anymore to hash the arguments for each pool. + - Fixed bug in QueuePool, SingletonThreadPool whereby + connections that were discarded via overflow or periodic |