Re: PATCH to org/postgresql/jdbc2/DatabaseMetaData.java - Mailing list pgsql-jdbc
From | Bruce Momjian |
---|---|
Subject | Re: PATCH to org/postgresql/jdbc2/DatabaseMetaData.java |
Date | |
Msg-id | 200103200530.AAA28235@candle.pha.pa.us Whole thread Raw |
In response to | PATCH to org/postgresql/jdbc2/DatabaseMetaData.java (Ola Sundell <ola@miranda.org>) |
List | pgsql-jdbc |
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
pgsql-jdbc by date: