Return-Path:
* ingres.jdbc.username = test * ingres.jdbc.password = secret @@ -64,10 +65,10 @@ public class IngresAdapter extends JdbcAdapter { public static final String TRIM_FUNCTION = "TRIM"; public IngresAdapter(@Inject RuntimeProperties runtimeProperties, - @Inject(Constants.SERVER_DEFAULT_TYPES_LIST) ListdefaultExtendedTypes, - @Inject(Constants.SERVER_USER_TYPES_LIST) List userExtendedTypes, - @Inject(Constants.SERVER_TYPE_FACTORIES_LIST) List extendedTypeFactories, - @Inject(Constants.SERVER_RESOURCE_LOCATOR) ResourceLocator resourceLocator) { + @Inject(Constants.SERVER_DEFAULT_TYPES_LIST) List defaultExtendedTypes, + @Inject(Constants.SERVER_USER_TYPES_LIST) List userExtendedTypes, + @Inject(Constants.SERVER_TYPE_FACTORIES_LIST) List extendedTypeFactories, + @Inject(Constants.SERVER_RESOURCE_LOCATOR) ResourceLocator resourceLocator) { super(runtimeProperties, defaultExtendedTypes, userExtendedTypes, extendedTypeFactories, resourceLocator); setSupportsUniqueConstraints(true); setSupportsGeneratedKeys(true); @@ -109,13 +110,13 @@ public class IngresAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { - if (object == null && (sqlType == Types.BOOLEAN || sqlType == Types.BIT)) { - statement.setNull(pos, Types.VARCHAR); + if (binding.getValue() == null && (binding.getAttribute().getType() == Types.BOOLEAN || binding.getAttribute().getType() == Types.BIT)) { + statement.setNull(binding.getStatementPosition(), Types.VARCHAR); } else { - super.bindParameter(statement, object, pos, sqlType, scale); + super.bindParameter(statement, binding); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java index 188f859..961f653 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java @@ -19,36 +19,18 @@ package org.apache.cayenne.dba.mysql; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Types; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; - import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory; import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory; import org.apache.cayenne.access.translator.select.QualifierTranslator; import org.apache.cayenne.access.translator.select.QueryAssembler; import org.apache.cayenne.access.translator.select.SelectTranslator; -import org.apache.cayenne.access.types.ByteArrayType; -import org.apache.cayenne.access.types.CharType; -import org.apache.cayenne.access.types.ExtendedType; -import org.apache.cayenne.access.types.ExtendedTypeFactory; -import org.apache.cayenne.access.types.ExtendedTypeMap; +import org.apache.cayenne.access.types.*; import org.apache.cayenne.configuration.Constants; import org.apache.cayenne.configuration.RuntimeProperties; -import org.apache.cayenne.dba.DefaultQuotingStrategy; -import org.apache.cayenne.dba.JdbcAdapter; -import org.apache.cayenne.dba.PkGenerator; -import org.apache.cayenne.dba.QuotingStrategy; -import org.apache.cayenne.dba.TypesMapping; +import org.apache.cayenne.dba.*; import org.apache.cayenne.di.Inject; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; @@ -60,6 +42,11 @@ import org.apache.cayenne.query.SQLAction; import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.resource.ResourceLocator; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Types; +import java.util.*; + /** * DbAdapter implementation for MySQL RDBMS. * @@ -215,9 +202,10 @@ public class MySQLAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { - super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale); + binding.setType(mapNTypes(binding.getType())); + super.bindParameter(statement, binding); } private int mapNTypes(int sqlType) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java index 8c6a7fb..3b0c829 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java @@ -19,19 +19,6 @@ package org.apache.cayenne.dba.oracle; -import java.io.OutputStream; -import java.io.Writer; -import java.lang.reflect.Method; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Collections; -import java.util.List; - import org.apache.cayenne.CayenneException; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.OperationObserver; @@ -39,13 +26,16 @@ import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.log.JdbcEventLogger; import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.BatchQuery; -import org.apache.cayenne.query.BatchQueryRow; -import org.apache.cayenne.query.InsertBatchQuery; -import org.apache.cayenne.query.SQLAction; -import org.apache.cayenne.query.UpdateBatchQuery; +import org.apache.cayenne.query.*; import org.apache.cayenne.util.Util; +import java.io.OutputStream; +import java.io.Writer; +import java.lang.reflect.Method; +import java.sql.*; +import java.util.Collections; +import java.util.List; + /** * @since 3.0 */ @@ -59,8 +49,9 @@ class Oracle8LOBBatchAction implements SQLAction { throws SQLException, Exception { for (ParameterBinding b : bindings) { - adapter.bindParameter(statement, b.getValue(), b.getStatementPosition(), b.getAttribute().getType(), b - .getAttribute().getScale()); + ParameterBinding binding = new ParameterBinding(b.getAttribute(), adapter.getExtendedTypes() + .getRegisteredType(b.getValue().getClass())); + adapter.bindParameter(statement, binding); } } @@ -150,7 +141,11 @@ class Oracle8LOBBatchAction implements SQLAction { Object value = qualifierValues.get(i); DbAttribute attribute = qualifierAttributes.get(i); - adapter.bindParameter(selectStatement, value, i + 1, attribute.getType(), attribute.getScale()); + ParameterBinding binding = new ParameterBinding(attribute, adapter.getExtendedTypes() + .getRegisteredType(value.getClass())); + binding.setStatementPosition(i + 1); + binding.setValue(value); + adapter.bindParameter(selectStatement,binding); } try (ResultSet result = selectStatement.executeQuery();) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java index b0c6afa..24f06b8 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java @@ -21,6 +21,7 @@ package org.apache.cayenne.dba.oracle; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory; import org.apache.cayenne.access.translator.select.QualifierTranslator; import org.apache.cayenne.access.translator.select.QueryAssembler; @@ -230,17 +231,18 @@ public class OracleAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { // Oracle doesn't support BOOLEAN even when binding NULL, so have to // intercept // NULL Boolean here, as super doesn't pass it through ExtendedType... - if (object == null && sqlType == Types.BOOLEAN) { + if (binding.getValue() == null && binding.getAttribute().getType() == Types.BOOLEAN) { ExtendedType typeProcessor = getExtendedTypes().getRegisteredType(Boolean.class); - typeProcessor.setJdbcObject(statement, object, pos, sqlType, scale); + typeProcessor.setJdbcObject(statement, binding.getValue(), binding.getStatementPosition(), binding + .getAttribute().getType(),binding.getAttribute().getScale()); } else { - super.bindParameter(statement, object, pos, sqlType, scale); + super.bindParameter(statement, binding); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java index ee45df1..e4c7eff 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java @@ -21,6 +21,7 @@ package org.apache.cayenne.dba.postgres; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.translator.select.QualifierTranslator; import org.apache.cayenne.access.translator.select.QueryAssembler; import org.apache.cayenne.access.translator.select.SelectTranslator; @@ -130,9 +131,10 @@ public class PostgresAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { - super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale); + binding.setType(mapNTypes(binding.getType())); + super.bindParameter(statement, binding); } private int mapNTypes(int sqlType) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java index f82fc3f..29afb68 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java @@ -19,6 +19,7 @@ package org.apache.cayenne.dba.sqlite; import org.apache.cayenne.access.DataNode; +import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.access.types.ExtendedTypeFactory; import org.apache.cayenne.access.types.ExtendedTypeMap; @@ -102,8 +103,8 @@ public class SQLiteAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) throws SQLException, Exception { - super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale); + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { + super.bindParameter(statement, binding); } private int mapNTypes(int sqlType) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java index 45a6f65..b7592d4 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java @@ -19,6 +19,7 @@ package org.apache.cayenne.dba.sybase; +import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory; import org.apache.cayenne.access.types.ByteArrayType; import org.apache.cayenne.access.types.ByteType; @@ -109,22 +110,22 @@ public class SybaseAdapter extends JdbcAdapter { } @Override - public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int precision) + public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { // Sybase driver doesn't like CLOBs and BLOBs as parameters - if (object == null) { - if (sqlType == Types.CLOB) { - sqlType = Types.VARCHAR; - } else if (sqlType == Types.BLOB) { - sqlType = Types.VARBINARY; + if (binding.getValue() == null) { + if (binding.getAttribute().getType() == Types.CLOB) { + binding.getAttribute().setType(Types.VARCHAR); + } else if (binding.getAttribute().getType() == Types.BLOB) { + binding.getAttribute().setType(Types.VARBINARY); } } - if (object == null && sqlType == 0) { - statement.setNull(pos, Types.VARCHAR); + if (binding.getValue() == null && binding.getAttribute().getType() == 0) { + statement.setNull(binding.getStatementPosition(), Types.VARCHAR); } else { - super.bindParameter(statement, object, pos, sqlType, precision); + super.bindParameter(statement, binding); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfb4747d/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java index 4426e78..6fe3937 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java @@ -38,17 +38,14 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Date; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeThat; +import static org.junit.Assert.*; import static org.junit.Assume.assumeTrue; /** * Test Types mapping for selected columns */ @UseServerRuntime(CayenneProjects.RETURN_TYPES_PROJECT) -public class ReturnTypesMappingIT extends ServerCase { +public class ReturnTypesMappingIT extends ServerCase { @Inject private DataContext context;