summaryrefslogtreecommitdiff
path: root/test/engine/test_reflection.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-12-04 14:16:42 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2011-12-04 14:16:42 -0500
commit81945d7a0c60cc898541189d52564df2010871c1 (patch)
treec39ec598919f1c95d3126d67e19562de9309fef0 /test/engine/test_reflection.py
parent133a0b2460f4c71692795ebbe52f9e521bb8782c (diff)
downloadsqlalchemy-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.py41
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):