This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 6eefb6e29 refactoring PSBatchParameter
6eefb6e29 is described below
commit 6eefb6e29bf243e1bb4414a106a619d754e0a8c2
Author: Andrus Adamchik <[email protected]>
AuthorDate: Fri Jul 3 14:02:58 2026 -0400
refactoring PSBatchParameter
it can capture PreparedStatement position. It is the same for each row in a
batch
---
.../org/apache/cayenne/access/jdbc/PSBatchParameter.java | 9 +++++----
.../access/translator/batch/BaseBatchTranslator.java | 10 +++++++---
.../access/translator/batch/DeleteBatchTranslator.java | 3 ++-
.../access/translator/batch/InsertBatchTranslator.java | 15 ++++++++-------
.../access/translator/batch/UpdateBatchTranslator.java | 16 +++++++++-------
5 files changed, 31 insertions(+), 22 deletions(-)
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/PSBatchParameter.java
b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/PSBatchParameter.java
index eff4e8b43..982d678f5 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/PSBatchParameter.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/PSBatchParameter.java
@@ -23,17 +23,18 @@ import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.map.DbAttribute;
/**
- * An immutable per-batch parameter binding template, carrying only the static
column metadata shared by all
- * rows of a batch. A per-row {@link PSParameter} is produced by {@link
#bind(Object, int, ExtendedType)}.
+ * An immutable per-batch parameter binding template, carrying the static
PreparedStatement position and column
+ * metadata shared by all rows of a batch. A per-row {@link PSParameter} is
produced by
+ * {@link #bind(Object, ExtendedType)}.
*
* @since 5.0
*/
-public record PSBatchParameter(int psType, int psScale, DbAttribute attribute)
{
+public record PSBatchParameter(int psPosition, int psType, int psScale,
DbAttribute attribute) {
/**
* Resolves this per-batch template into a per-row {@link PSParameter}.
*/
- public <T> PSParameter<T> bind(T value, int psPosition, ExtendedType<T>
extendedType) {
+ public <T> PSParameter<T> bind(T value, ExtendedType<T> extendedType) {
return new PSParameter<>(value, psPosition, psType, psScale,
extendedType, attribute);
}
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/BaseBatchTranslator.java
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/BaseBatchTranslator.java
index deeeadc2c..ad56b7599 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/BaseBatchTranslator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/BaseBatchTranslator.java
@@ -53,9 +53,13 @@ public abstract class BaseBatchTranslator<T extends
BatchQuery> implements Batch
protected abstract String createSql(BatchTranslatorContext<T> context);
protected PSBatchParameter[] createBindings(BatchTranslatorContext<T>
context) {
- return context.getBindings().stream()
- .map(b -> new PSBatchParameter(b.psType(), b.psScale(),
b.attribute()))
- .toArray(PSBatchParameter[]::new);
+ PSBatchParameter[] bindings = new
PSBatchParameter[context.getBindings().size()];
+ int i = 0;
+ for (PSParameter b : context.getBindings()) {
+ bindings[i] = new PSBatchParameter(i + 1, b.psType(), b.psScale(),
b.attribute());
+ i++;
+ }
+ return bindings;
}
protected abstract PSParameter[] updateBindings(
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
index 69d99efb6..818a3ebf6 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
@@ -69,7 +69,8 @@ public class DeleteBatchTranslator extends
BaseBatchTranslator<DeleteBatchQuery>
// skip null attributes... they are translated as "IS NULL"
if (value != null) {
ExtendedType extendedType =
context.getAdapter().getExtendedTypes().getRegisteredType(value.getClass());
- bindings[position] = template[position].bind(value, ++position,
extendedType);
+ bindings[position] = template[position].bind(value, extendedType);
+ position++;
}
return position;
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
index 9e7bd2e6c..c4df88c23 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
@@ -38,9 +38,9 @@ public class InsertBatchTranslator extends
BaseBatchTranslator<InsertBatchQuery>
InsertBatchQuery query = context.getQuery();
InsertBuilder insertBuilder =
SQLBuilder.insert(context.getRootDbEntity());
- for(DbAttribute attribute : query.getDbAttributes()) {
+ for (DbAttribute attribute : query.getDbAttributes()) {
// skip generated attributes, if needed
- if(excludeInBatch(context, attribute)) {
+ if (excludeInBatch(context, attribute)) {
continue;
}
insertBuilder
@@ -58,10 +58,10 @@ public class InsertBatchTranslator extends
BaseBatchTranslator<InsertBatchQuery>
PSBatchParameter[] template,
BatchQueryRow row) {
InsertBatchQuery query = context.getQuery();
PSParameter[] bindings = new PSParameter[template.length];
- int i=0;
- int j=0;
- for(DbAttribute attribute : query.getDbAttributes()) {
- if(excludeInBatch(context, attribute)) {
+ int i = 0;
+ int j = 0;
+ for (DbAttribute attribute : query.getDbAttributes()) {
+ if (excludeInBatch(context, attribute)) {
i++;
continue;
}
@@ -70,7 +70,8 @@ public class InsertBatchTranslator extends
BaseBatchTranslator<InsertBatchQuery>
ExtendedType extendedType = value != null
?
context.getAdapter().getExtendedTypes().getRegisteredType(value.getClass())
: context.getAdapter().getExtendedTypes().getDefaultType();
- bindings[j] = template[j].bind(value, ++j, extendedType);
+ bindings[j] = template[j].bind(value, extendedType);
+ j++;
}
return bindings;
}
diff --git
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
index d3e8c39d7..c0b496275 100644
---
a/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
+++
b/cayenne/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
@@ -62,22 +62,24 @@ public class UpdateBatchTranslator extends
BaseBatchTranslator<UpdateBatchQuery>
int i = 0;
int j = 0;
- for(; i < updateBatch.getUpdatedAttributes().size(); i++) {
+ for (; i < updateBatch.getUpdatedAttributes().size(); i++) {
Object value = row.getValue(i);
ExtendedType extendedType = value == null
- ? context.getAdapter().getExtendedTypes().getDefaultType()
- :
context.getAdapter().getExtendedTypes().getRegisteredType(value.getClass());
- bindings[j] = template[j].bind(value, ++j, extendedType);
+ ? context.getAdapter().getExtendedTypes().getDefaultType()
+ :
context.getAdapter().getExtendedTypes().getRegisteredType(value.getClass());
+ bindings[j] = template[j].bind(value, extendedType);
+ j++;
}
- for(DbAttribute attribute : updateBatch.getQualifierAttributes()) {
- if(updateBatch.isNull(attribute)) {
+ for (DbAttribute attribute : updateBatch.getQualifierAttributes()) {
+ if (updateBatch.isNull(attribute)) {
i++;
continue;
}
Object value = row.getValue(i);
ExtendedType extendedType =
context.getAdapter().getExtendedTypes().getRegisteredType(value.getClass());
- bindings[j] = template[j].bind(value, ++j, extendedType);
+ bindings[j] = template[j].bind(value, extendedType);
+ j++;
i++;
}
return bindings;