From: Mike Bayer Date: Sat, 26 Nov 2005 20:12:40 +0000 (+0000) Subject: more fixes to schema constructor, test suites not conflicting with each other X-Git-Tag: rel_0_1_0~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc2ca671a3712477ce6dd795e0b2f770ab5e0c95;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git more fixes to schema constructor, test suites not conflicting with each other --- diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 27e09735cf..30a2bceed1 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -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) diff --git a/test/alltests.py b/test/alltests.py index e19863e4c6..314e0eb986 100644 --- a/test/alltests.py +++ b/test/alltests.py @@ -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)) diff --git a/test/engines.py b/test/engines.py index 0d1f708acb..b5a89b35c7 100644 --- a/test/engines.py +++ b/test/engines.py @@ -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() diff --git a/test/query.py b/test/query.py index 7f452cd247..f358795468 100644 --- a/test/query.py +++ b/test/query.py @@ -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 *