aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Lind <barry@xythos.com>2003-04-17 04:19:55 +0000
committerBarry Lind <barry@xythos.com>2003-04-17 04:19:55 +0000
commit52eeb494e784a7e83eaa4d4d76e201abc596f486 (patch)
tree9957974d65b3b1cb5bb4540c9a1127bb25248335
parentdc3e14d3d5cb0cae35982accf4126e0affd2c8e5 (diff)
downloadpostgresql-52eeb494e784a7e83eaa4d4d76e201abc596f486.tar.gz
postgresql-52eeb494e784a7e83eaa4d4d76e201abc596f486.zip
Applied patches from Kris Jurka fixing a string tokenizing problem and
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: Tag: REL7_3_STABLE jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
-rw-r--r--src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java52
-rw-r--r--src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java36
2 files changed, 43 insertions, 45 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
index 305b88e81ff..03ce99a2bb1 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
@@ -3136,20 +3136,17 @@ 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");
-
- int advance = 4 + (keySequence - 1) * 2;
- for ( int i = 0; st.hasMoreTokens() && i < advance ; i++ )
- st.nextToken(); // advance to the key column of interest
-
- if ( st.hasMoreTokens() )
- {
- fkeyColumn = st.nextToken();
- }
- if ( st.hasMoreTokens() )
- {
- pkeyColumn = st.nextToken();
- }
+ Vector tokens = tokenize(targs, "\\000");
+
+ int element = 4 + (keySequence - 1) * 2;
+ if (tokens.size() > element) {
+ fkeyColumn = (String)tokens.elementAt(element);
+ }
+
+ element++;
+ if (tokens.size() > element) {
+ pkeyColumn = (String)tokens.elementAt(element);
+ }
tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
tuple[7] = fkeyColumn.getBytes(); //FKCOLUMN_NAME
@@ -3553,8 +3550,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;
+ }
+
+
+
}
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
index bfb0f81eb6b..d3e6022f0d1 100644
--- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
+++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
@@ -8,7 +8,7 @@ import java.util.Vector;
import org.postgresql.largeobject.*;
import org.postgresql.util.*;
-/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.12.2.3 2003/02/12 17:14:49 barry Exp $
+/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.12.2.4 2003/04/17 04:19:55 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
@@ -1408,35 +1408,7 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme
{
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)
@@ -1768,6 +1740,10 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme
*/
public String toString()
{
+ //if no sql yet set, return default toString()
+ if (m_sqlFragments == null)
+ return super.toString();
+
synchronized (sbuf)
{
sbuf.setLength(0);