Thread: Allow the jdbc driver to retrieve NAMEDATALEN

Allow the jdbc driver to retrieve NAMEDATALEN

From
Kris Jurka
Date:

Make the DatabaseMetaData class query the backend to determine the
maximum name length instead of guessing.

Also the maximum name length is NAMEDATALEN - 1.

Kris JurkaIndex: src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v
retrieving revision 1.5
diff -c -r1.5 AbstractJdbc1DatabaseMetaData.java
*** src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/09/08 00:15:28    1.5
--- src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/09/08 02:11:04
***************
*** 27,45 ****
      protected static final int iInt2Oid = 21; // OID for int2
      protected static final int iInt4Oid = 23; // OID for int4
      protected static final int VARHDRSZ = 4;    // length for int4
!     protected static int NAME_SIZE = 64;    // length for name datatype

      public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn)
      {
          this.connection = conn;
          try {
              if (connection.haveMinimumServerVersion("7.3")) {
!                 NAME_SIZE = 64;
              } else {
!                 NAME_SIZE = 32;
              }
          } catch (SQLException l_se) {
!             //leave value at default
          }
      }

--- 27,54 ----
      protected static final int iInt2Oid = 21; // OID for int2
      protected static final int iInt4Oid = 23; // OID for int4
      protected static final int VARHDRSZ = 4;    // length for int4
!     protected static int NAME_SIZE = 63;    // length for name datatype

      public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn)
      {
          this.connection = conn;
+         String sql;
          try {
              if (connection.haveMinimumServerVersion("7.3")) {
!                 sql = "SELECT t.typlen FROM pg_catalog.pg_type t, pg_catalog.pg_namespace n WHERE
t.typnamespace=n.oidAND t.typname='name' AND n.nspname='pg_catalog'"; 
!                 NAME_SIZE = 63;
              } else {
!                 sql = "SELECT typlen FROM pg_type WHERE typname='name'";
!                 NAME_SIZE = 31;
              }
+             ResultSet rs = connection.createStatement().executeQuery(sql);
+             if (rs.next()) {
+                 NAME_SIZE = rs.getInt("typlen") - 1;
+             }
+             rs.close();
          } catch (SQLException l_se) {
!             // depending on the error the NAME_SIZE value will
!             // be the original or the value set before the query.
          }
      }



Re: Allow the jdbc driver to retrieve NAMEDATALEN

From
Barry Lind
Date:
Patch applied.

--Barry


Kris Jurka wrote:
>
> Make the DatabaseMetaData class query the backend to determine the
> maximum name length instead of guessing.
>
> Also the maximum name length is NAMEDATALEN - 1.
>
> Kris Jurka
>
>
> ------------------------------------------------------------------------
>
> Index: src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
> ===================================================================
> RCS file:
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v
> retrieving revision 1.5
> diff -c -r1.5 AbstractJdbc1DatabaseMetaData.java
> *** src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/09/08 00:15:28    1.5
> --- src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java    2002/09/08 02:11:04
> ***************
> *** 27,45 ****
>       protected static final int iInt2Oid = 21; // OID for int2
>       protected static final int iInt4Oid = 23; // OID for int4
>       protected static final int VARHDRSZ = 4;    // length for int4
> !     protected static int NAME_SIZE = 64;    // length for name datatype
>
>       public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn)
>       {
>           this.connection = conn;
>           try {
>               if (connection.haveMinimumServerVersion("7.3")) {
> !                 NAME_SIZE = 64;
>               } else {
> !                 NAME_SIZE = 32;
>               }
>           } catch (SQLException l_se) {
> !             //leave value at default
>           }
>       }
>
> --- 27,54 ----
>       protected static final int iInt2Oid = 21; // OID for int2
>       protected static final int iInt4Oid = 23; // OID for int4
>       protected static final int VARHDRSZ = 4;    // length for int4
> !     protected static int NAME_SIZE = 63;    // length for name datatype
>
>       public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn)
>       {
>           this.connection = conn;
> +         String sql;
>           try {
>               if (connection.haveMinimumServerVersion("7.3")) {
> !                 sql = "SELECT t.typlen FROM pg_catalog.pg_type t, pg_catalog.pg_namespace n WHERE
t.typnamespace=n.oidAND t.typname='name' AND n.nspname='pg_catalog'"; 
> !                 NAME_SIZE = 63;
>               } else {
> !                 sql = "SELECT typlen FROM pg_type WHERE typname='name'";
> !                 NAME_SIZE = 31;
>               }
> +             ResultSet rs = connection.createStatement().executeQuery(sql);
> +             if (rs.next()) {
> +                 NAME_SIZE = rs.getInt("typlen") - 1;
> +             }
> +             rs.close();
>           } catch (SQLException l_se) {
> !             // depending on the error the NAME_SIZE value will
> !             // be the original or the value set before the query.
>           }
>       }
>
>
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org