Attached is a proposed fix for a bug in DatabaseMetaData.getIndexInfo(). 
  This fixes a bug reported by [EMAIL PROTECTED]  On Sept 7th, 
he sent a test case to the list demonstrating the bug.  His test case 
now works successfully with this patch.  If no one has any objections to 
this patch, I will apply it in a couple of days.

thanks,
--Barry
*** ./org/postgresql/jdbc1/DatabaseMetaData.java.orig   Tue Oct 16 13:18:21 2001
--- ./org/postgresql/jdbc1/DatabaseMetaData.java        Tue Oct 16 13:30:53 2001
***************
*** 2713,2719 ****
                                "a.amname, " +
                                "x.indkey, " +
                                "c.reltuples, " +
!                               "c.relpages " +
                                "FROM pg_index x, pg_class c, pg_class i, pg_am a " +
                                "WHERE ((c.relname = '" + tableName.toLowerCase() + 
"') " +
                                " AND (c.oid = x.indrelid) " +
--- 2713,2720 ----
                                "a.amname, " +
                                "x.indkey, " +
                                "c.reltuples, " +
!                               "c.relpages, " +
!                                 "x.indexrelid " +
                                "FROM pg_index x, pg_class c, pg_class i, pg_am a " +
                                "WHERE ((c.relname = '" + tableName.toLowerCase() + 
"') " +
                                " AND (c.oid = x.indrelid) " +
***************
*** 2747,2753 ****
                                Integer.toString(tableIndexHashed).getBytes() :
                  Integer.toString(tableIndexOther).getBytes();
              tuple[7] = Integer.toString(i + 1).getBytes();
!             java.sql.ResultSet columnNameRS = connection.ExecSQL("select a.attname 
FROM pg_attribute a, pg_class c WHERE (a.attnum = " + columnOrdinals[i] + ") AND 
(a.attrelid = " + r.getInt(8) + ")");
              columnNameRS.next();
              tuple[8] = columnNameRS.getBytes(1);
              tuple[9] = null;  // sort sequence ???
--- 2748,2754 ----
                                Integer.toString(tableIndexHashed).getBytes() :
                  Integer.toString(tableIndexOther).getBytes();
              tuple[7] = Integer.toString(i + 1).getBytes();
!             java.sql.ResultSet columnNameRS = connection.ExecSQL("select a.attname 
FROM pg_attribute a WHERE (a.attnum = " + columnOrdinals[i] + ") AND (a.attrelid = " + 
r.getInt(9) + ")");
              columnNameRS.next();
              tuple[8] = columnNameRS.getBytes(1);
              tuple[9] = null;  // sort sequence ???
*** ./org/postgresql/jdbc2/DatabaseMetaData.java.orig   Tue Oct 16 13:17:13 2001
--- ./org/postgresql/jdbc2/DatabaseMetaData.java        Tue Oct 16 13:31:54 2001
***************
*** 2716,2722 ****
                                "a.amname, " +
                                "x.indkey, " +
                                "c.reltuples, " +
!                               "c.relpages " +
                                "FROM pg_index x, pg_class c, pg_class i, pg_am a " +
                                "WHERE ((c.relname = '" + tableName.toLowerCase() + 
"') " +
                                " AND (c.oid = x.indrelid) " +
--- 2716,2723 ----
                                "a.amname, " +
                                "x.indkey, " +
                                "c.reltuples, " +
!                               "c.relpages, " +
!                                 "x.indexrelid " +
                                "FROM pg_index x, pg_class c, pg_class i, pg_am a " +
                                "WHERE ((c.relname = '" + tableName.toLowerCase() + 
"') " +
                                " AND (c.oid = x.indrelid) " +
***************
*** 2750,2756 ****
                                Integer.toString(tableIndexHashed).getBytes() :
                  Integer.toString(tableIndexOther).getBytes();
              tuple[7] = Integer.toString(i + 1).getBytes();
!             java.sql.ResultSet columnNameRS = connection.ExecSQL("select a.attname 
FROM pg_attribute a, pg_class c WHERE (a.attnum = " + columnOrdinals[i] + ") AND 
(a.attrelid = " + r.getInt(8) + ")");
              columnNameRS.next();
              tuple[8] = columnNameRS.getBytes(1);
              tuple[9] = null;  // sort sequence ???
--- 2751,2757 ----
                                Integer.toString(tableIndexHashed).getBytes() :
                  Integer.toString(tableIndexOther).getBytes();
              tuple[7] = Integer.toString(i + 1).getBytes();
!             java.sql.ResultSet columnNameRS = connection.ExecSQL("select a.attname 
FROM pg_attribute a WHERE (a.attnum = " + columnOrdinals[i] + ") AND (a.attrelid = " + 
r.getInt(9) + ")");
              columnNameRS.next();
              tuple[8] = columnNameRS.getBytes(1);
              tuple[9] = null;  // sort sequence ???

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to