Mercurial > hg > monetdb-java
changeset 269:9c1ecdbbd9aa
Extend getColumnClassName() by also checking the connection's typeMap for Class names for types url and inet. Similar code as used in getParameterClassName().
Improve ParameterMetaData.isSigned() to return more correct value in case the parameter type is oid or ptr. Similar code as used in ResultSetMetaData.isSigned().
Improve ParameterMetaData.getParameterMode() to return ParameterMetaData.parameterModeIn as we currently only support INput parameters for prepared statements.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Thu, 14 Mar 2019 19:41:50 +0100 (2019-03-14) |
parents | ee4c826e3933 |
children | 926afbe567f5 |
files | src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java |
diffstat | 1 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java +++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java @@ -45,7 +45,7 @@ import java.util.Map; * * This implementation of the PreparedStatement interface uses the * capabilities of the MonetDB/SQL backend to prepare and execute - * queries. The backend takes care of finding the '?'s in the input and + * statements. The backend takes care of finding the '?'s in the input and * returns the types it expects for them. * * An example of a server response on a prepare query is: @@ -690,7 +690,15 @@ public class MonetPreparedStatement */ @Override public String getColumnClassName(int column) throws SQLException { - return MonetResultSet.getClassForType(getColumnType(column)).getName(); + String typeName = getColumnTypeName(column); + Map<String,Class<?>> map = getConnection().getTypeMap(); + Class<?> c; + if (map.containsKey(typeName)) { + c = (Class)map.get(typeName); + } else { + c = MonetResultSet.getClassForType(getColumnType(column)); + } + return c.getName(); } /** @@ -789,7 +797,6 @@ public class MonetPreparedStatement if (column[i] == null) cnt++; } - return cnt; } @@ -828,11 +835,18 @@ public class MonetPreparedStatement case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: - case Types.BIGINT: case Types.REAL: case Types.FLOAT: case Types.DOUBLE: return true; + case Types.BIGINT: + String monettype = getParameterTypeName(param); + if (monettype != null) { + if ("oid".equals(monettype) + || "ptr".equals(monettype)) + return false; + } + return true; case Types.BIT: // we don't use type BIT, it's here for completeness case Types.BOOLEAN: case Types.DATE: @@ -940,7 +954,7 @@ public class MonetPreparedStatement /** * Retrieves the designated parameter's mode. - * For MonetDB/SQL this is currently always unknown. + * For MonetDB/SQL we currently only support INput parameters. * * @param param - the first parameter is 1, the second is 2, ... * @return mode of the parameter; one of @@ -952,7 +966,7 @@ public class MonetPreparedStatement */ @Override public int getParameterMode(int param) throws SQLException { - return ParameterMetaData.parameterModeUnknown; + return ParameterMetaData.parameterModeIn; } }; }