You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2018/03/05 11:56:10 UTC
empire-db git commit: EMPIREDB-274 Fixed syntax error with Oracle
MERGE INTO update statement
Repository: empire-db
Updated Branches:
refs/heads/master 665861e24 -> 24d87e7a7
EMPIREDB-274
Fixed syntax error with Oracle MERGE INTO update statement
Project: http://git-wip-us.apache.org/repos/asf/empire-db/repo
Commit: http://git-wip-us.apache.org/repos/asf/empire-db/commit/24d87e7a
Tree: http://git-wip-us.apache.org/repos/asf/empire-db/tree/24d87e7a
Diff: http://git-wip-us.apache.org/repos/asf/empire-db/diff/24d87e7a
Branch: refs/heads/master
Commit: 24d87e7a764a5691e44b2ac13a531d98ce761c57
Parents: 665861e
Author: Rainer Döbele <do...@apache.org>
Authored: Mon Mar 5 12:56:03 2018 +0100
Committer: Rainer Döbele <do...@apache.org>
Committed: Mon Mar 5 12:56:03 2018 +0100
----------------------------------------------------------------------
.../empire/db/oracle/DBCommandOracle.java | 40 ++++++++++++++++----
1 file changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/empire-db/blob/24d87e7a/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
----------------------------------------------------------------------
diff --git a/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java b/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
index 01ad81b..de5eaa7 100644
--- a/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
+++ b/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
@@ -18,11 +18,14 @@
*/
package org.apache.empire.db.oracle;
+import java.util.ArrayList;
// Imports
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.DataType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
@@ -30,6 +33,8 @@ import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBIndex;
import org.apache.empire.db.DBRowSet;
import org.apache.empire.db.DBTable;
+import org.apache.empire.db.expr.column.DBAliasExpr;
+import org.apache.empire.db.expr.column.DBValueExpr;
import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.db.expr.join.DBColumnJoinExpr;
import org.apache.empire.db.expr.join.DBJoinExpr;
@@ -312,23 +317,42 @@ public class DBCommandOracle extends DBCommand
if (jcol.getRowSet()!=table)
inner.select(jcol);
}
+ // find the source table
+ DBColumnExpr left = updateJoin.getLeft();
+ DBColumnExpr right = updateJoin.getRight();
+ DBRowSet source = right.getUpdateColumn().getRowSet();
+ if (source==table)
+ source = left.getUpdateColumn().getRowSet();
+ // Add set expressions
+ String sourceAliasPrefix = source.getAlias()+".";
+ List<DBSetExpr> mergeSet = new ArrayList<DBSetExpr>(set.size());
for (DBSetExpr sex : set)
{ // Select set expressions
Object val = sex.getValue();
if (val instanceof DBColumnExpr)
- inner.select(((DBColumnExpr)val));
+ {
+ DBColumnExpr expr = ((DBColumnExpr)val);
+ if (!(expr instanceof DBColumn) && !(expr instanceof DBAliasExpr))
+ { // rename column
+ String name = "COL_"+String.valueOf(mergeSet.size());
+ expr = expr.as(name);
+ }
+ // select
+ inner.select(expr);
+ // Name
+ DBValueExpr NAME_EXPR = getDatabase().getValueExpr(sourceAliasPrefix+expr.getName(), DataType.UNKNOWN);
+ mergeSet.add(sex.getColumn().to(NAME_EXPR));
+ }
+ else
+ { // add original
+ mergeSet.add(sex);
+ }
}
// remove join (if not necessary)
if (inner.hasConstraintOn(table)==false)
inner.removeJoinsOn(table);
// add SQL for inner statement
inner.addSQL(buf, CTX_DEFAULT);
- // find the source table
- DBColumnExpr left = updateJoin.getLeft();
- DBColumnExpr right = updateJoin.getRight();
- DBRowSet source = right.getUpdateColumn().getRowSet();
- if (source==table)
- source = left.getUpdateColumn().getRowSet();
// add Alias
buf.append(" ");
buf.append(source.getAlias());
@@ -344,7 +368,7 @@ public class DBCommandOracle extends DBCommand
// Set Expressions
buf.append(")\r\nWHEN MATCHED THEN UPDATE ");
buf.append("\r\nSET ");
- addListExpr(buf, set, CTX_DEFAULT, ", ");
+ addListExpr(buf, mergeSet, CTX_DEFAULT, ", ");
// done
return buf.toString();
}