Skip to content

Commit 454f44e

Browse files
committed
Attached is a patch to remove some redundant code in the JDBC driver.
* Merges identical code from org.postgresql.jdbc[1|2].Statement into org.postgresql.Statement. * Moves escapeSQL() method from Connection to Statement (the only place it's used) * Minor cleanup of the new isolation level stuff. * Minor cleanup of version string handling. Anders Bengtsson
1 parent 13923be commit 454f44e

File tree

4 files changed

+265
-508
lines changed

4 files changed

+265
-508
lines changed

src/interfaces/jdbc/org/postgresql/Connection.java

Lines changed: 31 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.postgresql.core.Encoding;
1212

1313
/**
14-
* $Id: Connection.java,v 1.24 2001/08/07 17:45:29 momjian Exp $
14+
* $Id: Connection.java,v 1.25 2001/08/10 14:42:07 momjian Exp $
1515
*
1616
* This abstract class is used by org.postgresql.Driver to open either the JDBC1 or
1717
* JDBC2 versions of the Connection class.
@@ -37,7 +37,6 @@ public abstract class Connection
3737
*/
3838
private Encoding encoding = Encoding.defaultEncoding();
3939

40-
private String dbVersionLong;
4140
private String dbVersionNumber;
4241

4342
public boolean CONNECTION_OK = true;
@@ -257,8 +256,6 @@ protected void openConnection(String host, int port, Properties info, String dat
257256

258257
firstWarning = null;
259258

260-
String dbEncoding;
261-
262259
// "pg_encoding_to_char(1)" will return 'EUC_JP' for a backend compiled with multibyte,
263260
// otherwise it's hardcoded to 'SQL_ASCII'.
264261
// If the backend doesn't know about multibyte we can't assume anything about the encoding
@@ -276,8 +273,10 @@ protected void openConnection(String host, int port, Properties info, String dat
276273
if (! resultSet.next()) {
277274
throw new PSQLException("postgresql.con.failed", "failed getting backend encoding");
278275
}
279-
dbVersionLong = resultSet.getString(1);
280-
dbEncoding = resultSet.getString(2);
276+
String version = resultSet.getString(1);
277+
dbVersionNumber = extractVersionNumber(version);
278+
279+
String dbEncoding = resultSet.getString(2);
281280
encoding = Encoding.getEncoding(dbEncoding, info.getProperty("charSet"));
282281

283282
// Initialise object handling
@@ -1002,25 +1001,22 @@ public void setTransactionIsolation(int level) throws SQLException {
10021001
//this can be simplified
10031002
isolationLevel = level;
10041003
String isolationLevelSQL;
1005-
switch(isolationLevel) {
1006-
case java.sql.Connection.TRANSACTION_READ_COMMITTED:
1007-
if (haveMinimumServerVersion("7.1")) {
1008-
isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED";
1009-
} else {
1010-
isolationLevelSQL = getIsolationLevelSQL();
1011-
}
1012-
break;
1013-
1014-
case java.sql.Connection.TRANSACTION_SERIALIZABLE:
1015-
if (haveMinimumServerVersion("7.1")) {
1016-
isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE";
1017-
} else {
1018-
isolationLevelSQL = getIsolationLevelSQL();
1019-
}
1020-
break;
10211004

1022-
default:
1023-
throw new PSQLException("postgresql.con.isolevel",new Integer(isolationLevel));
1005+
if (!haveMinimumServerVersion("7.1")) {
1006+
isolationLevelSQL = getIsolationLevelSQL();
1007+
} else {
1008+
isolationLevelSQL = "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ";
1009+
switch(isolationLevel) {
1010+
case java.sql.Connection.TRANSACTION_READ_COMMITTED:
1011+
isolationLevelSQL += "READ COMMITTED";
1012+
break;
1013+
case java.sql.Connection.TRANSACTION_SERIALIZABLE:
1014+
isolationLevelSQL += "SERIALIZABLE";
1015+
break;
1016+
default:
1017+
throw new PSQLException("postgresql.con.isolevel",
1018+
new Integer(isolationLevel));
1019+
}
10241020
}
10251021
ExecSQL(isolationLevelSQL);
10261022
}
@@ -1094,59 +1090,23 @@ public void finalize() throws Throwable
10941090
close();
10951091
}
10961092

1097-
/**
1098-
* This is an attempt to implement SQL Escape clauses
1099-
*/
1100-
public String EscapeSQL(String sql) {
1101-
//if (DEBUG) { System.out.println ("parseSQLEscapes called"); }
1102-
1103-
// If we find a "{d", assume we have a date escape.
1104-
//
1105-
// Since the date escape syntax is very close to the
1106-
// native Postgres date format, we just remove the escape
1107-
// delimiters.
1108-
//
1109-
// This implementation could use some optimization, but it has
1110-
// worked in practice for two years of solid use.
1111-
int index = sql.indexOf("{d");
1112-
while (index != -1) {
1113-
//System.out.println ("escape found at index: " + index);
1114-
StringBuffer buf = new StringBuffer(sql);
1115-
buf.setCharAt(index, ' ');
1116-
buf.setCharAt(index + 1, ' ');
1117-
buf.setCharAt(sql.indexOf('}', index), ' ');
1118-
sql = new String(buf);
1119-
index = sql.indexOf("{d");
1120-
}
1121-
//System.out.println ("modified SQL: " + sql);
1122-
return sql;
1123-
}
1124-
1125-
/**
1126-
* What is the version of the server
1127-
*
1128-
* @return the database version
1129-
* @exception SQLException if a database access error occurs
1130-
*/
1131-
public String getDBVersionNumber() throws SQLException
1093+
private static String extractVersionNumber(String fullVersionString)
11321094
{
1133-
if(dbVersionNumber == null) {
1134-
StringTokenizer versionParts = new StringTokenizer(dbVersionLong);
1095+
StringTokenizer versionParts = new StringTokenizer(fullVersionString);
11351096
versionParts.nextToken(); /* "PostgreSQL" */
1136-
dbVersionNumber = versionParts.nextToken(); /* "X.Y.Z" */
1137-
}
1138-
return dbVersionNumber;
1097+
return versionParts.nextToken(); /* "X.Y.Z" */
11391098
}
11401099

1100+
/**
1101+
* Get server version number
1102+
*/
1103+
public String getDBVersionNumber() {
1104+
return dbVersionNumber;
1105+
}
1106+
11411107
public boolean haveMinimumServerVersion(String ver) throws SQLException
11421108
{
1143-
if (getDBVersionNumber().compareTo(ver)>=0)
1144-
return true;
1145-
else
1146-
return false;
1109+
return (getDBVersionNumber().compareTo(ver) >= 0);
11471110
}
1148-
1149-
1150-
11511111
}
11521112

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy