schema=schema,
comment=r"""the test % ' " \ table comment""")
+ if testing.requires.cross_schema_fk_reflection.enabled:
+ if schema is None:
+ Table(
+ 'local_table', metadata,
+ Column('id', sa.Integer, primary_key=True),
+ Column('data', sa.String(20)),
+ Column(
+ 'remote_id',
+ ForeignKey(
+ '%s.remote_table_2.id' %
+ testing.config.test_schema)
+ ),
+ test_needs_fk=True,
+ schema=config.db.dialect.default_schema_name
+ )
+ else:
+ Table(
+ 'remote_table', metadata,
+ Column('id', sa.Integer, primary_key=True),
+ Column(
+ 'local_id',
+ ForeignKey(
+ '%s.local_table.id' %
+ config.db.dialect.default_schema_name)
+ ),
+ Column('data', sa.String(20)),
+ schema=schema,
+ test_needs_fk=True,
+ )
+ Table(
+ 'remote_table_2', metadata,
+ Column('id', sa.Integer, primary_key=True),
+ Column('data', sa.String(20)),
+ schema=schema,
+ test_needs_fk=True,
+ )
+
if testing.requires.index_reflection.enabled:
cls.define_index(metadata, users)
def _test_get_table_names(self, schema=None, table_type='table',
order_by=None):
_ignore_tables = [
- 'comment_test', 'noncol_idx_test_pk', 'noncol_idx_test_nopk'
+ 'comment_test', 'noncol_idx_test_pk', 'noncol_idx_test_nopk',
+ 'local_table', 'remote_table', 'remote_table_2'
]
meta = self.metadata
users, addresses, dingalings = self.tables.users, \
def test_get_foreign_keys_with_schema(self):
self._test_get_foreign_keys(schema=testing.config.test_schema)
+ @testing.requires.cross_schema_fk_reflection
+ @testing.requires.schemas
+ def test_get_inter_schema_foreign_keys(self):
+ local_table, remote_table, remote_table_2 = self.tables(
+ '%s.local_table' % testing.db.dialect.default_schema_name,
+ '%s.remote_table' % testing.config.test_schema,
+ '%s.remote_table_2' % testing.config.test_schema
+ )
+
+ insp = inspect(config.db)
+
+ local_fkeys = insp.get_foreign_keys(local_table.name)
+ eq_(len(local_fkeys), 1)
+
+ fkey1 = local_fkeys[0]
+ eq_(fkey1['referred_schema'], testing.config.test_schema)
+ eq_(fkey1['referred_table'], remote_table_2.name)
+ eq_(fkey1['referred_columns'], ['id', ])
+ eq_(fkey1['constrained_columns'], ['remote_id'])
+
+ remote_fkeys = insp.get_foreign_keys(
+ remote_table.name, schema=testing.config.test_schema)
+ eq_(len(remote_fkeys), 1)
+
+ fkey2 = remote_fkeys[0]
+
+ assert fkey2['referred_schema'] in (
+ None,
+ testing.db.dialect.default_schema_name
+ )
+ eq_(fkey2['referred_table'], local_table.name)
+ eq_(fkey2['referred_columns'], ['id', ])
+ eq_(fkey2['constrained_columns'], ['local_id'])
+
+
@testing.requires.foreign_key_constraint_option_reflection_ondelete
def test_get_foreign_key_options_ondelete(self):
self._test_get_foreign_key_options(ondelete="CASCADE")
@testing.requires.schemas
@testing.requires.cross_schema_fk_reflection
def test_has_schema(self):
+ if not hasattr(testing.db.dialect, "has_schema"):
+ testing.config.skip_test(
+ "dialect %s doesn't have a has_schema method" %
+ testing.db.dialect.name)
eq_(testing.db.dialect.has_schema(testing.db,
testing.config.test_schema), True)
eq_(testing.db.dialect.has_schema(testing.db,
@testing.requires.schemas
@testing.requires.cross_schema_fk_reflection
+ @testing.requires.implicit_default_schema
@testing.provide_metadata
def test_blank_schema_arg(self):
metadata = self.metadata
Table('some_table', metadata,
Column('id', Integer, primary_key=True),
Column('sid', Integer, sa.ForeignKey('some_other_table.id')),
- schema=testing.config.test_schema
+ schema=testing.config.test_schema,
+ test_needs_fk=True
)
Table('some_other_table', metadata,
Column('id', Integer, primary_key=True),
- schema=None
+ schema=None,
+ test_needs_fk=True
)
metadata.create_all()
with testing.db.connect() as conn:
@testing.requires.schemas
@testing.requires.cross_schema_fk_reflection
+ @testing.requires.implicit_default_schema
@testing.provide_metadata
def test_reflect_all_schemas_default_overlap(self):
t1 = Table('t', self.metadata,