This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 24974cea EMPIREDB-391 Fix: DBCommand.clone copy Joins with 
CompareExpressions for prepared statements
24974cea is described below

commit 24974ceafa675509d86580ecd5c97ef2959094aa
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Jul 21 13:08:59 2022 +0200

    EMPIREDB-391
    Fix: DBCommand.clone copy Joins with CompareExpressions for prepared 
statements
---
 .../src/main/java/org/apache/empire/db/DBCommand.java    |  3 +++
 .../org/apache/empire/db/expr/join/DBColumnJoinExpr.java | 16 ++++++++++++++++
 .../apache/empire/db/expr/join/DBCompareJoinExpr.java    | 13 +++++++++++++
 .../org/apache/empire/db/expr/join/DBCrossJoinExpr.java  | 12 ++++++++++++
 .../java/org/apache/empire/db/expr/join/DBJoinExpr.java  |  7 +++++++
 5 files changed, 51 insertions(+)

diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java 
b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index 5d169b25..9aebd367 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -147,6 +147,9 @@ public abstract class DBCommand extends DBCommandExpr
             // clone set
             for (int i=0; (clone.set!=null && i<clone.set.size()); i++)
                 clone.set.set(i, clone.set.get(i).copy(clone));
+            // clone joins
+            for (int i=0; (clone.joins!=null && i<clone.joins.size()); i++)
+                clone.joins.set(i, clone.joins.get(i).copy(clone));
             // clone where and having
             for (int i=0; (clone.where!=null && i<clone.where.size()); i++)
                 clone.where.set(i, clone.where.get(i).copy(clone));
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBColumnJoinExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBColumnJoinExpr.java
index fdcee913..273415bd 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBColumnJoinExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBColumnJoinExpr.java
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBJoinType;
 import org.apache.empire.db.DBQuery;
@@ -169,6 +170,21 @@ public class DBColumnJoinExpr extends DBJoinExpr
         type = DBJoinType.reversed(type); // (type * -1);
     }
 
+    /**
+     * Copy Command
+     * @param cmd
+     */
+    @Override
+    public DBJoinExpr copy(DBCommand newCmd)
+    {   // check additional compare expr
+        if (this.compExpr==null)
+            return this; // not necessary
+        // Copy compareExpr 
+        DBColumnJoinExpr join = new DBColumnJoinExpr(left, right, type);       
+        join.compExpr = compExpr.copy(newCmd);
+        return join;
+    }
+
     /**
      * Returns any additional constraints to the join
      * @return a compare expression containing additional constraints or null 
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
index 3cb7a03d..d551c43f 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
@@ -19,6 +19,7 @@
 package org.apache.empire.db.expr.join;
 
 import org.apache.empire.db.DBColumnExpr;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBJoinType;
 import org.apache.empire.db.DBQuery;
 import org.apache.empire.db.DBRowSet;
@@ -85,6 +86,18 @@ public class DBCompareJoinExpr extends DBColumnJoinExpr
         this.cmp = cmp;
     }
     
+    /**
+     * Copy Command
+     * @param cmd
+     */
+    @Override
+    public DBJoinExpr copy(DBCommand newCmd)
+    {   // copy
+        DBCompareExpr newCmp = cmp.copy(newCmd);
+        DBCompareJoinExpr join = new DBCompareJoinExpr(this.getLeftTable(), 
newCmp, type);       
+        return join;
+    }
+    
     public DBCompareExpr getJoinConstraint()
     {
         return cmp;
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCrossJoinExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCrossJoinExpr.java
index 2868f6ca..6ee9d314 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCrossJoinExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCrossJoinExpr.java
@@ -22,6 +22,7 @@ import java.util.Set;
 
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBJoinType;
 import org.apache.empire.db.DBQuery;
@@ -131,6 +132,17 @@ public class DBCrossJoinExpr extends DBJoinExpr
         left = right;
         right = swap;
     }
+    
+    /**
+     * Copy Command
+     * @param cmd
+     */
+    @Override
+    public DBJoinExpr copy(DBCommand newCmd)
+    {   // copy
+        // return new DBCrossJoinExpr(left, right);
+        return this; // not necessary
+    }
 
     /**
      * @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBJoinExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBJoinExpr.java
index 68676575..659a8329 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBJoinExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBJoinExpr.java
@@ -20,6 +20,7 @@ package org.apache.empire.db.expr.join;
 
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBExpr;
 import org.apache.empire.db.DBJoinType;
 import org.apache.empire.db.DBRowSet;
@@ -110,4 +111,10 @@ public abstract class DBJoinExpr extends DBExpr
      */
     public abstract void reverse();
 
+    /**
+     * Copy Command
+     * @param cmd
+     */
+    public abstract DBJoinExpr copy(DBCommand newCmd);
+
 }
\ No newline at end of file

Reply via email to