mirror of
https://github.com/postgres/postgres.git
synced 2025-09-11 00:12:06 +03:00
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
This commit is contained in:
@@ -3136,20 +3136,17 @@ public abstract class AbstractJdbc1DatabaseMetaData
|
|||||||
//<unnamed>\000ww\000vv\000UNSPECIFIED\000m\000a\000n\000b\000
|
//<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
|
// we are primarily interested in the column names which are the last items in the string
|
||||||
|
|
||||||
StringTokenizer st = new StringTokenizer(targs, "\\000");
|
Vector tokens = tokenize(targs, "\\000");
|
||||||
|
|
||||||
int advance = 4 + (keySequence - 1) * 2;
|
int element = 4 + (keySequence - 1) * 2;
|
||||||
for ( int i = 0; st.hasMoreTokens() && i < advance ; i++ )
|
if (tokens.size() > element) {
|
||||||
st.nextToken(); // advance to the key column of interest
|
fkeyColumn = (String)tokens.elementAt(element);
|
||||||
|
}
|
||||||
if ( st.hasMoreTokens() )
|
|
||||||
{
|
element++;
|
||||||
fkeyColumn = st.nextToken();
|
if (tokens.size() > element) {
|
||||||
}
|
pkeyColumn = (String)tokens.elementAt(element);
|
||||||
if ( st.hasMoreTokens() )
|
}
|
||||||
{
|
|
||||||
pkeyColumn = st.nextToken();
|
|
||||||
}
|
|
||||||
|
|
||||||
tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
|
tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
|
||||||
tuple[7] = fkeyColumn.getBytes(); //FKCOLUMN_NAME
|
tuple[7] = fkeyColumn.getBytes(); //FKCOLUMN_NAME
|
||||||
@@ -3553,8 +3550,33 @@ public abstract class AbstractJdbc1DatabaseMetaData
|
|||||||
if (unique) {
|
if (unique) {
|
||||||
sql += " AND i.indisunique ";
|
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);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ import java.util.Vector;
|
|||||||
import org.postgresql.largeobject.*;
|
import org.postgresql.largeobject.*;
|
||||||
import org.postgresql.util.*;
|
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
|
* This class defines methods of the jdbc1 specification. This class is
|
||||||
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
||||||
* methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
|
* 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)
|
if (x == null)
|
||||||
{
|
{
|
||||||
int l_sqlType;
|
setNull(parameterIndex, Types.OTHER);
|
||||||
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);
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if (x instanceof String)
|
if (x instanceof String)
|
||||||
@@ -1768,6 +1740,10 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme
|
|||||||
*/
|
*/
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
//if no sql yet set, return default toString()
|
||||||
|
if (m_sqlFragments == null)
|
||||||
|
return super.toString();
|
||||||
|
|
||||||
synchronized (sbuf)
|
synchronized (sbuf)
|
||||||
{
|
{
|
||||||
sbuf.setLength(0);
|
sbuf.setLength(0);
|
||||||
|
Reference in New Issue
Block a user