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