Обсуждение: PATCH to org/postgresql/jdbc2/DatabaseMetaData.java
---
postgresql-7.1beta4/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
Mon Jan 29 03:53:56 2001
+++
postgresql-7.1beta4-new/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
Sat Feb 17 10:22:38 2001
@@ -1048,7 +1048,7 @@
/**
* Can statements remain open across commits? They may, but
* this driver cannot guarentee that. In further reflection.
- * we are talking a Statement object jere, so the answer is
+ * we are talking a Statement object here, so the answer is
* yes, since the Statement is only a vehicle to ExecSQL()
*
* @return true if they always remain open; false otherwise
@@ -2185,6 +2185,81 @@
);
}
+ private Vector importLoop(java.sql.ResultSet keyRelation) throws
SQLException {
+ String s,s2;
+ String origTable=null, primTable=new String(""), schema;
+ int i;
+ Vector v;
+
+ s=keyRelation.getString(1);
+ s2=s;
+ System.out.println(s);
+ v=new Vector();
+ for (i=0;;i++) {
+ s=s.substring(s.indexOf("\\000")+4);
+ if (s.compareTo("")==0) {
+ System.out.println();
+ break;
+ }
+ s2=s.substring(0,s.indexOf("\\000"));
+ switch (i) {
+ case 0:
+ origTable=s2;
+ break;
+ case 1:
+ primTable=s2;
+ break;
+ case 2:
+ schema=s2;
+ break;
+ default:
+ v.add(s2);
+ }
+ }
+
+ java.sql.ResultSet rstmp=connection.ExecSQL("select * from
"+origTable+" where 1=0");
+ java.sql.ResultSetMetaData origCols=rstmp.getMetaData();
+
+ String stmp;
+ Vector tuples=new Vector();
+ byte tuple[][];
+
+ // the foreign keys are only on even positions in the Vector.
+ for (i=0;i<v.size();i+=2) {
+ stmp=(String)v.elementAt(i);
+
+ for (int j=1;j<=origCols.getColumnCount();j++) {
+ if (stmp.compareTo(origCols.getColumnName(j))==0) {
+ tuple=new byte[14][0];
+
+ for (int k=0;k<14;k++)
+ tuple[k]=null;
+
+ //PKTABLE_NAME
+ tuple[2]=primTable.getBytes();
+ //PKTABLE_COLUMN
+ stmp=(String)v.elementAt(i+1);
+ tuple[3]=stmp.getBytes();
+ //FKTABLE_NAME
+ tuple[6]=origTable.getBytes();
+ //FKCOLUMN_NAME
+ tuple[7]=origCols.getColumnName(j).getBytes();
+ //KEY_SEQ
+ tuple[8]=Integer.toString(j).getBytes();
+
+ tuples.add(tuple);
+
+ System.out.println(origCols.getColumnName(j)+
+ ": "+j+" -> "+primTable+": "+
+ (String)v.elementAt(i+1));
+ break;
+ }
+ }
+ }
+
+ return tuples;
+ }
+
/**
* Get a description of the primary key columns that are
* referenced by a table's foreign key columns (the primary keys
@@ -2238,8 +2313,39 @@
*/
public java.sql.ResultSet getImportedKeys(String catalog, String
schema, String table) throws SQLException
{
- // XXX-Not Implemented
- return null;
+ // Added by Ola Sundell <ola@miranda.org>
+ // FIXME: error checking galore!
+ java.sql.ResultSet rsret;
+ Field f[]=new Field[14];
+ byte tuple[][];
+
+ f[0]=new Field(connection, "PKTABLE_CAT", iVarcharOid, 32);
+ f[1]=new Field(connection, "PKTABLE_SCHEM", iVarcharOid, 32);
+ f[2]=new Field(connection, "PKTABLE_NAME", iVarcharOid, 32);
+ f[3]=new Field(connection, "PKCOLUMN_NAME", iVarcharOid, 32);
+ f[4]=new Field(connection, "FKTABLE_CAT", iVarcharOid, 32);
+ f[5]=new Field(connection, "FKTABLE_SCHEM", iVarcharOid, 32);
+ f[6]=new Field(connection, "FKTABLE_NAME", iVarcharOid, 32);
+ f[7]=new Field(connection, "FKCOLUMN_NAME", iVarcharOid, 32);
+ f[8]=new Field(connection, "KEY_SEQ", iInt2Oid, 2);
+ f[9]=new Field(connection, "UPDATE_RULE", iInt2Oid, 2);
+ f[10]=new Field(connection, "DELETE_RULE", iInt2Oid, 2);
+ f[11]=new Field(connection, "FK_NAME", iVarcharOid, 32);
+ f[12]=new Field(connection, "PK_NAME", iVarcharOid, 32);
+ f[13]=new Field(connection, "DEFERRABILITY", iInt2Oid, 2);
+
+ java.sql.ResultSet rs=connection.ExecSQL("select t.tgargs "+
+ "from pg_class as c, pg_trigger as t "+
+ "where c.relname like '"+table+"' and
c.relfilenode=t.tgrelid");
+ Vector tuples=new Vector();
+
+ while (rs.next()) {
+ tuples.addAll(importLoop(rs));
+ }
+
+ rsret=new ResultSet(connection, f, tuples, "OK", 1);
+
+ return rsret;
}
/**
I'll take a look at this patch shortly.
Sorry for the delay, work has been hectic this week so I'm about 4 days
behind with emails.
Peter
At 17:22 25/02/01 -0500, Ola Sundell wrote:
>---
>postgresql-7.1beta4/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
>Mon Jan 29 03:53:56 2001
>+++
>postgresql-7.1beta4-new/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
>Sat Feb 17 10:22:38 2001
>@@ -1048,7 +1048,7 @@
> /**
> * Can statements remain open across commits? They may, but
> * this driver cannot guarentee that. In further reflection.
>- * we are talking a Statement object jere, so the answer is
>+ * we are talking a Statement object here, so the answer is
> * yes, since the Statement is only a vehicle to ExecSQL()
> *
> * @return true if they always remain open; false otherwise
>@@ -2185,6 +2185,81 @@
> );
> }
>
>+ private Vector importLoop(java.sql.ResultSet keyRelation) throws
>SQLException {
>+ String s,s2;
>+ String origTable=null, primTable=new String(""), schema;
>+ int i;
>+ Vector v;
>+
>+ s=keyRelation.getString(1);
>+ s2=s;
>+ System.out.println(s);
>+ v=new Vector();
>+ for (i=0;;i++) {
>+ s=s.substring(s.indexOf("\\000")+4);
>+ if (s.compareTo("")==0) {
>+ System.out.println();
>+ break;
>+ }
>+ s2=s.substring(0,s.indexOf("\\000"));
>+ switch (i) {
>+ case 0:
>+ origTable=s2;
>+ break;
>+ case 1:
>+ primTable=s2;
>+ break;
>+ case 2:
>+ schema=s2;
>+ break;
>+ default:
>+ v.add(s2);
>+ }
>+ }
>+
>+ java.sql.ResultSet rstmp=connection.ExecSQL("select * from
>"+origTable+" where 1=0");
>+ java.sql.ResultSetMetaData origCols=rstmp.getMetaData();
>+
>+ String stmp;
>+ Vector tuples=new Vector();
>+ byte tuple[][];
>+
>+ // the foreign keys are only on even positions in the Vector.
>+ for (i=0;i<v.size();i+=2) {
>+ stmp=(String)v.elementAt(i);
>+
>+ for (int j=1;j<=origCols.getColumnCount();j++) {
>+ if (stmp.compareTo(origCols.getColumnName(j))==0) {
>+ tuple=new byte[14][0];
>+
>+ for (int k=0;k<14;k++)
>+ tuple[k]=null;
>+
>+ //PKTABLE_NAME
>+ tuple[2]=primTable.getBytes();
>+ //PKTABLE_COLUMN
>+ stmp=(String)v.elementAt(i+1);
>+ tuple[3]=stmp.getBytes();
>+ //FKTABLE_NAME
>+ tuple[6]=origTable.getBytes();
>+ //FKCOLUMN_NAME
>+ tuple[7]=origCols.getColumnName(j).getBytes();
>+ //KEY_SEQ
>+ tuple[8]=Integer.toString(j).getBytes();
>+
>+ tuples.add(tuple);
>+
>+ System.out.println(origCols.getColumnName(j)+
>+ ": "+j+" -> "+primTable+": "+
>+ (String)v.elementAt(i+1));
>+ break;
>+ }
>+ }
>+ }
>+
>+ return tuples;
>+ }
>+
> /**
> * Get a description of the primary key columns that are
> * referenced by a table's foreign key columns (the primary keys
>@@ -2238,8 +2313,39 @@
> */
> public java.sql.ResultSet getImportedKeys(String catalog, String
>schema, String table) throws SQLException
> {
>- // XXX-Not Implemented
>- return null;
>+ // Added by Ola Sundell <ola@miranda.org>
>+ // FIXME: error checking galore!
>+ java.sql.ResultSet rsret;
>+ Field f[]=new Field[14];
>+ byte tuple[][];
>+
>+ f[0]=new Field(connection, "PKTABLE_CAT", iVarcharOid, 32);
>+ f[1]=new Field(connection, "PKTABLE_SCHEM", iVarcharOid, 32);
>+ f[2]=new Field(connection, "PKTABLE_NAME", iVarcharOid, 32);
>+ f[3]=new Field(connection, "PKCOLUMN_NAME", iVarcharOid, 32);
>+ f[4]=new Field(connection, "FKTABLE_CAT", iVarcharOid, 32);
>+ f[5]=new Field(connection, "FKTABLE_SCHEM", iVarcharOid, 32);
>+ f[6]=new Field(connection, "FKTABLE_NAME", iVarcharOid, 32);
>+ f[7]=new Field(connection, "FKCOLUMN_NAME", iVarcharOid, 32);
>+ f[8]=new Field(connection, "KEY_SEQ", iInt2Oid, 2);
>+ f[9]=new Field(connection, "UPDATE_RULE", iInt2Oid, 2);
>+ f[10]=new Field(connection, "DELETE_RULE", iInt2Oid, 2);
>+ f[11]=new Field(connection, "FK_NAME", iVarcharOid, 32);
>+ f[12]=new Field(connection, "PK_NAME", iVarcharOid, 32);
>+ f[13]=new Field(connection, "DEFERRABILITY", iInt2Oid, 2);
>+
>+ java.sql.ResultSet rs=connection.ExecSQL("select t.tgargs "+
>+ "from pg_class as c, pg_trigger as t "+
>+ "where c.relname like '"+table+"' and
>c.relfilenode=t.tgrelid");
>+ Vector tuples=new Vector();
>+
>+ while (rs.next()) {
>+ tuples.addAll(importLoop(rs));
>+ }
>+
>+ rsret=new ResultSet(connection, f, tuples, "OK", 1);
>+
>+ return rsret;
> }
>
> /**
Peter, can you comment on this?
> ---
> postgresql-7.1beta4/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Mon Jan 29 03:53:56 2001
> +++
> postgresql-7.1beta4-new/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Sat Feb 17 10:22:38 2001
> @@ -1048,7 +1048,7 @@
> /**
> * Can statements remain open across commits? They may, but
> * this driver cannot guarentee that. In further reflection.
> - * we are talking a Statement object jere, so the answer is
> + * we are talking a Statement object here, so the answer is
> * yes, since the Statement is only a vehicle to ExecSQL()
> *
> * @return true if they always remain open; false otherwise
> @@ -2185,6 +2185,81 @@
> );
> }
>
> + private Vector importLoop(java.sql.ResultSet keyRelation) throws
> SQLException {
> + String s,s2;
> + String origTable=null, primTable=new String(""), schema;
> + int i;
> + Vector v;
> +
> + s=keyRelation.getString(1);
> + s2=s;
> + System.out.println(s);
> + v=new Vector();
> + for (i=0;;i++) {
> + s=s.substring(s.indexOf("\\000")+4);
> + if (s.compareTo("")==0) {
> + System.out.println();
> + break;
> + }
> + s2=s.substring(0,s.indexOf("\\000"));
> + switch (i) {
> + case 0:
> + origTable=s2;
> + break;
> + case 1:
> + primTable=s2;
> + break;
> + case 2:
> + schema=s2;
> + break;
> + default:
> + v.add(s2);
> + }
> + }
> +
> + java.sql.ResultSet rstmp=connection.ExecSQL("select * from
> "+origTable+" where 1=0");
> + java.sql.ResultSetMetaData origCols=rstmp.getMetaData();
> +
> + String stmp;
> + Vector tuples=new Vector();
> + byte tuple[][];
> +
> + // the foreign keys are only on even positions in the Vector.
> + for (i=0;i<v.size();i+=2) {
> + stmp=(String)v.elementAt(i);
> +
> + for (int j=1;j<=origCols.getColumnCount();j++) {
> + if (stmp.compareTo(origCols.getColumnName(j))==0) {
> + tuple=new byte[14][0];
> +
> + for (int k=0;k<14;k++)
> + tuple[k]=null;
> +
> + //PKTABLE_NAME
> + tuple[2]=primTable.getBytes();
> + //PKTABLE_COLUMN
> + stmp=(String)v.elementAt(i+1);
> + tuple[3]=stmp.getBytes();
> + //FKTABLE_NAME
> + tuple[6]=origTable.getBytes();
> + //FKCOLUMN_NAME
> + tuple[7]=origCols.getColumnName(j).getBytes();
> + //KEY_SEQ
> + tuple[8]=Integer.toString(j).getBytes();
> +
> + tuples.add(tuple);
> +
> + System.out.println(origCols.getColumnName(j)+
> + ": "+j+" -> "+primTable+": "+
> + (String)v.elementAt(i+1));
> + break;
> + }
> + }
> + }
> +
> + return tuples;
> + }
> +
> /**
> * Get a description of the primary key columns that are
> * referenced by a table's foreign key columns (the primary keys
> @@ -2238,8 +2313,39 @@
> */
> public java.sql.ResultSet getImportedKeys(String catalog, String
> schema, String table) throws SQLException
> {
> - // XXX-Not Implemented
> - return null;
> + // Added by Ola Sundell <ola@miranda.org>
> + // FIXME: error checking galore!
> + java.sql.ResultSet rsret;
> + Field f[]=new Field[14];
> + byte tuple[][];
> +
> + f[0]=new Field(connection, "PKTABLE_CAT", iVarcharOid, 32);
> + f[1]=new Field(connection, "PKTABLE_SCHEM", iVarcharOid, 32);
> + f[2]=new Field(connection, "PKTABLE_NAME", iVarcharOid, 32);
> + f[3]=new Field(connection, "PKCOLUMN_NAME", iVarcharOid, 32);
> + f[4]=new Field(connection, "FKTABLE_CAT", iVarcharOid, 32);
> + f[5]=new Field(connection, "FKTABLE_SCHEM", iVarcharOid, 32);
> + f[6]=new Field(connection, "FKTABLE_NAME", iVarcharOid, 32);
> + f[7]=new Field(connection, "FKCOLUMN_NAME", iVarcharOid, 32);
> + f[8]=new Field(connection, "KEY_SEQ", iInt2Oid, 2);
> + f[9]=new Field(connection, "UPDATE_RULE", iInt2Oid, 2);
> + f[10]=new Field(connection, "DELETE_RULE", iInt2Oid, 2);
> + f[11]=new Field(connection, "FK_NAME", iVarcharOid, 32);
> + f[12]=new Field(connection, "PK_NAME", iVarcharOid, 32);
> + f[13]=new Field(connection, "DEFERRABILITY", iInt2Oid, 2);
> +
> + java.sql.ResultSet rs=connection.ExecSQL("select t.tgargs "+
> + "from pg_class as c, pg_trigger as t "+
> + "where c.relname like '"+table+"' and
> c.relfilenode=t.tgrelid");
> + Vector tuples=new Vector();
> +
> + while (rs.next()) {
> + tuples.addAll(importLoop(rs));
> + }
> +
> + rsret=new ResultSet(connection, f, tuples, "OK", 1);
> +
> + return rsret;
> }
>
> /**
>
>
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Thanks. Applied for 7.2.
> ---
> postgresql-7.1beta4/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Mon Jan 29 03:53:56 2001
> +++
> postgresql-7.1beta4-new/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Sat Feb 17 10:22:38 2001
> @@ -1048,7 +1048,7 @@
> /**
> * Can statements remain open across commits? They may, but
> * this driver cannot guarentee that. In further reflection.
> - * we are talking a Statement object jere, so the answer is
> + * we are talking a Statement object here, so the answer is
> * yes, since the Statement is only a vehicle to ExecSQL()
> *
> * @return true if they always remain open; false otherwise
> @@ -2185,6 +2185,81 @@
> );
> }
>
> + private Vector importLoop(java.sql.ResultSet keyRelation) throws
> SQLException {
> + String s,s2;
> + String origTable=null, primTable=new String(""), schema;
> + int i;
> + Vector v;
> +
> + s=keyRelation.getString(1);
> + s2=s;
> + System.out.println(s);
> + v=new Vector();
> + for (i=0;;i++) {
> + s=s.substring(s.indexOf("\\000")+4);
> + if (s.compareTo("")==0) {
> + System.out.println();
> + break;
> + }
> + s2=s.substring(0,s.indexOf("\\000"));
> + switch (i) {
> + case 0:
> + origTable=s2;
> + break;
> + case 1:
> + primTable=s2;
> + break;
> + case 2:
> + schema=s2;
> + break;
> + default:
> + v.add(s2);
> + }
> + }
> +
> + java.sql.ResultSet rstmp=connection.ExecSQL("select * from
> "+origTable+" where 1=0");
> + java.sql.ResultSetMetaData origCols=rstmp.getMetaData();
> +
> + String stmp;
> + Vector tuples=new Vector();
> + byte tuple[][];
> +
> + // the foreign keys are only on even positions in the Vector.
> + for (i=0;i<v.size();i+=2) {
> + stmp=(String)v.elementAt(i);
> +
> + for (int j=1;j<=origCols.getColumnCount();j++) {
> + if (stmp.compareTo(origCols.getColumnName(j))==0) {
> + tuple=new byte[14][0];
> +
> + for (int k=0;k<14;k++)
> + tuple[k]=null;
> +
> + //PKTABLE_NAME
> + tuple[2]=primTable.getBytes();
> + //PKTABLE_COLUMN
> + stmp=(String)v.elementAt(i+1);
> + tuple[3]=stmp.getBytes();
> + //FKTABLE_NAME
> + tuple[6]=origTable.getBytes();
> + //FKCOLUMN_NAME
> + tuple[7]=origCols.getColumnName(j).getBytes();
> + //KEY_SEQ
> + tuple[8]=Integer.toString(j).getBytes();
> +
> + tuples.add(tuple);
> +
> + System.out.println(origCols.getColumnName(j)+
> + ": "+j+" -> "+primTable+": "+
> + (String)v.elementAt(i+1));
> + break;
> + }
> + }
> + }
> +
> + return tuples;
> + }
> +
> /**
> * Get a description of the primary key columns that are
> * referenced by a table's foreign key columns (the primary keys
> @@ -2238,8 +2313,39 @@
> */
> public java.sql.ResultSet getImportedKeys(String catalog, String
> schema, String table) throws SQLException
> {
> - // XXX-Not Implemented
> - return null;
> + // Added by Ola Sundell <ola@miranda.org>
> + // FIXME: error checking galore!
> + java.sql.ResultSet rsret;
> + Field f[]=new Field[14];
> + byte tuple[][];
> +
> + f[0]=new Field(connection, "PKTABLE_CAT", iVarcharOid, 32);
> + f[1]=new Field(connection, "PKTABLE_SCHEM", iVarcharOid, 32);
> + f[2]=new Field(connection, "PKTABLE_NAME", iVarcharOid, 32);
> + f[3]=new Field(connection, "PKCOLUMN_NAME", iVarcharOid, 32);
> + f[4]=new Field(connection, "FKTABLE_CAT", iVarcharOid, 32);
> + f[5]=new Field(connection, "FKTABLE_SCHEM", iVarcharOid, 32);
> + f[6]=new Field(connection, "FKTABLE_NAME", iVarcharOid, 32);
> + f[7]=new Field(connection, "FKCOLUMN_NAME", iVarcharOid, 32);
> + f[8]=new Field(connection, "KEY_SEQ", iInt2Oid, 2);
> + f[9]=new Field(connection, "UPDATE_RULE", iInt2Oid, 2);
> + f[10]=new Field(connection, "DELETE_RULE", iInt2Oid, 2);
> + f[11]=new Field(connection, "FK_NAME", iVarcharOid, 32);
> + f[12]=new Field(connection, "PK_NAME", iVarcharOid, 32);
> + f[13]=new Field(connection, "DEFERRABILITY", iInt2Oid, 2);
> +
> + java.sql.ResultSet rs=connection.ExecSQL("select t.tgargs "+
> + "from pg_class as c, pg_trigger as t "+
> + "where c.relname like '"+table+"' and
> c.relfilenode=t.tgrelid");
> + Vector tuples=new Vector();
> +
> + while (rs.next()) {
> + tuples.addAll(importLoop(rs));
> + }
> +
> + rsret=new ResultSet(connection, f, tuples, "OK", 1);
> +
> + return rsret;
> }
>
> /**
>
>
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
I have back-patched this to jdbc1.
> ---
> postgresql-7.1beta4/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Mon Jan 29 03:53:56 2001
> +++
> postgresql-7.1beta4-new/src/interfaces/jdbc/org/postgresql/jdbc2/DatabaseMetaData.java
> Sat Feb 17 10:22:38 2001
> @@ -1048,7 +1048,7 @@
> /**
> * Can statements remain open across commits? They may, but
> * this driver cannot guarentee that. In further reflection.
> - * we are talking a Statement object jere, so the answer is
> + * we are talking a Statement object here, so the answer is
> * yes, since the Statement is only a vehicle to ExecSQL()
> *
> * @return true if they always remain open; false otherwise
> @@ -2185,6 +2185,81 @@
> );
> }
>
> + private Vector importLoop(java.sql.ResultSet keyRelation) throws
> SQLException {
> + String s,s2;
> + String origTable=null, primTable=new String(""), schema;
> + int i;
> + Vector v;
> +
> + s=keyRelation.getString(1);
> + s2=s;
> + System.out.println(s);
> + v=new Vector();
> + for (i=0;;i++) {
> + s=s.substring(s.indexOf("\\000")+4);
> + if (s.compareTo("")==0) {
> + System.out.println();
> + break;
> + }
> + s2=s.substring(0,s.indexOf("\\000"));
> + switch (i) {
> + case 0:
> + origTable=s2;
> + break;
> + case 1:
> + primTable=s2;
> + break;
> + case 2:
> + schema=s2;
> + break;
> + default:
> + v.add(s2);
> + }
> + }
> +
> + java.sql.ResultSet rstmp=connection.ExecSQL("select * from
> "+origTable+" where 1=0");
> + java.sql.ResultSetMetaData origCols=rstmp.getMetaData();
> +
> + String stmp;
> + Vector tuples=new Vector();
> + byte tuple[][];
> +
> + // the foreign keys are only on even positions in the Vector.
> + for (i=0;i<v.size();i+=2) {
> + stmp=(String)v.elementAt(i);
> +
> + for (int j=1;j<=origCols.getColumnCount();j++) {
> + if (stmp.compareTo(origCols.getColumnName(j))==0) {
> + tuple=new byte[14][0];
> +
> + for (int k=0;k<14;k++)
> + tuple[k]=null;
> +
> + //PKTABLE_NAME
> + tuple[2]=primTable.getBytes();
> + //PKTABLE_COLUMN
> + stmp=(String)v.elementAt(i+1);
> + tuple[3]=stmp.getBytes();
> + //FKTABLE_NAME
> + tuple[6]=origTable.getBytes();
> + //FKCOLUMN_NAME
> + tuple[7]=origCols.getColumnName(j).getBytes();
> + //KEY_SEQ
> + tuple[8]=Integer.toString(j).getBytes();
> +
> + tuples.add(tuple);
> +
> + System.out.println(origCols.getColumnName(j)+
> + ": "+j+" -> "+primTable+": "+
> + (String)v.elementAt(i+1));
> + break;
> + }
> + }
> + }
> +
> + return tuples;
> + }
> +
> /**
> * Get a description of the primary key columns that are
> * referenced by a table's foreign key columns (the primary keys
> @@ -2238,8 +2313,39 @@
> */
> public java.sql.ResultSet getImportedKeys(String catalog, String
> schema, String table) throws SQLException
> {
> - // XXX-Not Implemented
> - return null;
> + // Added by Ola Sundell <ola@miranda.org>
> + // FIXME: error checking galore!
> + java.sql.ResultSet rsret;
> + Field f[]=new Field[14];
> + byte tuple[][];
> +
> + f[0]=new Field(connection, "PKTABLE_CAT", iVarcharOid, 32);
> + f[1]=new Field(connection, "PKTABLE_SCHEM", iVarcharOid, 32);
> + f[2]=new Field(connection, "PKTABLE_NAME", iVarcharOid, 32);
> + f[3]=new Field(connection, "PKCOLUMN_NAME", iVarcharOid, 32);
> + f[4]=new Field(connection, "FKTABLE_CAT", iVarcharOid, 32);
> + f[5]=new Field(connection, "FKTABLE_SCHEM", iVarcharOid, 32);
> + f[6]=new Field(connection, "FKTABLE_NAME", iVarcharOid, 32);
> + f[7]=new Field(connection, "FKCOLUMN_NAME", iVarcharOid, 32);
> + f[8]=new Field(connection, "KEY_SEQ", iInt2Oid, 2);
> + f[9]=new Field(connection, "UPDATE_RULE", iInt2Oid, 2);
> + f[10]=new Field(connection, "DELETE_RULE", iInt2Oid, 2);
> + f[11]=new Field(connection, "FK_NAME", iVarcharOid, 32);
> + f[12]=new Field(connection, "PK_NAME", iVarcharOid, 32);
> + f[13]=new Field(connection, "DEFERRABILITY", iInt2Oid, 2);
> +
> + java.sql.ResultSet rs=connection.ExecSQL("select t.tgargs "+
> + "from pg_class as c, pg_trigger as t "+
> + "where c.relname like '"+table+"' and
> c.relfilenode=t.tgrelid");
> + Vector tuples=new Vector();
> +
> + while (rs.next()) {
> + tuples.addAll(importLoop(rs));
> + }
> +
> + rsret=new ResultSet(connection, f, tuples, "OK", 1);
> +
> + return rsret;
> }
>
> /**
>
>
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026