diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-22 06:21:58 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-22 06:21:58 +0000 |
commit | 946984d812dcade87a6cbefbb896e4a17af8170e (patch) | |
tree | df8794e80f557baedac9fbdb5720f12b6e470c2a /lib/sqlalchemy/databases | |
parent | f65fdce01daec6c49359f04d90669919d836e3b5 (diff) | |
download | sqlalchemy-946984d812dcade87a6cbefbb896e4a17af8170e.tar.gz |
fixed reflection of foreign keys to autoload the referenced table
if it was not loaded already, affected postgres, mysql, oracle.
fixes the latest in [ticket:105]
Diffstat (limited to 'lib/sqlalchemy/databases')
-rw-r--r-- | lib/sqlalchemy/databases/information_schema.py | 2 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/mysql.py | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 1 |
3 files changed, 4 insertions, 0 deletions
diff --git a/lib/sqlalchemy/databases/information_schema.py b/lib/sqlalchemy/databases/information_schema.py index 296db2de5..291637e9e 100644 --- a/lib/sqlalchemy/databases/information_schema.py +++ b/lib/sqlalchemy/databases/information_schema.py @@ -185,8 +185,10 @@ def reflecttable(connection, table, ischema_names): if current_schema == referred_schema: referred_schema = table.schema if referred_schema is not None: + schema.Table(referred_table, table.metadata, autoload=True, schema=referred_schema, autoload_with=connection) refspec = ".".join([referred_schema, referred_table, referred_column]) else: + schema.Table(referred_table, table.metadata, autoload=True, autoload_with=connection) refspec = ".".join([referred_table, referred_column]) if constrained_column not in fk[0]: fk[0].append(constrained_column) diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index 1d587ff7c..3f3e8d148 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -370,6 +370,7 @@ class MySQLDialect(ansisql.ANSIDialect): for match in re.finditer(fkpat, desc): columns = re.findall(r'`(.+?)`', match.group('columns')) refcols = [match.group('reftable') + "." + x for x in re.findall(r'`(.+?)`', match.group('refcols'))] + schema.Table(match.group('reftable'), table.metadata, autoload=True, autoload_with=connection) constraint = schema.ForeignKeyConstraint(columns, refcols, name=match.group('name')) table.append_item(constraint) diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 04950674a..c279da619 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -237,6 +237,7 @@ class OracleDialect(ansisql.ANSIDialect): fk = ([], []) fks[cons_name] = fk refspec = ".".join([remote_table, remote_column]) + schema.Table(remote_table, table.metadata, autoload=True, autoload_with=connection) if local_column not in fk[0]: fk[0].append(local_column) if refspec not in fk[1]: |