patch for getTables to fix problems with backends before 7.3 by Kris Jurka
authorDave Cramer
Wed, 11 Dec 2002 21:02:58 +0000 (21:02 +0000)
committerDave Cramer
Wed, 11 Dec 2002 21:02:58 +0000 (21:02 +0000)
src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java

index 90635e0a6b8aca79a6aa23f83a1ce40d97982dbe..00a9bee46bf2fd46919a592833e919103cca348a 100644 (file)
@@ -1730,12 +1730,14 @@ public abstract class AbstractJdbc1DatabaseMetaData
        } else if (connection.haveMinimumServerVersion("7.1")) {
            sql = "SELECT NULL AS PROCEDURE_CAT, NULL AS PROCEDURE_SCHEM, p.proname AS PROCEDURE_NAME, NULL, NULL, NULL, d.description AS REMARKS, "+java.sql.DatabaseMetaData.procedureReturnsResult+" AS PROCEDURE_TYPE "+
                " FROM pg_proc p "+
-               " LEFT JOIN pg_description d ON (p.oid=d.objoid) "+
-               " LEFT JOIN pg_class c ON (d.classoid=c.oid AND c.relname='pg_proc') ";
-               if (procedureNamePattern != null) {
-                   sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' ";
-               }
-               sql += " ORDER BY PROCEDURE_NAME ";
+               " LEFT JOIN pg_description d ON (p.oid=d.objoid) ";
+           if (connection.haveMinimumServerVersion("7.2")) {
+               sql += " LEFT JOIN pg_class c ON (d.classoid=c.oid AND c.relname='pg_proc') ";
+           }
+           if (procedureNamePattern != null) {
+               sql += " WHERE p.proname LIKE '"+escapeQuotes(procedureNamePattern)+"' ";
+           }
+           sql += " ORDER BY PROCEDURE_NAME ";
        } else {
            sql = "SELECT NULL AS PROCEDURE_CAT, NULL AS PROCEDURE_SCHEM, p.proname AS PROCEDURE_NAME, NULL, NULL, NULL, NULL AS REMARKS, "+java.sql.DatabaseMetaData.procedureReturnsResult+" AS PROCEDURE_TYPE "+
                " FROM pg_proc p ";
@@ -1995,9 +1997,6 @@ public abstract class AbstractJdbc1DatabaseMetaData
            if (schemaPattern != null && !"".equals(schemaPattern)) {
                select += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' ";
            }
-           if (tableNamePattern != null) {
-               select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' ";
-           }
            orderby = " ORDER BY TABLE_TYPE,TABLE_SCHEM,TABLE_NAME ";
        } else {
            useSchemas = "NOSCHEMAS";
@@ -2035,12 +2034,17 @@ public abstract class AbstractJdbc1DatabaseMetaData
            " ELSE NULL "+
            " END ";
            orderby = " ORDER BY TABLE_TYPE,TABLE_NAME ";
-           if (connection.haveMinimumServerVersion("7.1")) {
+           if (connection.haveMinimumServerVersion("7.2")) {
                select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, c.relname AS TABLE_NAME, "+tableType+" AS TABLE_TYPE, d.description AS REMARKS "+
                    " FROM pg_class c "+
                    " LEFT JOIN pg_description d ON (c.oid=d.objoid AND d.objsubid = 0) "+
                    " LEFT JOIN pg_class dc ON (d.classoid = dc.oid AND dc.relname='pg_class') "+
                    " WHERE true ";
+           } else if (connection.haveMinimumServerVersion("7.1")) {
+               select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, c.relname AS TABLE_NAME, "+tableType+" AS TABLE_TYPE, d.description AS REMARKS "+
+                   " FROM pg_class c "+
+                   " LEFT JOIN pg_description d ON (c.oid=d.objoid) "+
+                   " WHERE true ";
            } else {
                select = "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, c.relname AS TABLE_NAME, "+tableType+" AS TABLE_TYPE, NULL AS REMARKS "+
                    " FROM pg_class c "+
@@ -2051,6 +2055,9 @@ public abstract class AbstractJdbc1DatabaseMetaData
        if (types == null) {
            types = defaultTableTypes;
        }
+       if (tableNamePattern != null) {
+           select += " AND c.relname LIKE '"+escapeQuotes(tableNamePattern)+"' ";
+       }
        String sql = select;
        sql += " AND (false ";
        for (int i=0; i
@@ -2288,7 +2295,7 @@ public abstract class AbstractJdbc1DatabaseMetaData
            if (schemaPattern != null && !"".equals(schemaPattern)) {
                sql += " AND n.nspname LIKE '"+escapeQuotes(schemaPattern)+"' ";
            }
-       } else if (connection.haveMinimumServerVersion("7.1")) {
+       } else if (connection.haveMinimumServerVersion("7.2")) {
            sql = "SELECT NULL::text AS nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,def.adsrc,dsc.description "+
                " FROM pg_class c "+
                " JOIN pg_attribute a ON (a.attrelid=c.oid) "+
@@ -2296,6 +2303,13 @@ public abstract class AbstractJdbc1DatabaseMetaData
                " LEFT JOIN pg_description dsc ON (c.oid=dsc.objoid AND a.attnum = dsc.objsubid) "+
                " LEFT JOIN pg_class dc ON (dc.oid=dsc.classoid AND dc.relname='pg_class') "+
                " WHERE a.attnum > 0 ";
+       } else if (connection.haveMinimumServerVersion("7.1")) {
+           sql = "SELECT NULL::text AS nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,def.adsrc,dsc.description "+
+               " FROM pg_class c "+
+               " JOIN pg_attribute a ON (a.attrelid=c.oid) "+
+               " LEFT JOIN pg_attrdef def ON (a.attrelid=def.adrelid AND a.attnum = def.adnum) "+
+               " LEFT JOIN pg_description dsc ON (a.oid=dsc.objoid) "+
+               " WHERE a.attnum > 0 ";
        } else {
            // if < 7.1 then don't get defaults or descriptions.
            sql = "SELECT NULL::text AS nspname,c.relname,a.attname,a.atttypid,a.attnotnull,a.atttypmod,a.attlen,a.attnum,NULL AS adsrc,NULL AS description "+