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;

Reply via email to