Index: jdbc1/DatabaseMetaData.java =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/DatabaseMetaData.java,v retrieving revision 1.40 diff -c -r1.40 DatabaseMetaData.java *** jdbc1/DatabaseMetaData.java 2001/11/19 23:16:45 1.40 --- jdbc1/DatabaseMetaData.java 2002/01/18 00:00:17 *************** *** 2299,2306 **** + "pg_class ic,pg_proc p, pg_index i " + "WHERE t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid " + "AND t.tgfoid=p.oid AND tgisconstraint " ! + ((primaryTable != null) ? "AND c2.relname='" + primaryTable + "' " : "") ! + ((foreignTable != null) ? "AND c.relname='" + foreignTable + "' " : "") + "AND i.indrelid=c.oid " + "AND i.indexrelid=ic.oid AND i.indisprimary " + "ORDER BY c.relname,c2.relname" --- 2299,2306 ---- + "pg_class ic,pg_proc p, pg_index i " + "WHERE t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid " + "AND t.tgfoid=p.oid AND tgisconstraint " ! + ((primaryTable != null) ? "AND c.relname='" + primaryTable + "' " : "") ! + ((foreignTable != null) ? "AND c2.relname='" + foreignTable + "' " : "") + "AND i.indrelid=c.oid " + "AND i.indexrelid=ic.oid AND i.indisprimary " + "ORDER BY c.relname,c2.relname" *************** *** 2339,2403 **** else if ("setdefault".equals(rule)) action = importedKeySetDefault; tuple[col] = Integer.toString(action).getBytes(); - foundRule = true; - } - } - } - while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); ! if (foundRule) ! { ! tuple[2] = rs.getBytes(2); //PKTABLE_NAME ! tuple[6] = rs.getBytes(1); //FKTABLE_NAME ! ! // Parse the tgargs data ! StringBuffer fkeyColumns = new StringBuffer(); ! StringBuffer pkeyColumns = new StringBuffer(); ! int numColumns = (rs.getInt(7) >> 1) - 2; ! String s = rs.getString(8); ! int pos = s.lastIndexOf("\\000"); ! for (int c = 0;c < numColumns;c++) ! { ! if (pos > -1) ! { ! int pos2 = s.lastIndexOf("\\000", pos - 1); ! if (pos2 > -1) { ! if (fkeyColumns.length() > 0) ! fkeyColumns.insert(0, ','); ! fkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //FKCOLUMN_NAME ! pos = s.lastIndexOf("\\000", pos2 - 1); ! if (pos > -1) { ! if (pkeyColumns.length() > 0) ! pkeyColumns.insert(0, ','); ! pkeyColumns.insert(0, s.substring(pos + 4, pos2)); //PKCOLUMN_NAME } } } } ! tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME ! tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME ! tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ ! tuple[11] = fKeyName.getBytes(); //FK_NAME ! tuple[12] = rs.getBytes(4); //PK_NAME ! ! // DEFERRABILITY ! int deferrability = importedKeyNotDeferrable; ! boolean deferrable = rs.getBoolean(5); ! boolean initiallyDeferred = rs.getBoolean(6); ! if (deferrable) ! { ! if (initiallyDeferred) ! deferrability = importedKeyInitiallyDeferred; ! else ! deferrability = importedKeyInitiallyImmediate; ! } ! tuple[13] = Integer.toString(deferrability).getBytes(); - tuples.addElement(tuple); - } } while (hasMore); } --- 2339,2405 ---- else if ("setdefault".equals(rule)) action = importedKeySetDefault; tuple[col] = Integer.toString(action).getBytes(); ! if (!foundRule) { ! tuple[2] = rs.getBytes(1); //PKTABLE_NAME ! tuple[6] = rs.getBytes(2); //FKTABLE_NAME ! ! // Parse the tgargs data ! StringBuffer fkeyColumns = new StringBuffer(); ! StringBuffer pkeyColumns = new StringBuffer(); ! int numColumns = (rs.getInt(7) >> 1) - 2; ! String s = rs.getString(8); ! int pos = s.lastIndexOf("\\000"); ! for (int c = 0;c < numColumns;c++) { ! if (pos > -1) ! { ! int pos2 = s.lastIndexOf("\\000", pos - 1); ! if (pos2 > -1) ! { ! if (pkeyColumns.length() > 0) ! pkeyColumns.insert(0, ','); ! pkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //PKCOLUMN_NAME ! pos = s.lastIndexOf("\\000", pos2 - 1); ! if (pos > -1) ! { ! if (fkeyColumns.length() > 0) ! fkeyColumns.insert(0, ','); ! fkeyColumns.insert(0, s.substring(pos + 4, pos2)); //FKCOLUMN_NAME ! } ! } ! } } + tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME + tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME + + tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ + tuple[11] = fKeyName.getBytes(); //FK_NAME + tuple[12] = rs.getBytes(4); //PK_NAME + + // DEFERRABILITY + int deferrability = importedKeyNotDeferrable; + boolean deferrable = rs.getBoolean(5); + boolean initiallyDeferred = rs.getBoolean(6); + if (deferrable) + { + if (initiallyDeferred) + deferrability = importedKeyInitiallyDeferred; + else + deferrability = importedKeyInitiallyImmediate; + } + tuple[13] = Integer.toString(deferrability).getBytes(); + + foundRule = true; } } } ! } ! while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); ! if(foundRule) tuples.addElement(tuple); } while (hasMore); } Index: jdbc2/DatabaseMetaData.java =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java,v retrieving revision 1.47 diff -c -r1.47 DatabaseMetaData.java *** jdbc2/DatabaseMetaData.java 2001/11/19 23:16:46 1.47 --- jdbc2/DatabaseMetaData.java 2002/01/18 00:00:24 *************** *** 2427,2434 **** + "pg_class ic,pg_proc p, pg_index i " + "WHERE t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid " + "AND t.tgfoid=p.oid AND tgisconstraint " ! + ((primaryTable != null) ? "AND c2.relname='" + primaryTable + "' " : "") ! + ((foreignTable != null) ? "AND c.relname='" + foreignTable + "' " : "") + "AND i.indrelid=c.oid " + "AND i.indexrelid=ic.oid AND i.indisprimary " + "ORDER BY c.relname,c2.relname" --- 2427,2434 ---- + "pg_class ic,pg_proc p, pg_index i " + "WHERE t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid " + "AND t.tgfoid=p.oid AND tgisconstraint " ! + ((primaryTable != null) ? "AND c.relname='" + primaryTable + "' " : "") ! + ((foreignTable != null) ? "AND c2.relname='" + foreignTable + "' " : "") + "AND i.indrelid=c.oid " + "AND i.indexrelid=ic.oid AND i.indisprimary " + "ORDER BY c.relname,c2.relname" *************** *** 2467,2531 **** else if ("setdefault".equals(rule)) action = importedKeySetDefault; tuple[col] = Integer.toString(action).getBytes(); - foundRule = true; - } - } - } - while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); ! if (foundRule) ! { ! tuple[2] = rs.getBytes(2); //PKTABLE_NAME ! tuple[6] = rs.getBytes(1); //FKTABLE_NAME ! ! // Parse the tgargs data ! StringBuffer fkeyColumns = new StringBuffer(); ! StringBuffer pkeyColumns = new StringBuffer(); ! int numColumns = (rs.getInt(7) >> 1) - 2; ! String s = rs.getString(8); ! int pos = s.lastIndexOf("\\000"); ! for (int c = 0;c < numColumns;c++) ! { ! if (pos > -1) ! { ! int pos2 = s.lastIndexOf("\\000", pos - 1); ! if (pos2 > -1) { ! if (fkeyColumns.length() > 0) ! fkeyColumns.insert(0, ','); ! fkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //FKCOLUMN_NAME ! pos = s.lastIndexOf("\\000", pos2 - 1); ! if (pos > -1) { ! if (pkeyColumns.length() > 0) ! pkeyColumns.insert(0, ','); ! pkeyColumns.insert(0, s.substring(pos + 4, pos2)); //PKCOLUMN_NAME } } } } ! tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME ! tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME ! tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ ! tuple[11] = fKeyName.getBytes(); //FK_NAME ! tuple[12] = rs.getBytes(4); //PK_NAME ! ! // DEFERRABILITY ! int deferrability = importedKeyNotDeferrable; ! boolean deferrable = rs.getBoolean(5); ! boolean initiallyDeferred = rs.getBoolean(6); ! if (deferrable) ! { ! if (initiallyDeferred) ! deferrability = importedKeyInitiallyDeferred; ! else ! deferrability = importedKeyInitiallyImmediate; ! } ! tuple[13] = Integer.toString(deferrability).getBytes(); - tuples.addElement(tuple); - } } while (hasMore); } --- 2467,2533 ---- else if ("setdefault".equals(rule)) action = importedKeySetDefault; tuple[col] = Integer.toString(action).getBytes(); ! if (!foundRule) { ! tuple[2] = rs.getBytes(1); //PKTABLE_NAME ! tuple[6] = rs.getBytes(2); //FKTABLE_NAME ! ! // Parse the tgargs data ! StringBuffer fkeyColumns = new StringBuffer(); ! StringBuffer pkeyColumns = new StringBuffer(); ! int numColumns = (rs.getInt(7) >> 1) - 2; ! String s = rs.getString(8); ! int pos = s.lastIndexOf("\\000"); ! for (int c = 0;c < numColumns;c++) { ! if (pos > -1) ! { ! int pos2 = s.lastIndexOf("\\000", pos - 1); ! if (pos2 > -1) ! { ! if (pkeyColumns.length() > 0) ! pkeyColumns.insert(0, ','); ! pkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //PKCOLUMN_NAME ! pos = s.lastIndexOf("\\000", pos2 - 1); ! if (pos > -1) ! { ! if (fkeyColumns.length() > 0) ! fkeyColumns.insert(0, ','); ! fkeyColumns.insert(0, s.substring(pos + 4, pos2)); //FKCOLUMN_NAME ! } ! } ! } } + tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME + tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME + + tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ + tuple[11] = fKeyName.getBytes(); //FK_NAME + tuple[12] = rs.getBytes(4); //PK_NAME + + // DEFERRABILITY + int deferrability = importedKeyNotDeferrable; + boolean deferrable = rs.getBoolean(5); + boolean initiallyDeferred = rs.getBoolean(6); + if (deferrable) + { + if (initiallyDeferred) + deferrability = importedKeyInitiallyDeferred; + else + deferrability = importedKeyInitiallyImmediate; + } + tuple[13] = Integer.toString(deferrability).getBytes(); + + foundRule = true; } } } ! } ! while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); ! if(foundRule) tuples.addElement(tuple); } while (hasMore); }