summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-07-20 00:07:30 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-07-20 00:07:30 +0000
commit81f6188b400b7b65819b738b3621378874dfef35 (patch)
treee02730234d1adec7da20129f9420ba5879bd55d3 /lib/sqlalchemy/databases
parent80f2fdce7f47b5eb359ef0ebbe7d8711719ee5ca (diff)
downloadsqlalchemy-81f6188b400b7b65819b738b3621378874dfef35.tar.gz
implemented latest patch on [ticket:105], modified to support
new ForeignKeyConstraint upon reflection
Diffstat (limited to 'lib/sqlalchemy/databases')
-rw-r--r--lib/sqlalchemy/databases/oracle.py23
1 files changed, 15 insertions, 8 deletions
diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py
index 519f5cb65..04950674a 100644
--- a/lib/sqlalchemy/databases/oracle.py
+++ b/lib/sqlalchemy/databases/oracle.py
@@ -95,7 +95,7 @@ AND ac.constraint_name = loc.constraint_name
AND ac.r_owner = rem.owner(+)
AND ac.r_constraint_name = rem.constraint_name(+)
-- order multiple primary keys correctly
-ORDER BY ac.constraint_name, loc.position"""
+ORDER BY ac.constraint_name, loc.position, rem.position"""
def descriptor():
@@ -221,6 +221,7 @@ class OracleDialect(ansisql.ANSIDialect):
c = connection.execute(constraintSQL, {'table_name' : table.name.upper(), 'owner' : owner})
+ fks = {}
while True:
row = c.fetchone()
if row is None:
@@ -230,13 +231,19 @@ class OracleDialect(ansisql.ANSIDialect):
if cons_type == 'P':
table.c[local_column]._set_primary_key()
elif cons_type == 'R':
- #table.append_item(ForeignKeyConstraint(value[0], value[1], name=name))
- table.c[local_column].append_item(
- schema.ForeignKey(schema.Table(remote_table,
- table.metadata,
- autoload=True).c[remote_column]
- )
- )
+ try:
+ fk = fks[cons_name]
+ except KeyError:
+ fk = ([], [])
+ fks[cons_name] = fk
+ refspec = ".".join([remote_table, remote_column])
+ if local_column not in fk[0]:
+ fk[0].append(local_column)
+ if refspec not in fk[1]:
+ fk[1].append(refspec)
+
+ for name, value in fks.iteritems():
+ table.append_item(schema.ForeignKeyConstraint(value[0], value[1], name=name))
def do_executemany(self, c, statement, parameters, context=None):
rowcount = 0