aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Cramer <davec@fastcrypt.com>2002-07-12 13:07:48 +0000
committerDave Cramer <davec@fastcrypt.com>2002-07-12 13:07:48 +0000
commit791a40f943e2a9353c5823fb4f2bd446ec623d38 (patch)
tree4f5c3a5eed7c92563ffd1f84f204b8ca1841c033 /src
parentb82b2db7c18a0adcecd6a2f8d0d2e3ae4e38cf85 (diff)
downloadpostgresql-791a40f943e2a9353c5823fb4f2bd446ec623d38.tar.gz
postgresql-791a40f943e2a9353c5823fb4f2bd446ec623d38.zip
Changed getCrossReference to return information about each composite key seperately
It used to return them as a,b in one row, and now returns a in one row, and b in one row
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java55
1 files changed, 20 insertions, 35 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
index f2eb0929bfa..3cc224e6e8f 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
@@ -15,7 +15,7 @@ import org.postgresql.util.PSQLException;
/*
* This class provides information about the database as a whole.
*
- * $Id: DatabaseMetaData.java,v 1.57 2002/06/25 16:30:49 davec Exp $
+ * $Id: DatabaseMetaData.java,v 1.58 2002/07/12 13:07:48 davec Exp $
*
* <p>Many of the methods here return lists of information in ResultSets. You
* can use the normal ResultSet methods such as getString and getInt to
@@ -2625,8 +2625,8 @@ WHERE
// Parse the tgargs data
- StringBuffer fkeyColumns = new StringBuffer();
- StringBuffer pkeyColumns = new StringBuffer();
+ String fkeyColumn="";
+ String pkeyColumn="";
// Note, I am guessing at most of this, but it should be close
@@ -2634,46 +2634,31 @@ WHERE
// the keys are in pairs and start after the first four arguments
// the arguments are seperated by \000
- int numColumns = (rs.getInt(8) >> 1) - 2;
-
-
+ int keySequence = rs.getInt(4); //KEY_SEQ
// get the args
String targs = rs.getString(9);
- // start parsing from the end
- int pos = targs.lastIndexOf("\\000");
+ // args look like this
+ //<unnamed>\000ww\000vv\000UNSPECIFIED\000m\000a\000n\000b\000
+ // we are primarily interested in the column names which are the last items in the string
+
+ StringTokenizer st = new StringTokenizer(targs, "\\000");
- for (int c = 0;c < numColumns;c++)
+ int advance = 4 + (keySequence-1) * 2;
+ for( int i=0; st.hasMoreTokens() && i < advance ; i++ ) st.nextToken(); // advance to the key column of interest
+
+ if ( st.hasMoreTokens() )
+ {
+ fkeyColumn = st.nextToken();
+ }
+ if ( st.hasMoreTokens() )
{
- // this should never be, since we should never get to the beginning of the string
- // as the number of columns should override this, but it is a safe test
- if (pos > -1)
- {
- int pos2 = targs.lastIndexOf("\\000", pos - 1);
- if (pos2 > -1)
- {
- // seperate the pkColumns by ',' s
- if (pkeyColumns.length() > 0)
- pkeyColumns.insert(0, ',');
-
- // extract the column name out 4 characters ahead essentially removing the /000
- pkeyColumns.insert(0, targs.substring(pos2 + 4, pos)); //PKCOLUMN_NAME
-
- // now find the associated fkColumn
- pos = targs.lastIndexOf("\\000", pos2 - 1);
- if (pos > -1)
- {
- if (fkeyColumns.length() > 0)
- fkeyColumns.insert(0, ',');
- fkeyColumns.insert(0, targs.substring(pos + 4, pos2)); //FKCOLUMN_NAME
- }
- }
- }
+ pkeyColumn = st.nextToken();
}
- tuple[3] = pkeyColumns.toString().getBytes(); //PKCOLUMN_NAME
- tuple[7] = fkeyColumns.toString().getBytes(); //FKCOLUMN_NAME
+ tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
+ tuple[7] = fkeyColumn.getBytes(); //FKCOLUMN_NAME
tuple[8] = rs.getBytes(4); //KEY_SEQ
tuple[11] = rs.getBytes(3); //FK_NAME