Index: introspection.py
===================================================================
--- introspection.py	(revision 7137)
+++ introspection.py	(working copy)
@@ -30,7 +30,7 @@
     cursor.execute("""
 SELECT ta.column_id - 1, tb.table_name, tb.column_id - 1
 FROM   user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb,
-       user_tab_cols ta, user_tab_cols tb
+       user_tab_columns ta, user_tab_columns tb
 WHERE  user_constraints.table_name = %s AND
        ta.table_name = %s AND
        ta.column_name = ca.column_name AND
@@ -57,26 +57,58 @@
     # first associated field name
     # "We were in the nick of time; you were in great peril!"
     sql = """
-WITH primarycols AS (
- SELECT user_cons_columns.table_name, user_cons_columns.column_name, 1 AS PRIMARYCOL
- FROM   user_cons_columns, user_constraints
- WHERE  user_cons_columns.constraint_name = user_constraints.constraint_name AND
-        user_constraints.constraint_type = 'P' AND
-        user_cons_columns.table_name = %s),
- uniquecols AS (
- SELECT user_ind_columns.table_name, user_ind_columns.column_name, 1 AS UNIQUECOL
- FROM   user_indexes, user_ind_columns
- WHERE  uniqueness = 'UNIQUE' AND
-        user_indexes.index_name = user_ind_columns.index_name AND
-        user_ind_columns.table_name = %s)
-SELECT allcols.column_name, primarycols.primarycol, uniquecols.UNIQUECOL
-FROM   (SELECT column_name FROM primarycols UNION SELECT column_name FROM
-uniquecols) allcols,
-      primarycols, uniquecols
-WHERE  allcols.column_name = primarycols.column_name (+) AND
-      allcols.column_name = uniquecols.column_name (+)
+SELECT allcols.column_name,
+    primarycols.primarycol,
+    uniquecols.UNIQUECOL
+FROM
+    (SELECT column_name
+    FROM
+        (SELECT user_cons_columns.table_name,
+            user_cons_columns.column_name   ,
+            1 AS PRIMARYCOL
+        FROM user_cons_columns,
+            user_constraints
+        WHERE user_cons_columns.constraint_name = user_constraints.constraint_name
+        AND user_constraints.constraint_type    = 'P'
+        AND user_cons_columns.table_name        = %s
+        ) primarycols
+
+    UNION
+
+    SELECT column_name
+    FROM
+        (SELECT user_ind_columns.table_name,
+            user_ind_columns.column_name   ,
+            1 AS UNIQUECOL
+        FROM user_indexes,
+            user_ind_columns
+        WHERE uniqueness                = 'UNIQUE'
+        AND user_indexes.index_name     = user_ind_columns.index_name
+        AND user_ind_columns.table_name = %s
+        )uniquecols
+    ) allcols                           ,
+    (SELECT user_cons_columns.table_name,
+        user_cons_columns.column_name   ,
+        1 AS PRIMARYCOL
+    FROM user_cons_columns,
+        user_constraints
+    WHERE user_cons_columns.constraint_name = user_constraints.constraint_name
+    AND user_constraints.constraint_type    = 'P'
+    AND user_cons_columns.table_name        = %s
+    ) primarycols                      ,
+    (SELECT user_ind_columns.table_name,
+        user_ind_columns.column_name   ,
+        1 AS UNIQUECOL
+    FROM user_indexes,
+        user_ind_columns
+    WHERE uniqueness                = 'UNIQUE'
+    AND user_indexes.index_name     = user_ind_columns.index_name
+    AND user_ind_columns.table_name = %s
+    ) uniquecols
+WHERE allcols.column_name = primarycols.column_name (+)
+AND allcols.column_name   = uniquecols.column_name (+)
     """
-    cursor.execute(sql, [table_name, table_name])
+    cursor.execute(sql, [table_name, table_name,table_name, table_name])
     indexes = {}
     for row in cursor.fetchall():
         # row[1] (idx.indkey) is stored in the DB as an array. It comes out as
