]> granicus.if.org Git - postgresql/commitdiff
Applied patches from Kris Jurka fixing a string tokenizing problem and
authorBarry Lind <barry@xythos.com>
Thu, 17 Apr 2003 04:37:07 +0000 (04:37 +0000)
committerBarry Lind <barry@xythos.com>
Thu, 17 Apr 2003 04:37:07 +0000 (04:37 +0000)
fixing an order by problem for index metadata results.
Also includes removing some unused code as well as a fix to the toString
method on statement.

 Modified Files:
  jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
  jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java

src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java

index 675321447c9ab7e13e2b8e1face48f2b410986c5..a7337d3923a5489f4cbe0511491fb7828d2cd6f5 100644 (file)
@@ -3143,26 +3143,23 @@ public abstract class AbstractJdbc1DatabaseMetaData
                        //<unnamed>\000ww\000vv\000UNSPECIFIED\000m\000a\000n\000b\000
                        // we are primarily interested in the column names which are the last items in the string
 
-                       StringTokenizer st = new StringTokenizer(targs, "\\000");
-                       if (st.hasMoreTokens()) {
-                               fkName = st.nextToken();
+                       Vector tokens = tokenize(targs, "\\000");
+                       if (tokens.size() > 0) {
+                               fkName = (String)tokens.elementAt(0);
                        }
 
                        if (fkName.startsWith("<unnamed>")) {
                                fkName = targs;
                        }
 
-                       int advance = 4 + (keySequence - 1) * 2;
-                       for ( int i = 1; st.hasMoreTokens() && i < advance ; i++ )
-                               st.nextToken(); // advance to the key column of interest
-
-                       if ( st.hasMoreTokens() )
-                       {
-                               fkeyColumn = st.nextToken();
+                       int element = 4 + (keySequence - 1) * 2;
+                       if (tokens.size() > element) {
+                               fkeyColumn = (String)tokens.elementAt(element);
                        }
-                       if ( st.hasMoreTokens() )
-                       {
-                               pkeyColumn = st.nextToken();
+
+                       element++;
+                       if (tokens.size() > element) {
+                               pkeyColumn = (String)tokens.elementAt(element);
                        }
 
                        tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
@@ -3568,8 +3565,33 @@ public abstract class AbstractJdbc1DatabaseMetaData
                if (unique) {
                        sql += " AND i.indisunique ";
                }
-               sql += " ORDER BY NON_UNIQUE, TYPE, INDEX_NAME ";
+               sql += " ORDER BY NON_UNIQUE, TYPE, INDEX_NAME, ORDINAL_POSITION ";
                return connection.createStatement().executeQuery(sql);
        }
 
+       /**
+        * Tokenize based on words not on single characters.
+        */
+       private static Vector tokenize(String input, String delimiter) {
+               Vector result = new Vector();
+               int start = 0;
+               int end = input.length();
+               int delimiterSize = delimiter.length();
+
+               while (start < end) {
+                       int delimiterIndex = input.indexOf(delimiter,start);
+                       if (delimiterIndex < 0) {
+                               result.addElement(input.substring(start));
+                               break;
+                       } else {
+                               String token = input.substring(start,delimiterIndex);
+                               result.addElement(token);
+                               start = delimiterIndex + delimiterSize;
+                       }
+               }
+               return result;
+       }
+
+               
+
 }
index e5b9fe780f020c87f8ab398405a36d864a58be2c..8f39d2bb24c0aa512eae8a932ac47c6fb6fdc676 100644 (file)
@@ -13,7 +13,7 @@ import org.postgresql.core.QueryExecutor;
 import org.postgresql.largeobject.*;
 import org.postgresql.util.*;
 
-/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.19 2003/04/13 04:10:07 barry Exp $
+/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.20 2003/04/17 04:37:07 barry Exp $
  * This class defines methods of the jdbc1 specification.  This class is
  * extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
  * methods.  The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
@@ -1512,35 +1512,7 @@ public abstract class AbstractJdbc1Statement implements BaseStatement
        {
                if (x == null)
                {
-                       int l_sqlType;
-                       if (x instanceof String)
-                               l_sqlType = Types.VARCHAR;
-                       else if (x instanceof BigDecimal)
-                               l_sqlType = Types.DECIMAL;
-                       else if (x instanceof Short)
-                               l_sqlType = Types.SMALLINT;
-                       else if (x instanceof Integer)
-                               l_sqlType = Types.INTEGER;
-                       else if (x instanceof Long)
-                               l_sqlType = Types.BIGINT;
-                       else if (x instanceof Float)
-                               l_sqlType = Types.FLOAT;
-                       else if (x instanceof Double)
-                               l_sqlType = Types.DOUBLE;
-                       else if (x instanceof byte[])
-                               l_sqlType = Types.BINARY;
-                       else if (x instanceof java.sql.Date)
-                               l_sqlType = Types.DATE;
-                       else if (x instanceof Time)
-                               l_sqlType = Types.TIME;
-                       else if (x instanceof Timestamp)
-                               l_sqlType = Types.TIMESTAMP;
-                       else if (x instanceof Boolean)
-                               l_sqlType = Types.OTHER;
-                       else 
-                               l_sqlType = Types.OTHER;
-
-                       setNull(parameterIndex, l_sqlType);
+                       setNull(parameterIndex, Types.OTHER);
                        return ;
                }
                if (x instanceof String)
@@ -1879,7 +1851,7 @@ public abstract class AbstractJdbc1Statement implements BaseStatement
        public String toString()
        {
                if (m_sqlFragments == null)
-                       return "";
+                       return super.toString();
 
                synchronized (sbuf)
                {