diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-12-04 14:16:42 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-12-04 14:16:42 -0500 |
| commit | 81945d7a0c60cc898541189d52564df2010871c1 (patch) | |
| tree | c39ec598919f1c95d3126d67e19562de9309fef0 /test/engine/test_reflection.py | |
| parent | 133a0b2460f4c71692795ebbe52f9e521bb8782c (diff) | |
| download | sqlalchemy-81945d7a0c60cc898541189d52564df2010871c1.tar.gz | |
- [feature] The "extend_existing" flag on Table
now allows for the reflection process to take
effect for a Table object that's already been
defined; when autoload=True and extend_existing=True
are both set, the full set of columns will be
reflected from the Table which will then
*overwrite* those columns already present,
rather than no activity occurring. Columns that
are present directly in the autoload run
will be used as always, however.
[ticket:1410]
Diffstat (limited to 'test/engine/test_reflection.py')
| -rw-r--r-- | test/engine/test_reflection.py | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index 4beeab14d..4e80e71e4 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -3,7 +3,7 @@ import StringIO, unicodedata from sqlalchemy import types as sql_types from sqlalchemy import schema, events, event from sqlalchemy.engine.reflection import Inspector -from sqlalchemy import MetaData, Integer +from sqlalchemy import MetaData, Integer, String from test.lib.schema import Table, Column import sqlalchemy as sa from test.lib import ComparesTables, \ @@ -118,6 +118,45 @@ class ReflectionTest(fixtures.TestBase, ComparesTables): for c in ('a', 'c', 'd'): assert c not in foo.c + @testing.provide_metadata + def test_extend_existing(self): + meta = self.metadata + + t1 = Table('t', meta, + Column('x', Integer), + Column('y', Integer), + Column('z', Integer, server_default="5"), + ) + meta.create_all() + + m2 = MetaData() + old_z = Column('z', String) + old_y = Column('y', String) + old_q = Column('q', Integer) + t2 = Table('t', m2, old_z, old_q) + t2 = Table('t', m2, old_y, + extend_existing=True, + autoload=True, + autoload_with=testing.db) + eq_( + set(t2.columns.keys()), + set(['x', 'y', 'z', 'q']) + ) + assert t2.c.z is not old_z + assert t2.c.y is old_y + assert t2.c.z.type._type_affinity is Integer + assert t2.c.q is old_q + + m3 = MetaData() + t3 = Table('t', m3, Column('z', Integer)) + t3 = Table('t', m3, extend_existing=False, + autoload=True, + autoload_with=testing.db) + eq_( + set(t3.columns.keys()), + set(['z']) + ) + @testing.emits_warning(r".*omitted columns") @testing.provide_metadata def test_include_columns_indexes(self): |
