postgresql-jdbc.git / summary / log / commit / refs
commit d90e278bbf77ad7df869cfda1e00fa86bb00f9c3
Author: Dave Cramer <davecramer@gmail.com>
Date: Tue May 15 10:47:09 2012 +0000
Add support for hstore from Mikko Tiihonen
build.xml | 1 +
org/postgresql/jdbc2/AbstractJdbc2ResultSet.java | 11 +++++++++++
org/postgresql/jdbc2/AbstractJdbc2Statement.java | 16 ++++++++++++++++
3 files changed, 28 insertions(+)
diff --git a/build.xml b/build.xml
index e50860f4..b54d2ba9 100644
--- a/build.xml
+++ b/build.xml
@@ -443,6 +443,7 @@
<test name="org.postgresql.test.jdbc2.optional.OptionalTestSuite" outfile="${testResultsDir}/jdbc2optional"/>
<test name="org.postgresql.test.jdbc3.Jdbc3TestSuite" outfile="${testResultsDir}/jdbc3"/>
<test name="org.postgresql.test.xa.XATestSuite" outfile="${testResultsDir}/xa"/>
+ <test name="org.postgresql.test.extensions.ExtensionsSuite" outfile="${testResultsDir}/extensions"/>
<test name="org.postgresql.test.jdbc4.Jdbc4TestSuite" if="jdbc4tests" outfile="${testResultsDir}/jdbc4"/>
<test name="org.postgresql.test.ssl.SslTestSuite" if="jdbc4tests" outfile="${testResultsDir}/ssl"/>
</junit>
diff --git a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
index 5d840d8d..edbfdb1f 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.Calendar;
@@ -27,6 +28,7 @@ import java.util.Locale;
import org.postgresql.core.*;
import org.postgresql.largeobject.*;
import org.postgresql.util.ByteConverter;
+import org.postgresql.util.HStoreConverter;
import org.postgresql.util.PGobject;
import org.postgresql.util.PGbytea;
import org.postgresql.util.PGtokenizer;
@@ -214,6 +216,12 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
((AbstractJdbc2ResultSet)rs).setRefCursor(cursorName);
return rs;
}
+ if ("hstore".equals(type)) {
+ if (isBinary(columnIndex)) {
+ return HStoreConverter.fromBytes(this_row[columnIndex - 1], connection.getEncoding());
+ }
+ return HStoreConverter.fromString(getString(columnIndex));
+ }
// Caller determines what to do (JDBC3 overrides in this case)
return null;
@@ -1958,6 +1966,9 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
if (obj instanceof java.util.Date) {
return connection.getTimestampUtils().timeToString((java.util.Date) obj);
}
+ if ("hstore".equals(getPGType(columnIndex))) {
+ return HStoreConverter.toString((Map) obj);
+ }
return trimString(columnIndex, obj.toString());
}
diff --git a/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
index d9fd90c9..484d69fd 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2Statement.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
@@ -15,6 +15,7 @@ import java.math.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.TimerTask;
import java.util.TimeZone;
import java.util.Calendar;
@@ -24,6 +25,7 @@ import org.postgresql.largeobject.*;
import org.postgresql.core.*;
import org.postgresql.core.types.*;
import org.postgresql.util.ByteConverter;
+import org.postgresql.util.HStoreConverter;
import org.postgresql.util.PGBinaryObject;
import org.postgresql.util.PSQLException;
import org.postgresql.util.PSQLState;
@@ -1704,6 +1706,18 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
setString(parameterIndex, x.getValue(), oid);
}
}
+
+ private void setMap(int parameterIndex, Map x) throws SQLException {
+ int oid = connection.getTypeInfo().getPGType("hstore");
+ if (oid == Oid.UNSPECIFIED)
+ throw new PSQLException(GT.tr("No hstore extension installed."), PSQLState.INVALID_PARAMETER_TYPE);
+ if (connection.binaryTransferSend(oid)) {
+ byte[] data = HStoreConverter.toBytes(x, connection.getEncoding());
+ bindBytes(parameterIndex, data, oid);
+ } else {
+ setString(parameterIndex, HStoreConverter.toString(x), oid);
+ }
+ }
/*
* Set the value of a parameter using an object; use the java.lang
@@ -1898,6 +1912,8 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
setPGobject(parameterIndex, (PGobject)x);
else if (x instanceof Character)
setString(parameterIndex, ((Character)x).toString());
+ else if (x instanceof Map)
+ setMap(parameterIndex, (Map)x);
else
{
// Can't infer a type.
[parent: baa02e8232f3]