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]