]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- rollback everything before dropping tables. PG + jython is a rough combo
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 31 Mar 2009 17:00:02 +0000 (17:00 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 31 Mar 2009 17:00:02 +0000 (17:00 +0000)
- zxJDBC totally not returning rowcounts correctly
- some dict ordering for jython

lib/sqlalchemy/connectors/zxJDBC.py
lib/sqlalchemy/dialects/mysql/zxjdbc.py
lib/sqlalchemy/orm/__init__.py
test/orm/_base.py
test/orm/mapper.py
test/orm/query.py
test/testlib/engines.py
test/testlib/testing.py

index eb5c95b1607ccb540af3accd6e3c48a4b4cd8ae0..3992ba60715b958e41472f7d483a2539ba339188 100644 (file)
@@ -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'
index 7d6e3703de90325391d5cfa3e246ccbe194f4246..c7ebfc85a7fef2b9b780fa69a2632dd42c95f9c3 100644 (file)
@@ -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"
     
index 7e64bda7ab6ed07ce13d68aeeacb52fcb5696133..bf3e3cc86409120a60cb7739b3ac9ec4d72bebb4 100644 (file)
@@ -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()
 
index ae8cbd746e1b4cd8c1dc537dae78a008b8bbd356..0a6ab817912557bab40b48802f9e4b2ec1cd1e8b 100644 (file)
@@ -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):
index 166e210ba4edd068ffaae92558f6407539c6c06c..8192b195aed36798e498813eab9af0eecf647fe2 100644 (file)
@@ -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()
index a51d9823dc39e4a9caea780d64bf4d95e305023c..f79a3b19b4262047487ad0ec595cbc1e085c4fa5 100644 (file)
@@ -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,)
index e295e4fbadd6da48d54b1ece13ab53cae74074b0..44e6ad96a04cc502ea0cb6ac253af8bb6c00effc 100644 (file)
@@ -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:
index 89c08ac47dfb689e68b312da99ea6195ff730b99..982eb026d414720df986455d1ef1b32acd8d1159 100644 (file)
@@ -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