]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
more fixes to schema constructor, test suites not conflicting with each other
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 26 Nov 2005 20:12:40 +0000 (20:12 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 26 Nov 2005 20:12:40 +0000 (20:12 +0000)
lib/sqlalchemy/schema.py
test/alltests.py
test/engines.py
test/query.py

index 27e09735cfa41e5962685663aff1589cc8e4f711..30a2bceed1be406796606f715feb9349999fcd07 100644 (file)
@@ -61,16 +61,18 @@ class TableSingleton(type):
         try:
             schema = kwargs.get('schema', None)
             autoload = kwargs.pop('autoload', False)
+            redefine = kwargs.pop('redefine', False)
+            mustexist = kwargs.pop('mustexist', False)
             key = _get_table_key(engine, name, schema)
             table = engine.tables[key]
             if len(args):
-                if kwargs.pop('redefine', False):
+                if redefine:
                     table.reload_values(*args)
                 else:
                     raise "Table '%s.%s' is already defined. specify 'redefine=True' to remap columns" % (schema, name)
             return table
         except KeyError:
-            if kwargs.pop('mustexist', False):
+            if mustexist:
                 raise "Table '%s.%s' not defined" % (schema, name)
             table = type.__call__(self, name, engine, *args, **kwargs)
             engine.tables[key] = table
@@ -123,7 +125,13 @@ class Table(SchemaItem):
         for c in self.columns:
             c.accept_visitor(visitor)
         return visitor.visit_table(self)
-
+    
+    def deregister(self):
+        """removes this table from it's engines table registry.  this does not
+        issue a SQL DROP statement."""
+        key = _get_table_key(self.engine, self.name, self.schema)
+        del self.engine.tables[key]
+        
     def toengine(self, engine, schema=None):
         """returns a singleton instance of this Table with a different engine"""
         try:
@@ -157,6 +165,8 @@ class Column(SchemaItem):
     engine = property(lambda s: s.table.engine)
     
     def _set_primary_key(self):
+        if self.primary_key:
+            return
         self.primary_key = True
         self.nullable = False
         self.table.primary_keys.append(self)
index e19863e4c60ee913c91ff2d341826743f7330a9f..314e0eb986f18aadaad138501b4036e8af498581 100644 (file)
@@ -5,6 +5,7 @@ testbase.echo = False
 
 def suite():
     modules_to_test = ('attributes', 'historyarray', 'pool', 'engines', 'query', 'types', 'mapper', 'objectstore', 'dependency', 'sequence', 'select')
+#    modules_to_test = ('engines', 'mapper')
     alltests = unittest.TestSuite()
     for module in map(__import__, modules_to_test):
         alltests.addTest(unittest.findTestCases(module, suiteClass=None))
index 0d1f708acbb9aa013e6ccc5838f327684137197f..b5a89b35c7fc173b1b83fb2b086abd6da1808a90 100644 (file)
@@ -14,7 +14,7 @@ import unittest, re
 class EngineTest(PersistTest):
     def testbasic(self):
         # really trip it up with a circular reference
-        users = Table('users', testbase.db,
+        users = Table('engine_users', testbase.db,
             Column('user_id', INT, primary_key = True),
             Column('user_name', VARCHAR(20), nullable = False),
             Column('test1', CHAR(5), nullable = False),
@@ -22,14 +22,14 @@ class EngineTest(PersistTest):
             Column('test3', TEXT),
             Column('test4', DECIMAL, nullable = False),
             Column('test5', TIMESTAMP),
-            Column('parent_user_id', INT, ForeignKey('users.user_id')),
+            Column('parent_user_id', INT, ForeignKey('engine_users.user_id')),
             Column('test6', DATETIME, nullable = False),
             Column('test7', CLOB),
             Column('test8', BLOB),
             
         )
 
-        addresses = Table('email_addresses', testbase.db,
+        addresses = Table('engine_email_addresses', testbase.db,
             Column('address_id', Integer, primary_key = True),
             Column('remote_user_id', Integer, ForeignKey(users.c.user_id)),
             Column('email_address', String(20)),
@@ -41,11 +41,12 @@ class EngineTest(PersistTest):
         addresses.create()
 
         # clear out table registry
-        testbase.db.tables.clear()
-
+        users.deregister()
+        addresses.deregister()
+        
         try:
-            users = Table('users', testbase.db, autoload = True)
-            addresses = Table('email_addresses', testbase.db, autoload = True)
+            users = Table('engine_users', testbase.db, autoload = True)
+            addresses = Table('engine_email_addresses', testbase.db, autoload = True)
         finally:
             addresses.drop()
             users.drop()
@@ -58,7 +59,7 @@ class EngineTest(PersistTest):
 
     def testmultipk(self):
         table = Table(
-            'multi', testbase.db, 
+            'engine_multi', testbase.db, 
             Column('multi_id', Integer, primary_key=True),
             Column('multi_rev', Integer, primary_key=True),
             Column('name', String(50), nullable=False),
@@ -66,10 +67,10 @@ class EngineTest(PersistTest):
         )
         table.create()
         # clear out table registry
-        testbase.db.tables.clear()
+        table.deregister()
 
         try:
-            table = Table('multi', testbase.db, autoload=True)
+            table = Table('engine_multi', testbase.db, autoload=True)
         finally:
             table.drop()
         
index 7f452cd2476bdce7e690908801685c7497a7c743..f35879546815390c995ee4fc933afb6d6433eaab 100644 (file)
@@ -4,7 +4,7 @@ import unittest, sys
 
 import sqlalchemy.databases.sqlite as sqllite
 
-db = sqllite.engine(':memory:', {}, echo = testbase.echo)
+db = testbase.db
 
 from sqlalchemy.sql import *
 from sqlalchemy.schema import *