mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
schema awareness patch provided by Kris Jurka
This commit is contained in:
@ -14,7 +14,7 @@ import org.postgresql.largeobject.LargeObjectManager;
|
||||
import org.postgresql.util.*;
|
||||
|
||||
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Connection.java,v 1.9 2002/09/11 05:38:44 barry Exp $
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Connection.java,v 1.10 2002/10/01 00:39:01 davec Exp $
|
||||
* This class defines methods of the jdbc1 specification. This class is
|
||||
* extended by org.postgresql.jdbc2.AbstractJdbc2Connection which adds the jdbc2
|
||||
* methods. The real Connection class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Connection
|
||||
@ -1147,6 +1147,11 @@ public abstract class AbstractJdbc1Connection implements org.postgresql.PGConnec
|
||||
return dbVersionNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the server we are connected to running at least this version?
|
||||
* This comparison method will fail whenever a major or minor version
|
||||
* goes to two digits (10.3.0) or (7.10.1).
|
||||
*/
|
||||
public boolean haveMinimumServerVersion(String ver) throws SQLException
|
||||
{
|
||||
return (getDBVersionNumber().compareTo(ver) >= 0);
|
||||
@ -1184,16 +1189,29 @@ public abstract class AbstractJdbc1Connection implements org.postgresql.PGConnec
|
||||
// it's not in the cache, so perform a query, and add the result to the cache
|
||||
if (sqlType == null)
|
||||
{
|
||||
ResultSet result = ExecSQL("select typname from pg_type where oid = " + oid);
|
||||
if (((AbstractJdbc1ResultSet)result).getColumnCount() != 1 || ((AbstractJdbc1ResultSet)result).getTupleCount() != 1)
|
||||
throw new PSQLException("postgresql.unexpected");
|
||||
result.next();
|
||||
String pgType = result.getString(1);
|
||||
String pgType;
|
||||
// The opaque type does not exist in the system catalogs.
|
||||
if (oid == 0) {
|
||||
pgType = "opaque";
|
||||
} else {
|
||||
String sql;
|
||||
if (haveMinimumServerVersion("7.3")) {
|
||||
sql = "SELECT typname FROM pg_catalog.pg_type WHERE oid = " +oid;
|
||||
} else {
|
||||
sql = "SELECT typname FROM pg_type WHERE oid = " +oid;
|
||||
}
|
||||
ResultSet result = ExecSQL(sql);
|
||||
if (((AbstractJdbc1ResultSet)result).getColumnCount() != 1 || ((AbstractJdbc1ResultSet)result).getTupleCount() != 1) {
|
||||
throw new PSQLException("postgresql.unexpected");
|
||||
}
|
||||
result.next();
|
||||
pgType = result.getString(1);
|
||||
result.close();
|
||||
}
|
||||
Integer iOid = new Integer(oid);
|
||||
sqlType = new Integer(getSQLType(result.getString(1)));
|
||||
sqlType = new Integer(getSQLType(pgType));
|
||||
sqlTypeCache.put(iOid, sqlType);
|
||||
pgTypeCache.put(iOid, pgType);
|
||||
result.close();
|
||||
}
|
||||
|
||||
return sqlType.intValue();
|
||||
@ -1217,8 +1235,13 @@ public abstract class AbstractJdbc1Connection implements org.postgresql.PGConnec
|
||||
else
|
||||
{
|
||||
// it's not in the cache, so perform a query, and add the result to the cache
|
||||
ResultSet result = ExecSQL("select oid from pg_type where typname='"
|
||||
+ typeName + "'");
|
||||
String sql;
|
||||
if (haveMinimumServerVersion("7.3")) {
|
||||
sql = "SELECT oid FROM pg_catalog.pg_type WHERE typname='" + typeName + "'";
|
||||
} else {
|
||||
sql = "SELECT oid FROM pg_type WHERE typname='" + typeName + "'";
|
||||
}
|
||||
ResultSet result = ExecSQL(sql);
|
||||
if (((AbstractJdbc1ResultSet)result).getColumnCount() != 1 || ((AbstractJdbc1ResultSet)result).getTupleCount() != 1)
|
||||
throw new PSQLException("postgresql.unexpected");
|
||||
result.next();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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.10 2002/09/14 03:52:56 barry Exp $
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.11 2002/10/01 00:39:02 davec 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
|
||||
@ -1757,8 +1757,8 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme
|
||||
*/
|
||||
private void setSerialize(int parameterIndex, long x, String classname) throws SQLException
|
||||
{
|
||||
// converts . to _, toLowerCase, and ensures length<32
|
||||
String tablename = Serialize.toPostgreSQL( classname );
|
||||
// converts . to _, toLowerCase, and ensures length < max name length
|
||||
String tablename = Serialize.toPostgreSQL((java.sql.Connection)connection, classname );
|
||||
DriverManager.println("setSerialize: setting " + x + "::" + tablename );
|
||||
|
||||
// OID reference to tablerow-type must be cast like: <oid>::<tablename>
|
||||
|
Reference in New Issue
Block a user