|
13 | 13 | /*
|
14 | 14 | * This class provides information about the database as a whole.
|
15 | 15 | *
|
16 |
| - * $Id: DatabaseMetaData.java,v 1.40 2001/11/19 23:16:45 momjian Exp $ |
| 16 | + * $Id: DatabaseMetaData.java,v 1.41 2002/01/18 17:21:51 davec Exp $ |
17 | 17 | *
|
18 | 18 | * <p>Many of the methods here return lists of information in ResultSets. You
|
19 | 19 | * can use the normal ResultSet methods such as getString and getInt to
|
@@ -2299,8 +2299,8 @@ private java.sql.ResultSet getImportedExportedKeys(String catalog, String schema
|
2299 | 2299 | + "pg_class ic,pg_proc p, pg_index i "
|
2300 | 2300 | + "WHERE t.tgrelid=c.oid AND t.tgconstrrelid=c2.oid "
|
2301 | 2301 | + "AND t.tgfoid=p.oid AND tgisconstraint "
|
2302 |
| - + ((primaryTable != null) ? "AND c2.relname='" + primaryTable + "' " : "") |
2303 |
| - + ((foreignTable != null) ? "AND c.relname='" + foreignTable + "' " : "") |
| 2302 | + + ((primaryTable != null) ? "AND c.relname='" + primaryTable + "' " : "") |
| 2303 | + + ((foreignTable != null) ? "AND c2.relname='" + foreignTable + "' " : "") |
2304 | 2304 | + "AND i.indrelid=c.oid "
|
2305 | 2305 | + "AND i.indexrelid=ic.oid AND i.indisprimary "
|
2306 | 2306 | + "ORDER BY c.relname,c2.relname"
|
@@ -2339,65 +2339,67 @@ else if ("setnull".equals(rule))
|
2339 | 2339 | else if ("setdefault".equals(rule))
|
2340 | 2340 | action = importedKeySetDefault;
|
2341 | 2341 | tuple[col] = Integer.toString(action).getBytes();
|
2342 |
| - foundRule = true; |
2343 |
| - } |
2344 |
| - } |
2345 |
| - } |
2346 |
| - while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); |
2347 | 2342 |
|
2348 |
| - if (foundRule) |
2349 |
| - { |
2350 |
| - tuple[2] = rs.getBytes(2); //PKTABLE_NAME |
2351 |
| - tuple[6] = rs.getBytes(1); //FKTABLE_NAME |
2352 |
| - |
2353 |
| - // Parse the tgargs data |
2354 |
| - StringBuffer fkeyColumns = new StringBuffer(); |
2355 |
| - StringBuffer pkeyColumns = new StringBuffer(); |
2356 |
| - int numColumns = (rs.getInt(7) >> 1) - 2; |
2357 |
| - String s = rs.getString(8); |
2358 |
| - int pos = s.lastIndexOf("\\000"); |
2359 |
| - for (int c = 0;c < numColumns;c++) |
2360 |
| - { |
2361 |
| - if (pos > -1) |
2362 |
| - { |
2363 |
| - int pos2 = s.lastIndexOf("\\000", pos - 1); |
2364 |
| - if (pos2 > -1) |
| 2343 | + if (!foundRule) |
2365 | 2344 | {
|
2366 |
| - if (fkeyColumns.length() > 0) |
2367 |
| - fkeyColumns.insert(0, ','); |
2368 |
| - fkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //FKCOLUMN_NAME |
2369 |
| - pos = s.lastIndexOf("\\000", pos2 - 1); |
2370 |
| - if (pos > -1) |
| 2345 | + tuple[2] = rs.getBytes(1); //PKTABLE_NAME |
| 2346 | + tuple[6] = rs.getBytes(2); //FKTABLE_NAME |
| 2347 | + |
| 2348 | + // Parse the tgargs data |
| 2349 | + StringBuffer fkeyColumns = new StringBuffer(); |
| 2350 | + StringBuffer pkeyColumns = new StringBuffer(); |
| 2351 | + int numColumns = (rs.getInt(7) >> 1) - 2; |
| 2352 | + String s = rs.getString(8); |
| 2353 | + int pos = s.lastIndexOf("\\000"); |
| 2354 | + for (int c = 0;c < numColumns;c++) |
| 2355 | + { |
| 2356 | + if (pos > -1) |
| 2357 | + { |
| 2358 | + int pos2 = s.lastIndexOf("\\000", pos - 1); |
| 2359 | + if (pos2 > -1) |
| 2360 | + { |
| 2361 | + if (pkeyColumns.length() > 0) |
| 2362 | + pkeyColumns.insert(0, ','); |
| 2363 | + pkeyColumns.insert(0, s.substring(pos2 + 4, pos)); //PKCOLUMN_NAME |
| 2364 | + pos = s.lastIndexOf("\\000", pos2 - 1); |
| 2365 | + if (pos > -1) |
| 2366 | + { |
| 2367 | + if (fkeyColumns.length() > 0) |
| 2368 | + fkeyColumns.insert(0, ','); |
| 2369 | + fkeyColumns.insert(0, s.substring(pos + 4, pos2)); //FKCOLUMN_NAME |
| 2370 | + } |
| 2371 | + } |
| 2372 | + } |
| 2373 | + } |
| 2374 | + tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME |
| 2375 | + tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME |
| 2376 | + |
| 2377 | + tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ |
| 2378 | + tuple[11] = fKeyName.getBytes(); //FK_NAME |
| 2379 | + tuple[12] = rs.getBytes(4); //PK_NAME |
| 2380 | + |
| 2381 | + // DEFERRABILITY |
| 2382 | + int deferrability = importedKeyNotDeferrable; |
| 2383 | + boolean deferrable = rs.getBoolean(5); |
| 2384 | + boolean initiallyDeferred = rs.getBoolean(6); |
| 2385 | + if (deferrable) |
2371 | 2386 | {
|
2372 |
| - if (pkeyColumns.length() > 0) |
2373 |
| - pkeyColumns.insert(0, ','); |
2374 |
| - pkeyColumns.insert(0, s.substring(pos + 4, pos2)); //PKCOLUMN_NAME |
| 2387 | + if (initiallyDeferred) |
| 2388 | + deferrability = importedKeyInitiallyDeferred; |
| 2389 | + else |
| 2390 | + deferrability = importedKeyInitiallyImmediate; |
2375 | 2391 | }
|
| 2392 | + tuple[13] = Integer.toString(deferrability).getBytes(); |
| 2393 | + |
| 2394 | + foundRule = true; |
2376 | 2395 | }
|
2377 | 2396 | }
|
2378 | 2397 | }
|
2379 |
| - tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME |
2380 |
| - tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME |
2381 |
| - |
2382 |
| - tuple[8] = Integer.toString(seq++).getBytes(); //KEY_SEQ |
2383 |
| - tuple[11] = fKeyName.getBytes(); //FK_NAME |
2384 |
| - tuple[12] = rs.getBytes(4); //PK_NAME |
2385 |
| - |
2386 |
| - // DEFERRABILITY |
2387 |
| - int deferrability = importedKeyNotDeferrable; |
2388 |
| - boolean deferrable = rs.getBoolean(5); |
2389 |
| - boolean initiallyDeferred = rs.getBoolean(6); |
2390 |
| - if (deferrable) |
2391 |
| - { |
2392 |
| - if (initiallyDeferred) |
2393 |
| - deferrability = importedKeyInitiallyDeferred; |
2394 |
| - else |
2395 |
| - deferrability = importedKeyInitiallyImmediate; |
2396 |
| - } |
2397 |
| - tuple[13] = Integer.toString(deferrability).getBytes(); |
2398 |
| - |
2399 |
| - tuples.addElement(tuple); |
2400 | 2398 | }
|
| 2399 | + while ((hasMore = rs.next()) && fKeyName.equals(rs.getString(3))); |
| 2400 | + |
| 2401 | + if(foundRule) tuples.addElement(tuple); |
| 2402 | + |
2401 | 2403 | }
|
2402 | 2404 | while (hasMore);
|
2403 | 2405 | }
|
|
0 commit comments