[Sqlalchemy-commits] sqlalchemy: mysql connector python 3k is dev status
Brought to you by:
zzzeek
From: <co...@sq...> - 2012-02-16 15:04:35
|
details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/4ffe5599b21b changeset: 8113:4ffe5599b21b user: Mike Bayer <mi...@zz...> date: Thu Feb 16 10:03:54 2012 -0500 description: mysql connector python 3k is dev status Subject: sqlalchemy: mysql connector python 3k is dev status details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/ecff13f0023e changeset: 8114:ecff13f0023e user: Mike Bayer <mi...@zz...> date: Thu Feb 16 10:04:07 2012 -0500 description: mysql connector python 3k is dev status diffstat: .hgignore | 4 + .hgtags | 14 +- CHANGES | 4518 +++--- CHANGES_PRE_05 | 4092 ------ CHANGES_PRE_06 | 6222 ++++++++++ LICENSE | 2 +- README | 72 - README.py3k | 14 +- README.rst | 132 + README.unittests | 89 +- doc/build/Makefile | 10 +- doc/build/conf.py | 13 +- doc/build/copyright.rst | 2 +- doc/build/core/connections.rst | 78 +- doc/build/core/engines.rst | 164 +- doc/build/core/event.rst | 106 + doc/build/core/events.rst | 33 + doc/build/core/expression_api.rst | 61 +- doc/build/core/index.rst | 8 +- doc/build/core/interfaces.rst | 17 +- doc/build/core/internals.rst | 46 + doc/build/core/pooling.rst | 168 +- doc/build/core/schema.rst | 255 +- doc/build/core/tutorial.rst | 103 +- doc/build/core/types.rst | 76 +- doc/build/dialects/drizzle.rst | 74 + doc/build/dialects/index.rst | 1 + doc/build/dialects/mssql.rst | 2 + doc/build/dialects/mysql.rst | 7 + doc/build/dialects/oracle.rst | 2 + doc/build/dialects/postgresql.rst | 4 +- doc/build/dialects/sqlite.rst | 2 + doc/build/index.rst | 17 +- doc/build/intro.rst | 115 +- doc/build/orm/collections.rst | 357 +- doc/build/orm/events.rst | 49 + doc/build/orm/examples.rst | 23 +- doc/build/orm/extensions/associationproxy.rst | 606 +- doc/build/orm/extensions/declarative.rst | 5 + doc/build/orm/extensions/hybrid.rst | 16 + doc/build/orm/extensions/index.rst | 7 + doc/build/orm/extensions/mutable.rst | 25 + doc/build/orm/extensions/orderinglist.rst | 9 + doc/build/orm/index.rst | 7 +- doc/build/orm/inheritance.rst | 17 +- doc/build/orm/interfaces.rst | 91 +- doc/build/orm/internals.rst | 45 + doc/build/orm/loading.rst | 89 +- doc/build/orm/mapper_config.rst | 1232 +- doc/build/orm/query.rst | 2 +- doc/build/orm/relationships.rst | 1272 +- doc/build/orm/session.rst | 316 +- doc/build/orm/tutorial.rst | 1494 +- doc/build/sqla_arch_small.png | 0 doc/build/templates/layout.mako | 3 +- doc/build/testdocs.py | 16 +- examples/adjacency_list/adjacency_list.py | 109 +- examples/association/__init__.py | 31 +- examples/association/basic_association.py | 136 +- examples/association/dict_of_sets_with_default.py | 87 + examples/association/proxied_association.py | 146 +- examples/beaker_caching/caching_query.py | 32 +- examples/custom_attributes/custom_management.py | 6 +- examples/custom_attributes/listen_for_events.py | 46 +- examples/declarative_reflection/__init__.py | 46 + examples/declarative_reflection/declarative_reflection.py | 98 + examples/derived_attributes/__init__.py | 10 - examples/derived_attributes/attributes.py | 168 - examples/generic_associations/__init__.py | 24 + examples/generic_associations/discriminator_on_association.py | 148 + examples/generic_associations/table_per_association.py | 106 + examples/generic_associations/table_per_related.py | 107 + examples/large_collection/large_collection.py | 3 +- examples/poly_assoc/__init__.py | 10 - examples/poly_assoc/poly_assoc.py | 156 - examples/poly_assoc/poly_assoc_fk.py | 164 - examples/poly_assoc/poly_assoc_generic.py | 161 - examples/postgis/postgis.py | 27 +- examples/sharding/attribute_shard.py | 46 +- examples/versioning/__init__.py | 35 +- examples/versioning/_lib.py | 96 + examples/versioning/history_meta.py | 34 +- examples/versioning/test_versioning.py | 28 +- examples/vertical/dictlike-polymorphic.py | 58 +- ez_setup.py | 20 +- lib/sqlalchemy/__init__.py | 10 +- lib/sqlalchemy/cextension/processors.c | 64 +- lib/sqlalchemy/cextension/resultproxy.c | 4 +- lib/sqlalchemy/connectors/__init__.py | 2 +- lib/sqlalchemy/connectors/mxodbc.py | 11 +- lib/sqlalchemy/connectors/mysqldb.py | 150 + lib/sqlalchemy/connectors/pyodbc.py | 44 +- lib/sqlalchemy/connectors/zxJDBC.py | 4 +- lib/sqlalchemy/databases/__init__.py | 4 +- lib/sqlalchemy/dialects/__init__.py | 3 +- lib/sqlalchemy/dialects/access/base.py | 5 - lib/sqlalchemy/dialects/drizzle/__init__.py | 18 + lib/sqlalchemy/dialects/drizzle/base.py | 582 + lib/sqlalchemy/dialects/drizzle/mysqldb.py | 69 + lib/sqlalchemy/dialects/firebird/__init__.py | 2 +- lib/sqlalchemy/dialects/firebird/base.py | 30 +- lib/sqlalchemy/dialects/firebird/kinterbasdb.py | 25 +- lib/sqlalchemy/dialects/informix/__init__.py | 2 +- lib/sqlalchemy/dialects/informix/base.py | 2 +- lib/sqlalchemy/dialects/informix/informixdb.py | 4 +- lib/sqlalchemy/dialects/maxdb/__init__.py | 2 +- lib/sqlalchemy/dialects/maxdb/base.py | 15 +- lib/sqlalchemy/dialects/maxdb/sapdb.py | 2 +- lib/sqlalchemy/dialects/mssql/__init__.py | 2 +- lib/sqlalchemy/dialects/mssql/adodbapi.py | 5 +- lib/sqlalchemy/dialects/mssql/base.py | 154 +- lib/sqlalchemy/dialects/mssql/information_schema.py | 4 +- lib/sqlalchemy/dialects/mssql/mxodbc.py | 8 +- lib/sqlalchemy/dialects/mssql/pymssql.py | 6 +- lib/sqlalchemy/dialects/mssql/pyodbc.py | 49 +- lib/sqlalchemy/dialects/mssql/zxjdbc.py | 2 +- lib/sqlalchemy/dialects/mysql/__init__.py | 4 +- lib/sqlalchemy/dialects/mysql/base.py | 335 +- lib/sqlalchemy/dialects/mysql/mysqlconnector.py | 4 +- lib/sqlalchemy/dialects/mysql/mysqldb.py | 194 +- lib/sqlalchemy/dialects/mysql/oursql.py | 9 +- lib/sqlalchemy/dialects/mysql/pymysql.py | 39 + lib/sqlalchemy/dialects/mysql/pyodbc.py | 2 +- lib/sqlalchemy/dialects/mysql/zxjdbc.py | 2 +- lib/sqlalchemy/dialects/oracle/__init__.py | 2 +- lib/sqlalchemy/dialects/oracle/base.py | 80 +- lib/sqlalchemy/dialects/oracle/cx_oracle.py | 66 +- lib/sqlalchemy/dialects/oracle/zxjdbc.py | 7 +- lib/sqlalchemy/dialects/postgres.py | 2 +- lib/sqlalchemy/dialects/postgresql/__init__.py | 2 +- lib/sqlalchemy/dialects/postgresql/base.py | 458 +- lib/sqlalchemy/dialects/postgresql/pg8000.py | 17 +- lib/sqlalchemy/dialects/postgresql/psycopg2.py | 208 +- lib/sqlalchemy/dialects/postgresql/pypostgresql.py | 6 +- lib/sqlalchemy/dialects/postgresql/zxjdbc.py | 21 +- lib/sqlalchemy/dialects/sqlite/__init__.py | 6 +- lib/sqlalchemy/dialects/sqlite/base.py | 142 +- lib/sqlalchemy/dialects/sqlite/pysqlite.py | 163 +- lib/sqlalchemy/dialects/sybase/__init__.py | 2 +- lib/sqlalchemy/dialects/sybase/base.py | 4 +- lib/sqlalchemy/dialects/sybase/mxodbc.py | 2 +- lib/sqlalchemy/dialects/sybase/pyodbc.py | 4 +- lib/sqlalchemy/dialects/sybase/pysybase.py | 2 +- lib/sqlalchemy/engine/__init__.py | 103 +- lib/sqlalchemy/engine/base.py | 1513 +- lib/sqlalchemy/engine/ddl.py | 124 +- lib/sqlalchemy/engine/default.py | 516 +- lib/sqlalchemy/engine/reflection.py | 70 +- lib/sqlalchemy/engine/strategies.py | 63 +- lib/sqlalchemy/engine/threadlocal.py | 14 +- lib/sqlalchemy/engine/url.py | 24 +- lib/sqlalchemy/event.py | 347 + lib/sqlalchemy/events.py | 433 + lib/sqlalchemy/exc.py | 181 +- lib/sqlalchemy/ext/__init__.py | 2 +- lib/sqlalchemy/ext/associationproxy.py | 225 +- lib/sqlalchemy/ext/compiler.py | 177 +- lib/sqlalchemy/ext/declarative.py | 686 +- lib/sqlalchemy/ext/horizontal_shard.py | 26 +- lib/sqlalchemy/ext/hybrid.py | 677 + lib/sqlalchemy/ext/mutable.py | 563 + lib/sqlalchemy/ext/orderinglist.py | 9 +- lib/sqlalchemy/ext/serializer.py | 2 +- lib/sqlalchemy/ext/sqlsoup.py | 33 +- lib/sqlalchemy/interfaces.py | 109 +- lib/sqlalchemy/log.py | 201 +- lib/sqlalchemy/orm/__init__.py | 944 +- lib/sqlalchemy/orm/attributes.py | 1454 +- lib/sqlalchemy/orm/collections.py | 67 +- lib/sqlalchemy/orm/dependency.py | 187 +- lib/sqlalchemy/orm/deprecated_interfaces.py | 589 + lib/sqlalchemy/orm/descriptor_props.py | 422 + lib/sqlalchemy/orm/dynamic.py | 81 +- lib/sqlalchemy/orm/evaluator.py | 2 +- lib/sqlalchemy/orm/events.py | 1248 ++ lib/sqlalchemy/orm/exc.py | 27 +- lib/sqlalchemy/orm/identity.py | 13 +- lib/sqlalchemy/orm/instrumentation.py | 674 + lib/sqlalchemy/orm/interfaces.py | 742 +- lib/sqlalchemy/orm/mapper.py | 1912 +- lib/sqlalchemy/orm/persistence.py | 781 + lib/sqlalchemy/orm/properties.py | 1264 +- lib/sqlalchemy/orm/query.py | 1151 +- lib/sqlalchemy/orm/scoping.py | 90 +- lib/sqlalchemy/orm/session.py | 722 +- lib/sqlalchemy/orm/shard.py | 2 +- lib/sqlalchemy/orm/state.py | 287 +- lib/sqlalchemy/orm/strategies.py | 1003 +- lib/sqlalchemy/orm/sync.py | 25 +- lib/sqlalchemy/orm/unitofwork.py | 143 +- lib/sqlalchemy/orm/util.py | 351 +- lib/sqlalchemy/pool.py | 396 +- lib/sqlalchemy/processors.py | 60 +- lib/sqlalchemy/queue.py | 191 - lib/sqlalchemy/schema.py | 1366 +- lib/sqlalchemy/sql/__init__.py | 5 +- lib/sqlalchemy/sql/compiler.py | 812 +- lib/sqlalchemy/sql/expression.py | 2276 ++- lib/sqlalchemy/sql/functions.py | 28 +- lib/sqlalchemy/sql/operators.py | 435 +- lib/sqlalchemy/sql/util.py | 100 +- lib/sqlalchemy/sql/visitors.py | 90 +- 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 | 339 - lib/sqlalchemy/test/schema.py | 85 - lib/sqlalchemy/test/testing.py | 807 - lib/sqlalchemy/test/util.py | 81 - lib/sqlalchemy/topological.py | 83 - lib/sqlalchemy/types.py | 1010 +- lib/sqlalchemy/util.py | 1919 --- lib/sqlalchemy/util/__init__.py | 34 + lib/sqlalchemy/util/_collections.py | 905 + lib/sqlalchemy/util/compat.py | 231 + lib/sqlalchemy/util/deprecations.py | 118 + lib/sqlalchemy/util/langhelpers.py | 898 + lib/sqlalchemy/util/queue.py | 191 + lib/sqlalchemy/util/topological.py | 92 + lib/sqlalchemy_nose/config.py | 173 - lib/sqlalchemy_nose/noseplugin.py | 166 - setup.cfg | 3 +- setup.py | 347 +- sqla_nose.py | 18 +- test/aaa_profiling/test_compiler.py | 30 +- test/aaa_profiling/test_memusage.py | 68 +- test/aaa_profiling/test_orm.py | 221 +- test/aaa_profiling/test_pool.py | 23 +- test/aaa_profiling/test_resultset.py | 59 +- test/aaa_profiling/test_zoomark.py | 118 +- test/aaa_profiling/test_zoomark_orm.py | 52 +- test/base/test_dependency.py | 50 +- test/base/test_events.py | 309 + test/base/test_except.py | 66 +- test/base/test_utils.py | 150 +- test/bootstrap/config.py | 175 + test/bootstrap/noseplugin.py | 187 + 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 | 270 +- test/dialect/test_mxodbc.py | 7 +- test/dialect/test_mysql.py | 170 +- test/dialect/test_oracle.py | 249 +- test/dialect/test_postgresql.py | 1077 +- test/dialect/test_pyodbc.py | 17 + test/dialect/test_sqlite.py | 234 +- test/dialect/test_sybase.py | 4 +- test/engine/_base.py | 167 - test/engine/test_bind.py | 31 +- test/engine/test_ddlevents.py | 331 +- test/engine/test_execute.py | 1009 +- test/engine/test_metadata.py | 547 - test/engine/test_parseconnect.py | 90 +- test/engine/test_pool.py | 435 +- test/engine/test_processors.py | 107 + test/engine/test_reconnect.py | 122 +- test/engine/test_reflection.py | 1151 +- test/engine/test_transaction.py | 233 +- test/ex/test_examples.py | 4 +- test/ext/test_associationproxy.py | 346 +- test/ext/test_compiler.py | 64 +- test/ext/test_declarative.py | 771 +- test/ext/test_horizontal_shard.py | 61 +- test/ext/test_hybrid.py | 310 + test/ext/test_mutable.py | 485 + test/ext/test_orderinglist.py | 6 +- test/ext/test_serializer.py | 26 +- test/ext/test_sqlsoup.py | 12 +- test/lib/__init__.py | 24 + test/lib/assertsql.py | 316 + test/lib/engines.py | 428 + test/lib/entities.py | 83 + test/lib/fixtures.py | 296 + test/lib/orm.py | 111 + test/lib/pickleable.py | 101 + test/lib/profiling.py | 238 + test/lib/requires.py | 438 + test/lib/schema.py | 79 + test/lib/testing.py | 752 + 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 | 773 +- test/orm/inheritance/test_concrete.py | 76 +- test/orm/inheritance/test_magazine.py | 14 +- 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 | 115 +- test/orm/inheritance/test_productspec.py | 9 +- test/orm/inheritance/test_query.py | 2372 ++- test/orm/inheritance/test_selects.py | 9 +- test/orm/inheritance/test_single.py | 151 +- test/orm/test_association.py | 42 +- test/orm/test_assorted_eager.py | 286 +- test/orm/test_attributes.py | 2101 ++- test/orm/test_backref_mutations.py | 170 +- test/orm/test_bind.py | 23 +- test/orm/test_cascade.py | 1926 ++- test/orm/test_collection.py | 89 +- test/orm/test_compile.py | 42 +- test/orm/test_composites.py | 558 +- test/orm/test_cycles.py | 217 +- test/orm/test_default_strategies.py | 403 + 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 | 690 +- test/orm/test_evaluator.py | 29 +- test/orm/test_events.py | 1192 + test/orm/test_expire.py | 302 +- test/orm/test_extendedattr.py | 85 +- test/orm/test_froms.py | 2191 +++ test/orm/test_generative.py | 141 +- test/orm/test_hasparent.py | 205 + test/orm/test_immediate_load.py | 16 +- test/orm/test_instrumentation.py | 335 +- test/orm/test_joins.py | 2096 +++ test/orm/test_lazy_relations.py | 272 +- test/orm/test_legacy_mutable.py | 375 + test/orm/test_load_on_fks.py | 31 +- test/orm/test_manytomany.py | 114 +- test/orm/test_mapper.py | 1400 +- test/orm/test_merge.py | 490 +- test/orm/test_naturalpks.py | 172 +- test/orm/test_onetoone.py | 19 +- test/orm/test_pickled.py | 302 +- test/orm/test_query.py | 4446 +----- test/orm/test_relationships.py | 969 +- test/orm/test_scoping.py | 198 +- test/orm/test_selectable.py | 50 +- test/orm/test_session.py | 1013 +- test/orm/test_subquery_relations.py | 426 +- test/orm/test_sync.py | 16 +- test/orm/test_transaction.py | 590 +- test/orm/test_unitofwork.py | 1013 +- test/orm/test_unitofworkv2.py | 404 +- test/orm/test_update_delete.py | 544 + test/orm/test_utils.py | 66 +- test/orm/test_versioning.py | 249 +- 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 | 460 +- test/sql/test_constraints.py | 129 +- test/sql/test_defaults.py | 726 +- test/sql/test_functions.py | 34 +- test/sql/test_generative.py | 94 +- test/sql/test_labels.py | 382 +- test/sql/test_metadata.py | 1400 ++ test/sql/test_query.py | 394 +- test/sql/test_quote.py | 29 +- test/sql/test_returning.py | 15 +- test/sql/test_rowcount.py | 4 +- test/sql/test_selectable.py | 385 +- test/sql/test_types.py | 517 +- test/sql/test_unicode.py | 9 +- test/sql/test_update.py | 320 + 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 - 390 files changed, 73417 insertions(+), 38812 deletions(-) diffs (truncated from 150986 to 300 lines): diff -r 967d5f6d2fa7 -r ecff13f0023e .hgignore --- a/.hgignore Tue Feb 14 10:18:17 2012 -0500 +++ b/.hgignore Thu Feb 16 10:04:07 2012 -0500 @@ -1,10 +1,14 @@ syntax:regexp ^build/ +^dist/ ^doc/build/output .pyc$ .orig$ +.class$ +.so$ .egg-info .*,cover +.un~ \.coverage \.DS_Store test.cfg diff -r 967d5f6d2fa7 -r ecff13f0023e .hgtags --- a/.hgtags Tue Feb 14 10:18:17 2012 -0500 +++ b/.hgtags Thu Feb 16 10:04:07 2012 -0500 @@ -76,7 +76,13 @@ 1db7766705b70f5326b614699b7c06d46168d19d rel_0_6_3 2db46b7f51c1e64f06d9c31c49ff6e15be98e9ca rel_0_6_4 ff12fe7cac947ce9e28be4e8b4473df2c0adaa04 rel_0_6_5 -3ef75b251d060573ccd994598d03f3c30f0e012c rel_0_6_6 -f01a42b4a5aa2dbd4df52fa5ce440c891daba54d rel_0_6_7 -6bf675d91a56c20fadaa30b3042de3e67e6a1503 rel_0_6_8 -23f8241d4d32e99672c428c9be5c99d853b6c88c 06 +92a08c9934aa8e4d080386102d76235ee1897829 rel_0_7b1 +e08d40f2b46cdaffc1af0c4950151963efa6e3f1 rel_0_7b2 +e92d07007ae1f922bf51bf912d5491f45c73a7ff rel_0_7b3 +3f4f05942eb7a3b87443b07b54260e067ece3918 rel_0_7b4 +9fedd4baa59036972370fdb5636303cc0f15dc1a rel_0_7_0 +145c143cef747a07e37ac007ca52027d239b293c rel_0_7_1 +3e75f284f25312bca53f26188a791660fc01f2b5 rel_0_7_2 +74c4ef8e0d240bc441cf81d6f44957c263ec4a9e rel_0_7_3 +19a7e3a6058878ecc07a40ea563e9cf92110be3a rel_0_7_4 +ebe9514a69a4b4ec6209f0e9aa43053ba28d080b rel_0_7_5 diff -r 967d5f6d2fa7 -r ecff13f0023e CHANGES --- a/CHANGES Tue Feb 14 10:18:17 2012 -0500 +++ b/CHANGES Thu Feb 16 10:04:07 2012 -0500 @@ -3,7 +3,673 @@ ======= CHANGES ======= -0.6.9 +0.7.6 +===== +- orm + - [bug] Fixed bug whereby MappedCollection + would not get the appropriate collection + instrumentation if it were only used + in a custom subclass that used + @collection.internally_instrumented. + [ticket:2406] + + - [feature] Added the ability to query for + Table-bound column names when using + query(sometable).filter_by(colname=value). + [ticket:2400] + + - [bug] Improved the "declarative reflection" + example to support single-table inheritance, + multiple calls to prepare(), tables that + are present in alternate schemas, + establishing only a subset of classes + as reflected. + + - [bug] Scaled back the test applied within + flush() to check for UPDATE against partially + NULL PK within one table to only actually + happen if there's really an UPDATE to occur. + [ticket:2390] + + - [bug] Fixed bug whereby if a method name + conflicted with a column name, a + TypeError would be raised when the mapper + tried to inspect the __get__() method + on the method object. [ticket:2352] + +- sql + - [bug] Added support for using the .key + of a Column as a string identifier in a + result set row. The .key is currently + listed as an "alternate" name for a column, + and is superseded by the name of a column + which has that key value as its regular name. + For the next major release + of SQLAlchemy we may reverse this precedence + so that .key takes precedence, but this + is not decided on yet. [ticket:2392] + + - [bug] A significant change to how labeling + is applied to columns in SELECT statements + allows "truncated" labels, that is label names + that are generated in Python which exceed + the maximum identifier length (note this is + configurable via label_length on create_engine()), + to be properly referenced when rendered inside + of a subquery, as well as to be present + in a result set row using their original + in-Python names. [ticket:2396] + + - [bug] Fixed bug in new "autoload_replace" flag + which would fail to preserve the primary + key constraint of the reflected table. + [ticket:2402] + + - [bug] Index will raise when arguments passed + cannot be interpreted as columns or expressions. + Will warn when Index is created + with no columns at all. [ticket:2380] + +- engine + - [feature] Added "no_parameters=True" execution + option for connections. If no parameters + are present, will pass the statement + as cursor.execute(statement), thereby invoking + the DBAPIs behavior when no parameter collection + is present; for psycopg2 and mysql-python, this + means not interpreting % signs in the string. + This only occurs with this option, and not + just if the param list is blank, as otherwise + this would produce inconsistent behavior + of SQL expressions that normally escape percent + signs (and while compiling, can't know ahead of + time if parameters will be present in + some cases). [ticket:2407] + + - [bug] Added execution_options() call to + MockConnection (i.e., that used with + strategy="mock") which acts as a pass through + for arguments. + + - [feature] Added pool_reset_on_return argument + to create_engine, allows control over + "connection return" behavior. Also added + new arguments 'rollback', 'commit', None + to pool.reset_on_return to allow more control + over connection return activity. [ticket:2378] + + - [feature] Added some decent context managers + to Engine, Connection: + + with engine.begin() as conn: + <work with conn in a transaction> + + and: + + with engine.connect() as conn: + <work with conn> + + Both close out the connection when done, + commit or rollback transaction with errors + on engine.begin(). + +- mysql + - [feature] Added support for the "isolation_level" + parameter to all MySQL dialects. Thanks + to mu_mind for the patch here. [ticket:2394] + +- oracle + - [feature] Added a new create_engine() flag + coerce_to_decimal=False, disables the precision + numeric handling which can add lots of overhead + by converting all numeric values to + Decimal. [ticket:2399] + + - [bug] Added missing compilation support for + LONG [ticket:2401] + +- examples + - [bug] Altered _params_from_query() function + in Beaker example to pull bindparams from the + fully compiled statement, as a quick means + to get everything including subqueries in the + columns clause, etc. + +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 |