You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2017/01/24 13:23:08 UTC
[4/7] cayenne git commit: CAY-2050 | Choosing ExtendedType based on
object class
CAY-2050 | Choosing ExtendedType based on object class
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b99c2b4b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b99c2b4b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b99c2b4b
Branch: refs/heads/master
Commit: b99c2b4b1200a4acfb6a44fc7312b020dc3b1e25
Parents: efa48e5
Author: Savva Kolbachev <s....@gmail.com>
Authored: Sat Jan 21 17:17:34 2017 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Sat Jan 21 18:16:02 2017 +0300
----------------------------------------------------------------------
.../cayenne/access/jdbc/SQLTemplateAction.java | 33 ++++++------
.../access/translator/DbAttributeBinding.java | 5 +-
.../access/translator/ParameterBinding.java | 11 ++--
.../translator/ProcedureParameterBinding.java | 5 +-
.../translator/batch/DeleteBatchTranslator.java | 20 ++++----
.../translator/batch/InsertBatchTranslator.java | 18 ++++---
.../batch/SoftDeleteBatchTranslator.java | 11 ++--
.../translator/batch/UpdateBatchTranslator.java | 31 ++++++------
.../procedure/ProcedureTranslator.java | 23 +++++----
.../translator/select/QueryAssembler.java | 23 +++++----
.../org/apache/cayenne/dba/JdbcAdapter.java | 37 +++++++-------
.../dba/oracle/Oracle8LOBBatchAction.java | 53 ++++++++++++--------
.../dba/oracle/Oracle8LOBBatchTranslator.java | 22 ++++----
13 files changed, 160 insertions(+), 132 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
index eea8470..c8369a0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
@@ -19,6 +19,19 @@
package org.apache.cayenne.access.jdbc;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.CayenneException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ResultIterator;
@@ -40,19 +53,6 @@ import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.util.Util;
import org.apache.commons.collections.IteratorUtils;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/**
* Implements a strategy for execution of SQLTemplates.
*
@@ -235,9 +235,7 @@ public class SQLTemplateAction implements SQLAction {
RowDescriptorBuilder builder = configureRowDescriptorBuilder(compiled, resultSet);
RowReader<?> rowReader = dataNode.rowReader(builder.getDescriptor(types), queryMetadata);
- JDBCResultIterator result = new JDBCResultIterator(statement, resultSet, rowReader);
-
- ResultIterator it = result;
+ ResultIterator it = new JDBCResultIterator(statement, resultSet, rowReader);
if (iteratedResult) {
@@ -357,10 +355,11 @@ public class SQLTemplateAction implements SQLAction {
? getAdapter().getExtendedTypes().getRegisteredType(value.getClass())
: getAdapter().getExtendedTypes().getDefaultType();
- ParameterBinding binding = new ParameterBinding(extendedType);
+ ParameterBinding binding = new ParameterBinding();
binding.setType(bindings[i].getJdbcType());
binding.setStatementPosition(i + 1);
binding.setValue(value);
+ binding.setExtendedType(extendedType);
dataNode.getAdapter().bindParameter(preparedStatement, binding);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
index 523c473..78b6d71 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.cayenne.access.translator;
-import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.map.DbAttribute;
/**
@@ -30,8 +29,8 @@ public class DbAttributeBinding extends ParameterBinding {
private final DbAttribute attribute;
- public DbAttributeBinding(DbAttribute attribute, ExtendedType extendedType) {
- super(extendedType);
+ public DbAttributeBinding(DbAttribute attribute) {
+ super();
this.attribute = attribute;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
index 8ef6b28..68d68ba 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
@@ -35,9 +35,8 @@ public class ParameterBinding {
private Integer type;
private int scale;
- public ParameterBinding(ExtendedType extendedType) {
+ public ParameterBinding() {
this.statementPosition = EXCLUDED_POSITION;
- this.extendedType = extendedType;
}
public Object getValue() {
@@ -64,21 +63,27 @@ public class ParameterBinding {
return extendedType;
}
+ public void setExtendedType(ExtendedType extendedType) {
+ this.extendedType = extendedType;
+ }
+
/**
* Marks the binding object as excluded for the current iteration.
*/
public void exclude() {
this.statementPosition = EXCLUDED_POSITION;
this.value = null;
+ this.extendedType = null;
}
/**
* Sets the value of the binding and initializes statement position var,
* thus "including" this binding in the current iteration.
*/
- public void include(int statementPosition, Object value) {
+ public void include(int statementPosition, Object value, ExtendedType extendedType) {
this.statementPosition = statementPosition;
this.value = value;
+ this.extendedType = extendedType;
}
public Integer getType() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
index df15c96..6ccfaf2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.cayenne.access.translator;
-import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.map.ProcedureParameter;
/**
@@ -30,8 +29,8 @@ public class ProcedureParameterBinding extends ParameterBinding {
private final ProcedureParameter parameter;
- public ProcedureParameterBinding(ProcedureParameter procedureParameter, ExtendedType extendedType) {
- super(extendedType);
+ public ProcedureParameterBinding(ProcedureParameter procedureParameter) {
+ super();
this.parameter = procedureParameter;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
index 9660b3f..d42240e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
@@ -19,18 +19,17 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.DeleteBatchQuery;
-import java.util.Iterator;
-import java.util.List;
-
/**
* Translator for delete BatchQueries. Creates parameterized DELETE SQL
* statements.
@@ -82,11 +81,7 @@ public class DeleteBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[len];
for (int i = 0; i < len; i++) {
- DbAttribute a = attributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(attributes.get(i));
}
return bindings;
@@ -107,7 +102,12 @@ public class DeleteBatchTranslator extends DefaultBatchTranslator {
if (deleteBatch.isNull(b.getAttribute())) {
b.exclude();
} else {
- b.include(j++, row.getValue(i));
+ Object value = row.getValue(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
index cf52929..d597f38 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
@@ -19,17 +19,16 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.InsertBatchQuery;
-import java.util.List;
-
/**
* Translator of InsertBatchQueries.
*/
@@ -93,16 +92,14 @@ public class InsertBatchTranslator extends DefaultBatchTranslator {
for (int i = 0; i < len; i++) {
DbAttribute a = attributes.get(i);
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(a);
// include/exclude state depends on DbAttribute only and can be
// precompiled here
if (includeInBatch(a)) {
// setting fake position here... all we care about is that it is
// > -1
- bindings[i].include(1, null);
+ bindings[i].include(1, null, null);
} else {
bindings[i].exclude();
}
@@ -121,7 +118,12 @@ public class InsertBatchTranslator extends DefaultBatchTranslator {
// exclusions are permanent
if (!b.isExcluded()) {
- b.include(j++, row.getValue(i));
+ Object value = row.getValue(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
index 514ca26..ed28cc5 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
@@ -68,8 +68,8 @@ public class SoftDeleteBatchTranslator extends DeleteBatchTranslator {
String typeName = TypesMapping.getJavaBySqlType(deleteAttribute.getType());
ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[0] = new DbAttributeBinding(deleteAttribute, extendedType);
- bindings[0].include(1, true);
+ bindings[0] = new DbAttributeBinding(deleteAttribute);
+ bindings[0].include(1, true, extendedType);
System.arraycopy(superBindings, 0, bindings, 1, slen);
@@ -91,7 +91,12 @@ public class SoftDeleteBatchTranslator extends DeleteBatchTranslator {
if (deleteBatch.isNull(b.getAttribute())) {
b.exclude();
} else {
- b.include(j++, row.getValue(i - 1));
+ Object value = row.getValue(i - 1);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
index cb34b99..ecd2619 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
@@ -19,18 +19,17 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.UpdateBatchQuery;
-import java.util.Iterator;
-import java.util.List;
-
/**
* A translator for UpdateBatchQueries that produces parameterized SQL.
*/
@@ -93,19 +92,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[ul + ql];
for (int i = 0; i < ul; i++) {
- DbAttribute a = updatedDbAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(updatedDbAttributes.get(i));
}
for (int i = 0; i < ql; i++) {
- DbAttribute a = qualifierAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[ul + i] = new DbAttributeBinding(a, extendedType);
+ bindings[ul + i] = new DbAttributeBinding(qualifierAttributes.get(i));
}
return bindings;
@@ -126,7 +117,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
for (int i = 0; i < ul; i++) {
Object value = row.getValue(i);
- bindings[i].include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ bindings[i].include(j++, value, extendedType);
}
for (int i = 0; i < ql; i++) {
@@ -139,7 +134,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
}
Object value = row.getValue(ul + i);
- bindings[ul + i].include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ bindings[ul + i].include(j++, value, extendedType);
}
return bindings;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
index f919a8b..92feb2c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
@@ -19,6 +19,13 @@
package org.apache.cayenne.access.translator.procedure;
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.access.translator.ProcedureParameterBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
@@ -29,13 +36,6 @@ import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.map.ProcedureParameter;
import org.apache.cayenne.query.ProcedureQuery;
-import java.sql.CallableStatement;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
/**
* Stored procedure query translator.
*/
@@ -229,11 +229,14 @@ public class ProcedureTranslator {
ProcedureParameter param,
Object val,
int pos) throws Exception {
- ExtendedType extendedType = val != null ? adapter.getExtendedTypes().getRegisteredType(val.getClass())
+ ExtendedType extendedType = val != null
+ ? adapter.getExtendedTypes().getRegisteredType(val.getClass())
: adapter.getExtendedTypes().getDefaultType();
- ProcedureParameterBinding binding = new ProcedureParameterBinding(param, extendedType);
- binding.setValue(val);
+
+ ProcedureParameterBinding binding = new ProcedureParameterBinding(param);
binding.setStatementPosition(pos);
+ binding.setValue(val);
+ binding.setExtendedType(extendedType);
adapter.bindParameter(stmt, binding);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
index 1128e22..3293168 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
@@ -19,10 +19,13 @@
package org.apache.cayenne.access.translator.select;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbRelationship;
@@ -31,10 +34,6 @@ import org.apache.cayenne.map.JoinType;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.QueryMetadata;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
/**
* Abstract superclass of Query translators.
*/
@@ -155,13 +154,15 @@ public abstract class QueryAssembler {
* DbAttribute being processed.
*/
public void addToParamList(DbAttribute dbAttr, Object anObject) {
- String typeName = TypesMapping.SQL_NULL;
- if (dbAttr != null) typeName = TypesMapping.getJavaBySqlType(dbAttr.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
-
- DbAttributeBinding binding = new DbAttributeBinding(dbAttr, extendedType);
- binding.setValue(anObject);
+ ExtendedType extendedType = anObject != null
+ ? adapter.getExtendedTypes().getRegisteredType(anObject.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ DbAttributeBinding binding = new DbAttributeBinding(dbAttr);
binding.setStatementPosition(bindings.size() + 1);
+ binding.setValue(anObject);
+ binding.setExtendedType(extendedType);
+
bindings.add(binding);
if(addBindingListener != null) {
addBindingListener.onAdd(binding);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index 979b425..b058719 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -19,6 +19,15 @@
package org.apache.cayenne.dba;
+import java.net.URL;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
+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;
@@ -48,15 +57,6 @@ import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.resource.ResourceLocator;
import org.apache.cayenne.util.Util;
-import java.net.URL;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
/**
* A generic DbAdapter implementation. Can be used as a default adapter or as a
* superclass of a concrete adapter implementation.
@@ -443,7 +443,7 @@ public class JdbcAdapter implements DbAdapter {
@Override
public String createFkConstraint(DbRelationship rel) {
- DbEntity source = (DbEntity) rel.getSourceEntity();
+ DbEntity source = rel.getSourceEntity();
StringBuilder buf = new StringBuilder();
StringBuilder refBuf = new StringBuilder();
@@ -468,7 +468,7 @@ public class JdbcAdapter implements DbAdapter {
buf.append(") REFERENCES ");
- buf.append(quotingStrategy.quotedFullyQualifiedName((DbEntity) rel.getTargetEntity()));
+ buf.append(quotingStrategy.quotedFullyQualifiedName(rel.getTargetEntity()));
buf.append(" (").append(refBuf.toString()).append(')');
return buf.toString();
@@ -545,12 +545,15 @@ public class JdbcAdapter implements DbAdapter {
if (binding.getValue() == null) {
statement.setNull(binding.getStatementPosition(), binding.getType());
} else {
- ExtendedType typeProcessor = getExtendedTypes().getRegisteredType(binding.getValue().getClass());
- typeProcessor.setJdbcObject(statement
- , binding.getValue()
- , binding.getStatementPosition()
- , binding.getType()
- , binding.getScale());
+ ExtendedType typeProcessor = binding.getExtendedType() != null
+ ? binding.getExtendedType()
+ : getExtendedTypes().getRegisteredType(binding.getValue().getClass());
+
+ typeProcessor.setJdbcObject(statement,
+ binding.getValue(),
+ binding.getStatementPosition(),
+ binding.getType(),
+ binding.getScale());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/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 8cfdc2c..93fda77 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,23 +19,34 @@
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;
import org.apache.cayenne.access.translator.DbAttributeBinding;
+import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.*;
+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.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
*/
@@ -49,8 +60,7 @@ class Oracle8LOBBatchAction implements SQLAction {
throws SQLException, Exception {
for (DbAttributeBinding b : bindings) {
- DbAttributeBinding binding = new DbAttributeBinding(b.getAttribute(), adapter.getExtendedTypes()
- .getRegisteredType(b.getValue().getClass()));
+ DbAttributeBinding binding = new DbAttributeBinding(b.getAttribute());
adapter.bindParameter(statement, binding);
}
}
@@ -95,7 +105,7 @@ class Oracle8LOBBatchAction implements SQLAction {
// 1. run row update
logger.logQuery(updateStr, Collections.EMPTY_LIST);
- try (PreparedStatement statement = connection.prepareStatement(updateStr);) {
+ try (PreparedStatement statement = connection.prepareStatement(updateStr)) {
DbAttributeBinding[] bindings = translator.updateBindings(row);
logger.logQueryParameters("bind", bindings);
@@ -136,19 +146,22 @@ class Oracle8LOBBatchAction implements SQLAction {
logger.logQueryParameters("write LOB", null, lobValues, false);
}
- try (PreparedStatement selectStatement = con.prepareStatement(selectStr);) {
+ try (PreparedStatement selectStatement = con.prepareStatement(selectStr)) {
for (int i = 0; i < parametersSize; i++) {
- Object value = qualifierValues.get(i);
DbAttribute attribute = qualifierAttributes.get(i);
+ Object value = qualifierValues.get(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
- DbAttributeBinding binding = new DbAttributeBinding(attribute, adapter.getExtendedTypes()
- .getRegisteredType(value.getClass()));
+ DbAttributeBinding binding = new DbAttributeBinding(attribute);
binding.setStatementPosition(i + 1);
binding.setValue(value);
- adapter.bindParameter(selectStatement,binding);
+ binding.setExtendedType(extendedType);
+ adapter.bindParameter(selectStatement, binding);
}
- try (ResultSet result = selectStatement.executeQuery();) {
+ try (ResultSet result = selectStatement.executeQuery()) {
if (!result.next()) {
throw new CayenneRuntimeException("Missing LOB row.");
}
@@ -200,7 +213,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getBinaryStreamMethod = Oracle8Adapter.getOutputStreamFromBlobMethod();
try {
- try (OutputStream out = (OutputStream) getBinaryStreamMethod.invoke(blob, (Object[]) null);) {
+ try (OutputStream out = (OutputStream) getBinaryStreamMethod.invoke(blob, (Object[]) null)) {
out.write(value);
out.flush();
}
@@ -217,7 +230,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getWriterMethod = Oracle8Adapter.getWriterFromClobMethod();
try {
- try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null);) {
+ try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null)) {
out.write(value);
out.flush();
}
@@ -235,7 +248,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getWriterMethod = Oracle8Adapter.getWriterFromClobMethod();
try {
- try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null);) {
+ try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null)) {
out.write(value);
out.flush();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
index d25d32f..4900ec0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
@@ -19,6 +19,10 @@
package org.apache.cayenne.dba.oracle;
+import java.sql.Types;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.translator.batch.DefaultBatchTranslator;
@@ -30,10 +34,6 @@ import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQuery;
import org.apache.cayenne.query.BatchQueryRow;
-import java.sql.Types;
-import java.util.Iterator;
-import java.util.List;
-
/**
* Superclass of query builders for the DML operations involving LOBs.
*
@@ -76,7 +76,7 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
it = qualifierAttributes.iterator();
while (it.hasNext()) {
- DbAttribute attribute = (DbAttribute) it.next();
+ DbAttribute attribute = it.next();
appendDbAttribute(buf, attribute);
buf.append(" = ?");
if (it.hasNext()) {
@@ -118,11 +118,7 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[len];
for (int i = 0; i < len; i++) {
- DbAttribute attribute = dbAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(attribute.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(attribute, extendedType);
+ bindings[i] = new DbAttributeBinding(dbAttributes.get(i));
}
return bindings;
@@ -144,7 +140,11 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
// TODO: (Andrus) This works as long as there is no LOBs in
// qualifier
if (isUpdateableColumn(value, type)) {
- b.include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
} else {
b.exclude();
}