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;
 			}
 		};
 	}