diff options
| author | Jason Kirtland <jek@discorporate.us> | 2007-07-31 00:19:23 +0000 |
|---|---|---|
| committer | Jason Kirtland <jek@discorporate.us> | 2007-07-31 00:19:23 +0000 |
| commit | 04e8a839b4bc6a612b88ff793755865591b48ac4 (patch) | |
| tree | f6993291f389525ad3b0fed6e1d370a8c66933a3 /test/engine | |
| parent | a7e81eda731ddf11994ea77ac556168388c9285b (diff) | |
| download | sqlalchemy-04e8a839b4bc6a612b88ff793755865591b48ac4.tar.gz | |
MetaData can now reflect() all tables in the database en-masse thanks to table_names().
table_names changed to accept an explicit connection
ThreadLocalMetaData constructor now takes no arguments. If case_sensitive is needed in a multi-bind context, move it to Table or subclass TLMD to force it.
Banished **kwargs from MetaData
Lots of class doc and docstring improvements around MetaData and TLMD.
Some engine->bind internal naming updates + reorg in schema.
MySQL table_names now return Unicode. (Also, a unicode reflect() unit test is needed.)
Diffstat (limited to 'test/engine')
| -rw-r--r-- | test/engine/reflection.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/test/engine/reflection.py b/test/engine/reflection.py index 9466b2a28..9ee21f799 100644 --- a/test/engine/reflection.py +++ b/test/engine/reflection.py @@ -546,6 +546,72 @@ class ReflectionTest(PersistTest): finally: meta.drop_all() + def test_reflect_all(self): + existing = testbase.db.table_names() + + names = ['rt_%s' % name for name in ('a','b','c','d','e')] + nameset = set(names) + for name in names: + # be sure our starting environment is sane + self.assert_(name not in existing) + self.assert_('rt_f' not in existing) + + baseline = MetaData(testbase.db) + for name in names: + Table(name, baseline, Column('id', Integer, primary_key=True)) + baseline.create_all() + + try: + m1 = MetaData(testbase.db) + self.assert_(not m1.tables) + m1.reflect() + self.assert_(nameset.issubset(set(m1.tables.keys()))) + + m2 = MetaData() + m2.reflect(testbase.db, only=['rt_a', 'rt_b']) + self.assert_(set(m2.tables.keys()) == set(['rt_a', 'rt_b'])) + + m3 = MetaData() + c = testbase.db.connect() + m3.reflect(bind=c, only=lambda name, meta: name == 'rt_c') + self.assert_(set(m3.tables.keys()) == set(['rt_c'])) + + m4 = MetaData(testbase.db) + try: + m4.reflect(only=['rt_a', 'rt_f']) + self.assert_(False) + except exceptions.InvalidRequestError, e: + self.assert_(e.args[0].endswith('(rt_f)')) + + m5 = MetaData(testbase.db) + m5.reflect(only=[]) + self.assert_(not m5.tables) + + m6 = MetaData(testbase.db) + m6.reflect(only=lambda n, m: False) + self.assert_(not m6.tables) + + m7 = MetaData(testbase.db, reflect=True) + self.assert_(nameset.issubset(set(m7.tables.keys()))) + + try: + m8 = MetaData(reflect=True) + self.assert_(False) + except exceptions.ArgumentError, e: + self.assert_( + e.args[0] == + "A bind must be supplied in conjunction with reflect=True") + finally: + baseline.drop_all() + + if existing: + print "Other tables present in database, skipping some checks." + else: + m9 = MetaData(testbase.db) + m9.reflect() + self.assert_(not m9.tables) + + class CreateDropTest(PersistTest): def setUpAll(self): global metadata, users |
