From b8a30a9b1068522b369ea99757aac18afed241b8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 31 Mar 2009 17:00:02 +0000 Subject: [PATCH] - rollback everything before dropping tables. PG + jython is a rough combo - zxJDBC totally not returning rowcounts correctly - some dict ordering for jython --- lib/sqlalchemy/connectors/zxJDBC.py | 5 +++-- lib/sqlalchemy/dialects/mysql/zxjdbc.py | 3 --- lib/sqlalchemy/orm/__init__.py | 9 ++++++-- test/orm/_base.py | 6 ++++-- test/orm/mapper.py | 28 ++++++++++++------------- test/orm/query.py | 7 +------ test/testlib/engines.py | 4 ++++ test/testlib/testing.py | 3 ++- 8 files changed, 35 insertions(+), 30 deletions(-) diff --git a/lib/sqlalchemy/connectors/zxJDBC.py b/lib/sqlalchemy/connectors/zxJDBC.py index eb5c95b160..3992ba6071 100644 --- a/lib/sqlalchemy/connectors/zxJDBC.py +++ b/lib/sqlalchemy/connectors/zxJDBC.py @@ -7,8 +7,9 @@ import urllib class ZxJDBCConnector(Connector): driver='zxjdbc' - supports_sane_rowcount = True - supports_sane_multi_rowcount = True + supports_sane_rowcount = False + supports_sane_multi_rowcount = False + supports_unicode_binds = True supports_unicode_statements = False default_paramstyle = 'qmark' diff --git a/lib/sqlalchemy/dialects/mysql/zxjdbc.py b/lib/sqlalchemy/dialects/mysql/zxjdbc.py index 7d6e3703de..c7ebfc85a7 100644 --- a/lib/sqlalchemy/dialects/mysql/zxjdbc.py +++ b/lib/sqlalchemy/dialects/mysql/zxjdbc.py @@ -14,9 +14,6 @@ class MySQL_jdbcExecutionContext(MySQLExecutionContext): class MySQL_jdbc(ZxJDBCConnector, MySQLDialect): execution_ctx_cls = MySQL_jdbcExecutionContext - supports_sane_rowcount = False - supports_sane_multi_rowcount = False - jdbc_db_name = 'mysql' jdbc_driver_name = "org.gjt.mm.mysql.Driver" diff --git a/lib/sqlalchemy/orm/__init__.py b/lib/sqlalchemy/orm/__init__.py index 7e64bda7ab..bf3e3cc864 100644 --- a/lib/sqlalchemy/orm/__init__.py +++ b/lib/sqlalchemy/orm/__init__.py @@ -850,8 +850,13 @@ def clear_mappers(): """ mapperlib._COMPILE_MUTEX.acquire() try: - for mapper in list(_mapper_registry): - mapper.dispose() + while _mapper_registry: + try: + # can't even reliably call list(weakdict) in jython + mapper, b = _mapper_registry.popitem() + mapper.dispose() + except KeyError: + pass finally: mapperlib._COMPILE_MUTEX.release() diff --git a/test/orm/_base.py b/test/orm/_base.py index ae8cbd746e..0a6ab81791 100644 --- a/test/orm/_base.py +++ b/test/orm/_base.py @@ -3,6 +3,7 @@ import inspect import sys import types from testlib import config, sa, testing +from testlib.engines import drop_all_tables from testlib.testing import resolve_artifact_names, adict from testlib.compat import _function_named @@ -173,7 +174,7 @@ class MappedTest(ORMTest): if self.run_define_tables == 'each': self.tables.clear() - self.metadata.drop_all() + drop_all_tables(self.metadata) self.metadata.clear() self.define_tables(self.metadata) self.metadata.create_all() @@ -213,7 +214,8 @@ class MappedTest(ORMTest): for cls in self.classes.values(): self.unregister_class(cls) ORMTest.tearDownAll(self) - self.metadata.drop_all() + + drop_all_tables(self.metadata) self.metadata.bind = None def define_tables(self, metadata): diff --git a/test/orm/mapper.py b/test/orm/mapper.py index 166e210ba4..8192b195ae 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -2,8 +2,8 @@ import testenv; testenv.configure_for_tests() from testlib import sa, testing -from testlib.sa import MetaData, Table, Column, Integer, String, ForeignKey, func -from testlib.sa.engine import default +from testlib.sa import MetaData, Table, Column, Integer, String, ForeignKey, func, engine, util +default = engine.default from testlib.sa.orm import mapper, relation, backref, create_session, class_mapper, compile_mappers, reconstructor, validates, aliased from testlib.sa.orm import defer, deferred, synonym, attributes, column_property, composite, relation, dynamic_loader, comparable_property from testlib.testing import eq_, AssertsCompiledSQL @@ -1448,12 +1448,12 @@ class DeferredTest(_fixtures.FixtureTest): @testing.resolve_artifact_names def test_group(self): """Deferred load with a group""" - mapper(Order, orders, properties={ - 'userident': deferred(orders.c.user_id, group='primary'), - 'addrident': deferred(orders.c.address_id, group='primary'), - 'description': deferred(orders.c.description, group='primary'), - 'opened': deferred(orders.c.isopen, group='primary') - }) + mapper(Order, orders, properties=util.OrderedDict([ + ('userident', deferred(orders.c.user_id, group='primary')), + ('addrident', deferred(orders.c.address_id, group='primary')), + ('description', deferred(orders.c.description, group='primary')), + ('opened', deferred(orders.c.isopen, group='primary')) + ])) sess = create_session() q = sess.query(Order).order_by(Order.id) @@ -1559,10 +1559,12 @@ class DeferredTest(_fixtures.FixtureTest): @testing.resolve_artifact_names def test_undefer_group(self): - mapper(Order, orders, properties={ - 'userident':deferred(orders.c.user_id, group='primary'), - 'description':deferred(orders.c.description, group='primary'), - 'opened':deferred(orders.c.isopen, group='primary')}) + mapper(Order, orders, properties=util.OrderedDict([ + ('userident',deferred(orders.c.user_id, group='primary')), + ('description',deferred(orders.c.description, group='primary')), + ('opened',deferred(orders.c.isopen, group='primary')) + ] + )) sess = create_session() q = sess.query(Order).order_by(Order.id) @@ -2451,7 +2453,5 @@ class MagicNamesTest(_base.MappedTest): mapper, M, maps, properties={ reserved: maps.c.state}) - - if __name__ == "__main__": testenv.main() diff --git a/test/orm/query.py b/test/orm/query.py index a51d9823dc..f79a3b19b4 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -104,13 +104,8 @@ class GetTest(QueryTest): pass s = users.select(users.c.id!=12).alias('users') m = mapper(SomeUser, s) - print s.primary_key - print m.primary_key assert s.primary_key == m.primary_key - row = s.select(use_labels=True).execute().fetchone() - print row[s.primary_key[0]] - sess = create_session() assert sess.query(SomeUser).get(7).name == 'jack' @@ -921,7 +916,7 @@ class AggregateTest(QueryTest): orders = sess.query(Order).filter(Order.id.in_([2, 3, 4])) self.assertEquals(orders.values(func.sum(Order.user_id * Order.address_id)).next(), (79,)) self.assertEquals(orders.value(func.sum(Order.user_id * Order.address_id)), 79) - + def test_apply(self): sess = create_session() assert sess.query(func.sum(Order.user_id * Order.address_id)).filter(Order.id.in_([2, 3, 4])).one() == (79,) diff --git a/test/testlib/engines.py b/test/testlib/engines.py index e295e4fbad..44e6ad96a0 100644 --- a/test/testlib/engines.py +++ b/test/testlib/engines.py @@ -38,6 +38,10 @@ class ConnectionKiller(object): testing_reaper = ConnectionKiller() +def drop_all_tables(metadata): + testing_reaper.rollback_all() + metadata.drop_all() + def assert_conns_closed(fn): def decorated(*args, **kw): try: diff --git a/test/testlib/testing.py b/test/testlib/testing.py index 89c08ac47d..982eb026d4 100644 --- a/test/testlib/testing.py +++ b/test/testlib/testing.py @@ -13,6 +13,7 @@ from cStringIO import StringIO import testlib.config as config from testlib.compat import _function_named +from testlib.engines import drop_all_tables # Delayed imports MetaData = None @@ -849,7 +850,7 @@ class ORMTest(TestBase, AssertsExecutionResults): from sqlalchemy.orm import clear_mappers clear_mappers() - _otest_metadata.drop_all() + drop_all_tables(_otest_metadata) def tearDown(self): global Session -- 2.47.3