Thread: [Sqlalchemy-commits] sqlalchemy: Added TypeDecorator documentation to the Sphinx page...
Brought to you by:
zzzeek
From: <co...@sq...> - 2012-03-14 04:08:28
|
details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/9460a9493fd8 changeset: 8145:9460a9493fd8 user: Brad Allen <bra...@gm...> date: Mon Mar 14 17:55:47 2011 -0400 description: Added TypeDecorator documentation to the Sphinx page, as well as several docstrings to TypeDecorator methods. Work in progress but committing for review so far... Subject: sqlalchemy: Docstring for TypeDecorator.__init__ details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/2d2750601ba4 changeset: 8146:2d2750601ba4 user: Brad Allen <bra...@gm...> date: Tue Mar 15 18:13:53 2011 -0400 description: Docstring for TypeDecorator.__init__ Subject: sqlalchemy: Slight sanity/clarity improvement to the way VisitableType binds the details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/d317a35e721a changeset: 8147:d317a35e721a user: Brad Allen <bra...@gm...> date: Wed Mar 16 22:55:10 2011 -0400 description: Slight sanity/clarity improvement to the way VisitableType binds the _compiler_dispatch. This code change has no functional or performance implications, but it helps make the docstring easier to write. Mostly this commit is about docstring improvements and comments to explain optimizations. Subject: sqlalchemy: Tiny wording fix in a comment details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/804e97b5d3b0 changeset: 8148:804e97b5d3b0 user: Brad Allen <bra...@gm...> date: Wed Mar 16 23:01:36 2011 -0400 description: Tiny wording fix in a comment Subject: sqlalchemy: add most of Brad Allen's doc updates, [ticket:2434] details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/be872b3d52b7 changeset: 8149:be872b3d52b7 user: Mike Bayer <mi...@zz...> date: Tue Mar 13 21:07:09 2012 -0700 description: add most of Brad Allen's doc updates, [ticket:2434] diffstat: .hgignore | 3 + .hgtags | 8 + CHANGES | 4200 +++--- CHANGES_PRE_05 | 4092 ------ CHANGES_PRE_06 | 6343 ++++++++++ LICENSE | 2 +- README | 72 - README.rst | 132 + README.unittests | 11 +- doc/build/Makefile | 17 +- doc/build/builder/builders.py | 79 +- doc/build/conf.py | 27 +- doc/build/contents.rst | 21 + doc/build/copyright.rst | 2 +- doc/build/core/connections.rst | 82 +- doc/build/core/engines.rst | 148 +- doc/build/core/event.rst | 2 + doc/build/core/expression_api.rst | 61 +- doc/build/core/index.rst | 9 +- doc/build/core/internals.rst | 46 + doc/build/core/pooling.rst | 156 +- doc/build/core/schema.rst | 139 +- doc/build/core/tutorial.rst | 646 +- doc/build/core/types.rst | 84 +- doc/build/dialects/drizzle.rst | 2 + doc/build/dialects/index.rst | 1 + doc/build/dialects/mssql.rst | 4 + doc/build/dialects/mysql.rst | 4 + doc/build/dialects/oracle.rst | 4 + doc/build/dialects/postgresql.rst | 4 +- doc/build/dialects/sqlite.rst | 8 + doc/build/index.rst | 126 +- doc/build/intro.rst | 147 +- doc/build/orm/collections.rst | 357 +- doc/build/orm/examples.rst | 23 +- doc/build/orm/extensions/associationproxy.rst | 606 +- doc/build/orm/extensions/declarative.rst | 5 + doc/build/orm/extensions/orderinglist.rst | 9 + doc/build/orm/index.rst | 9 +- doc/build/orm/inheritance.rst | 157 +- doc/build/orm/internals.rst | 45 + doc/build/orm/loading.rst | 222 +- doc/build/orm/mapper_config.rst | 1147 +- doc/build/orm/query.rst | 2 +- doc/build/orm/relationships.rst | 1274 +- doc/build/orm/session.rst | 675 +- doc/build/orm/tutorial.rst | 1459 +- doc/build/requirements.txt | 1 + doc/build/sqla_arch_small.png | 0 doc/build/static/docs.css | 485 +- doc/build/static/init.js | 8 +- doc/build/templates/genindex.mako | 14 +- doc/build/templates/layout.mako | 228 +- doc/build/templates/page.mako | 2 +- doc/build/templates/rtd_layout.mako | 164 + doc/build/templates/search.mako | 18 +- doc/build/templates/site_base.mako | 31 - doc/build/templates/static_base.mako | 11 +- doc/build/testdocs.py | 16 +- doc/build/texinputs/Makefile | 64 + examples/adjacency_list/adjacency_list.py | 109 +- examples/beaker_caching/caching_query.py | 16 +- examples/custom_attributes/custom_management.py | 3 + examples/declarative_reflection/__init__.py | 46 + examples/declarative_reflection/declarative_reflection.py | 98 + 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 | 22 +- examples/versioning/__init__.py | 35 +- examples/versioning/_lib.py | 96 + examples/versioning/history_meta.py | 34 +- examples/versioning/test_versioning.py | 25 +- examples/vertical/dictlike-polymorphic.py | 17 +- ez_setup.py | 20 +- lib/sqlalchemy/__init__.py | 8 +- lib/sqlalchemy/cextension/processors.c | 89 +- lib/sqlalchemy/cextension/resultproxy.c | 10 +- lib/sqlalchemy/connectors/__init__.py | 2 +- lib/sqlalchemy/connectors/mxodbc.py | 2 +- lib/sqlalchemy/connectors/mysqldb.py | 2 +- lib/sqlalchemy/connectors/pyodbc.py | 41 +- lib/sqlalchemy/connectors/zxJDBC.py | 2 +- lib/sqlalchemy/databases/__init__.py | 2 +- lib/sqlalchemy/dialects/__init__.py | 2 +- lib/sqlalchemy/dialects/drizzle/base.py | 4 +- lib/sqlalchemy/dialects/drizzle/mysqldb.py | 6 +- lib/sqlalchemy/dialects/firebird/__init__.py | 2 +- lib/sqlalchemy/dialects/firebird/base.py | 10 +- lib/sqlalchemy/dialects/firebird/kinterbasdb.py | 2 +- lib/sqlalchemy/dialects/informix/__init__.py | 2 +- lib/sqlalchemy/dialects/informix/base.py | 125 +- lib/sqlalchemy/dialects/informix/informixdb.py | 2 +- lib/sqlalchemy/dialects/maxdb/__init__.py | 2 +- lib/sqlalchemy/dialects/maxdb/base.py | 4 +- lib/sqlalchemy/dialects/maxdb/sapdb.py | 2 +- lib/sqlalchemy/dialects/mssql/__init__.py | 2 +- lib/sqlalchemy/dialects/mssql/adodbapi.py | 2 +- lib/sqlalchemy/dialects/mssql/base.py | 147 +- lib/sqlalchemy/dialects/mssql/information_schema.py | 2 +- lib/sqlalchemy/dialects/mssql/mxodbc.py | 2 +- lib/sqlalchemy/dialects/mssql/pymssql.py | 3 +- lib/sqlalchemy/dialects/mssql/pyodbc.py | 24 +- lib/sqlalchemy/dialects/mssql/zxjdbc.py | 2 +- lib/sqlalchemy/dialects/mysql/__init__.py | 2 +- lib/sqlalchemy/dialects/mysql/base.py | 260 +- lib/sqlalchemy/dialects/mysql/mysqlconnector.py | 2 +- lib/sqlalchemy/dialects/mysql/mysqldb.py | 40 +- lib/sqlalchemy/dialects/mysql/oursql.py | 20 +- lib/sqlalchemy/dialects/mysql/pymysql.py | 3 +- 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 | 93 +- lib/sqlalchemy/dialects/oracle/cx_oracle.py | 56 +- lib/sqlalchemy/dialects/oracle/zxjdbc.py | 5 +- lib/sqlalchemy/dialects/postgres.py | 2 +- lib/sqlalchemy/dialects/postgresql/__init__.py | 2 +- lib/sqlalchemy/dialects/postgresql/base.py | 428 +- lib/sqlalchemy/dialects/postgresql/pg8000.py | 11 +- lib/sqlalchemy/dialects/postgresql/psycopg2.py | 163 +- lib/sqlalchemy/dialects/postgresql/pypostgresql.py | 4 +- lib/sqlalchemy/dialects/postgresql/zxjdbc.py | 21 +- lib/sqlalchemy/dialects/sqlite/__init__.py | 6 +- lib/sqlalchemy/dialects/sqlite/base.py | 188 +- lib/sqlalchemy/dialects/sqlite/pysqlite.py | 145 +- lib/sqlalchemy/dialects/sybase/__init__.py | 2 +- lib/sqlalchemy/dialects/sybase/base.py | 2 +- lib/sqlalchemy/dialects/sybase/mxodbc.py | 2 +- lib/sqlalchemy/dialects/sybase/pyodbc.py | 2 +- lib/sqlalchemy/engine/__init__.py | 134 +- lib/sqlalchemy/engine/base.py | 816 +- lib/sqlalchemy/engine/ddl.py | 30 +- lib/sqlalchemy/engine/default.py | 63 +- lib/sqlalchemy/engine/reflection.py | 64 +- lib/sqlalchemy/engine/strategies.py | 28 +- lib/sqlalchemy/engine/threadlocal.py | 6 +- lib/sqlalchemy/engine/url.py | 24 +- lib/sqlalchemy/event.py | 60 +- lib/sqlalchemy/events.py | 110 +- lib/sqlalchemy/exc.py | 136 +- lib/sqlalchemy/ext/__init__.py | 2 +- lib/sqlalchemy/ext/associationproxy.py | 163 +- lib/sqlalchemy/ext/compiler.py | 177 +- lib/sqlalchemy/ext/declarative.py | 576 +- lib/sqlalchemy/ext/horizontal_shard.py | 107 +- lib/sqlalchemy/ext/hybrid.py | 262 +- lib/sqlalchemy/ext/mutable.py | 113 +- lib/sqlalchemy/ext/orderinglist.py | 13 +- lib/sqlalchemy/ext/serializer.py | 2 +- lib/sqlalchemy/ext/sqlsoup.py | 24 +- lib/sqlalchemy/interfaces.py | 18 +- lib/sqlalchemy/log.py | 2 +- lib/sqlalchemy/orm/__init__.py | 886 +- lib/sqlalchemy/orm/attributes.py | 254 +- lib/sqlalchemy/orm/collections.py | 92 +- lib/sqlalchemy/orm/dependency.py | 41 +- lib/sqlalchemy/orm/deprecated_interfaces.py | 22 +- lib/sqlalchemy/orm/descriptor_props.py | 57 +- lib/sqlalchemy/orm/dynamic.py | 14 +- lib/sqlalchemy/orm/evaluator.py | 2 +- lib/sqlalchemy/orm/events.py | 358 +- lib/sqlalchemy/orm/exc.py | 43 +- lib/sqlalchemy/orm/identity.py | 10 +- lib/sqlalchemy/orm/instrumentation.py | 33 +- lib/sqlalchemy/orm/interfaces.py | 221 +- lib/sqlalchemy/orm/mapper.py | 1339 +- lib/sqlalchemy/orm/persistence.py | 777 + lib/sqlalchemy/orm/properties.py | 897 +- lib/sqlalchemy/orm/query.py | 1146 +- lib/sqlalchemy/orm/scoping.py | 26 +- lib/sqlalchemy/orm/session.py | 318 +- lib/sqlalchemy/orm/shard.py | 2 +- lib/sqlalchemy/orm/state.py | 53 +- lib/sqlalchemy/orm/strategies.py | 618 +- lib/sqlalchemy/orm/sync.py | 7 +- lib/sqlalchemy/orm/unitofwork.py | 26 +- lib/sqlalchemy/orm/util.py | 233 +- lib/sqlalchemy/pool.py | 125 +- lib/sqlalchemy/processors.py | 60 +- lib/sqlalchemy/schema.py | 775 +- lib/sqlalchemy/sql/__init__.py | 5 +- lib/sqlalchemy/sql/compiler.py | 470 +- lib/sqlalchemy/sql/expression.py | 2116 ++- lib/sqlalchemy/sql/functions.py | 28 +- lib/sqlalchemy/sql/operators.py | 442 +- lib/sqlalchemy/sql/util.py | 122 +- lib/sqlalchemy/sql/visitors.py | 124 +- lib/sqlalchemy/types.py | 710 +- lib/sqlalchemy/util/__init__.py | 10 +- lib/sqlalchemy/util/_collections.py | 18 +- lib/sqlalchemy/util/compat.py | 51 +- lib/sqlalchemy/util/deprecations.py | 2 +- lib/sqlalchemy/util/langhelpers.py | 211 +- lib/sqlalchemy/util/queue.py | 2 +- lib/sqlalchemy/util/topological.py | 19 +- setup.py | 350 +- test/aaa_profiling/test_compiler.py | 8 +- test/aaa_profiling/test_memusage.py | 41 +- test/aaa_profiling/test_orm.py | 133 +- test/aaa_profiling/test_pool.py | 17 +- test/aaa_profiling/test_resultset.py | 33 +- test/aaa_profiling/test_zoomark.py | 96 +- test/aaa_profiling/test_zoomark_orm.py | 33 +- test/base/test_dependency.py | 36 +- test/base/test_events.py | 230 +- test/base/test_except.py | 35 +- test/base/test_utils.py | 144 +- test/bootstrap/config.py | 10 +- test/bootstrap/noseplugin.py | 81 +- test/dialect/test_access.py | 2 +- test/dialect/test_firebird.py | 13 +- test/dialect/test_informix.py | 2 +- test/dialect/test_maxdb.py | 4 +- test/dialect/test_mssql.py | 378 +- test/dialect/test_mxodbc.py | 5 +- test/dialect/test_mysql.py | 104 +- test/dialect/test_oracle.py | 309 +- test/dialect/test_postgresql.py | 855 +- test/dialect/test_pyodbc.py | 17 + test/dialect/test_sqlite.py | 149 +- test/dialect/test_sybase.py | 2 +- test/engine/_base.py | 167 - test/engine/test_bind.py | 4 +- test/engine/test_ddlevents.py | 67 +- test/engine/test_execute.py | 468 +- test/engine/test_parseconnect.py | 88 +- test/engine/test_pool.py | 127 +- test/engine/test_processors.py | 60 + test/engine/test_reconnect.py | 49 +- test/engine/test_reflection.py | 1236 +- test/engine/test_transaction.py | 161 +- test/ex/test_examples.py | 2 +- test/ext/test_associationproxy.py | 179 +- test/ext/test_compiler.py | 57 +- test/ext/test_declarative.py | 518 +- test/ext/test_horizontal_shard.py | 18 +- test/ext/test_hybrid.py | 88 +- test/ext/test_mutable.py | 257 +- test/ext/test_orderinglist.py | 2 +- test/ext/test_serializer.py | 10 +- test/ext/test_sqlsoup.py | 12 +- test/lib/__init__.py | 15 +- test/lib/assertsql.py | 2 + test/lib/engines.py | 203 +- test/lib/fixtures.py | 337 + test/lib/pickleable.py | 34 +- test/lib/requires.py | 111 +- test/lib/testing.py | 130 +- test/lib/util.py | 5 +- test/orm/_base.py | 212 - test/orm/_fixtures.py | 474 +- test/orm/inheritance/_poly_fixtures.py | 299 + test/orm/inheritance/test_abc_inheritance.py | 4 +- test/orm/inheritance/test_abc_polymorphic.py | 7 +- test/orm/inheritance/test_assorted_poly.py | 1515 ++ test/orm/inheritance/test_basic.py | 658 +- test/orm/inheritance/test_concrete.py | 66 +- test/orm/inheritance/test_magazine.py | 8 +- test/orm/inheritance/test_manytomany.py | 8 +- test/orm/inheritance/test_poly_linked_list.py | 4 +- test/orm/inheritance/test_poly_persistence.py | 347 + test/orm/inheritance/test_polymorph.py | 289 - test/orm/inheritance/test_polymorph2.py | 1123 - test/orm/inheritance/test_polymorphic_rel.py | 1369 ++ test/orm/inheritance/test_productspec.py | 5 +- test/orm/inheritance/test_query.py | 1558 -- test/orm/inheritance/test_relationship.py | 877 + test/orm/inheritance/test_selects.py | 7 +- test/orm/inheritance/test_single.py | 145 +- test/orm/test_association.py | 36 +- test/orm/test_assorted_eager.py | 204 +- test/orm/test_attributes.py | 1200 +- test/orm/test_backref_mutations.py | 277 +- test/orm/test_bind.py | 15 +- test/orm/test_cascade.py | 778 +- test/orm/test_collection.py | 54 +- test/orm/test_compile.py | 5 +- test/orm/test_composites.py | 362 +- test/orm/test_cycles.py | 209 +- test/orm/test_default_strategies.py | 403 + test/orm/test_defaults.py | 22 +- test/orm/test_deprecations.py | 112 +- test/orm/test_descriptor.py | 4 +- test/orm/test_dynamic.py | 176 +- test/orm/test_eager_relations.py | 749 +- test/orm/test_evaluator.py | 21 +- test/orm/test_events.py | 223 +- test/orm/test_expire.py | 294 +- test/orm/test_extendedattr.py | 8 +- test/orm/test_froms.py | 679 +- test/orm/test_generative.py | 122 +- test/orm/test_hasparent.py | 205 + test/orm/test_immediate_load.py | 12 +- test/orm/test_instrumentation.py | 94 +- test/orm/test_joins.py | 551 +- test/orm/test_lazy_relations.py | 262 +- test/orm/test_legacy_mutable.py | 60 +- test/orm/test_load_on_fks.py | 27 +- test/orm/test_manytomany.py | 104 +- test/orm/test_mapper.py | 975 +- test/orm/test_merge.py | 366 +- test/orm/test_naturalpks.py | 162 +- test/orm/test_onetoone.py | 15 +- test/orm/test_pickled.py | 330 +- test/orm/test_query.py | 1363 +- test/orm/test_relationships.py | 773 +- test/orm/test_scoping.py | 16 +- test/orm/test_selectable.py | 19 +- test/orm/test_session.py | 796 +- test/orm/test_subquery_relations.py | 430 +- test/orm/test_sync.py | 223 + test/orm/test_transaction.py | 504 +- test/orm/test_unitofwork.py | 668 +- test/orm/test_unitofworkv2.py | 136 +- test/orm/test_update_delete.py | 544 + test/orm/test_utils.py | 20 +- test/orm/test_versioning.py | 140 +- test/perf/sessions.py | 8 +- test/sql/_base.py | 4 - test/sql/test_case_statement.py | 2 +- test/sql/test_compiler.py | 483 +- test/sql/test_constraints.py | 51 +- test/sql/test_defaults.py | 320 +- test/sql/test_functions.py | 15 +- test/sql/test_generative.py | 121 +- test/sql/test_labels.py | 382 +- test/sql/test_metadata.py | 767 +- test/sql/test_query.py | 325 +- test/sql/test_quote.py | 27 +- test/sql/test_returning.py | 43 +- test/sql/test_rowcount.py | 2 +- test/sql/test_selectable.py | 374 +- test/sql/test_types.py | 350 +- test/sql/test_unicode.py | 7 +- test/sql/test_update.py | 320 + 343 files changed, 53833 insertions(+), 23791 deletions(-) diffs (truncated from 113692 to 300 lines): diff -r 1b6f9449b5cf -r be872b3d52b7 .hgignore --- a/.hgignore Mon Mar 14 00:43:08 2011 -0400 +++ b/.hgignore Tue Mar 13 21:07:09 2012 -0700 @@ -1,8 +1,11 @@ syntax:regexp ^build/ +^dist/ ^doc/build/output .pyc$ .orig$ +.class$ +.so$ .egg-info .*,cover .un~ diff -r 1b6f9449b5cf -r be872b3d52b7 .hgtags --- a/.hgtags Mon Mar 14 00:43:08 2011 -0400 +++ b/.hgtags Tue Mar 13 21:07:09 2012 -0700 @@ -78,3 +78,11 @@ ff12fe7cac947ce9e28be4e8b4473df2c0adaa04 rel_0_6_5 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 1b6f9449b5cf -r be872b3d52b7 CHANGES --- a/CHANGES Mon Mar 14 00:43:08 2011 -0400 +++ b/CHANGES Tue Mar 13 21:07:09 2012 -0700 @@ -3,8 +3,1824 @@ ======= CHANGES ======= +0.7.6 +===== +- orm + - [bug] Fixed event registration bug + which would primarily show up as + events not being registered with + sessionmaker() instances created + after the event was associated + with the Session class. [ticket:2424] + + - [bug] Fixed bug whereby a primaryjoin + condition with a "literal" in it would + raise an error on compile with certain + kinds of deeply nested expressions + which also needed to render the same + bound parameter name more than once. + [ticket:2425] + + - [feature] Added "no_autoflush" context + manager to Session, used with with: + will temporarily disable autoflush. + + - [feature] Added cte() method to Query, + invokes common table expression support + from the Core (see below). [ticket:1859] + + - [bug] Removed the check for number of + rows affected when doing a multi-delete + against mapped objects. If an ON DELETE + CASCADE exists between two rows, we can't + get an accurate rowcount from the DBAPI; + this particular count is not supported + on most DBAPIs in any case, MySQLdb + is the notable case where it is. + [ticket:2403] + + - [bug] Fixed bug whereby objects using + attribute_mapped_collection or + column_mapped_collection could not be + pickled. [ticket:2409] + + - [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] + + - [bug] Fixed bug whereby SQL adaption mechanics + would fail in a very nested scenario involving + joined-inheritance, joinedload(), limit(), and a + derived function in the columns clause. + [ticket:2419] + + - [bug] Fixed the repr() for CascadeOptions to + include refresh-expire. Also reworked + CascadeOptions to be a <frozenset>. + [ticket:2417] + + - [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] Fixed memory leak in core which would + occur when C extensions were used with + particular types of result fetches, + in particular when orm query.count() + were called. [ticket:2427] + + - [feature] Added support for SQL standard + common table expressions (CTE), allowing + SELECT objects as the CTE source (DML + not yet supported). This is invoked via + the cte() method on any select() construct. + [ticket:1859] + + - [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 warning is emitted when a not-present + column is stated in the values() clause + of an insert() or update() construct. + Will move to an exception in 0.8. + [ticket:2413] + + - [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(). + +- sqlite + - [bug] Fixed bug in C extensions whereby + string format would not be applied to a + Numeric value returned as integer; this + affected primarily SQLite which does + not maintain numeric scale settings. + [ticket:2432] + +- mssql + - [feature] Added support for MSSQL INSERT, + UPDATE, and DELETE table hints, using + new with_hint() method on UpdateBase. + [ticket:2430] + +- 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(). + |