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 604f0dd EMPIREDB-329 fix for FULL OUTER JOIN
604f0dd is described below
commit 604f0dd64b1f8f4a436550af9aecd7870423e153
Author: Rainer Döbele <[email protected]>
AuthorDate: Wed Apr 29 10:31:43 2020 +0200
EMPIREDB-329
fix for FULL OUTER JOIN
---
.../src/main/java/org/apache/empire/db/DBJoinType.java | 4 ++--
empire-db/src/main/java/org/apache/empire/db/DBReader.java | 14 ++++++++++----
.../org/apache/empire/db/expr/join/DBColumnJoinExpr.java | 1 +
.../org/apache/empire/db/expr/join/DBCrossJoinExpr.java | 2 +-
4 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBJoinType.java
b/empire-db/src/main/java/org/apache/empire/db/DBJoinType.java
index 3f1f949..b5b118f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBJoinType.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBJoinType.java
@@ -42,9 +42,9 @@ public enum DBJoinType
RIGHT, // = 1
/**
- * SQL Cross join
+ * SQL Full join
*/
- CROSS;
+ FULL;
public static DBJoinType reversed(DBJoinType type)
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index e161aa2..a78de81 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -23,6 +23,7 @@ import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -420,10 +421,15 @@ public class DBReader extends DBRecordData
List<Object[]> subqueryParamValues = (cmd instanceof DBCommand) ?
findSubQueryParams((DBCommand)cmd) : null;
if (subqueryParamValues!=null && !subqueryParamValues.isEmpty())
{ // Check Count
- if (paramValues!=null || subqueryParamValues.size()>1)
- throw new MiscellaneousErrorException("More than one
(sub)query is a parameterized query. Currently one one query is allowed to be
parameterized!");
- // Use subquery params
- paramValues = subqueryParamValues.get(0);
+ if (paramValues==null)
+ { // use subquery params
+ paramValues = subqueryParamValues.toArray();
+ }
+ else if (paramValues.length!=subqueryParamValues.size())
+ { // number of params do not match
+ String msg = MessageFormat.format("Invalid number of
parameters query: provided={0}, required={1}; query="+cmd.getSelect(),
paramValues.length, subqueryParamValues.size());
+ throw new MiscellaneousErrorException(msg);
+ }
}
// Execute the query
DBDatabase queryDb = cmd.getDatabase();
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 db3f4ef..0309094 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
@@ -225,6 +225,7 @@ public class DBColumnJoinExpr extends DBJoinExpr
case LEFT: buf.append(" LEFT JOIN ");break;
case INNER: buf.append(" INNER JOIN ");break;
case RIGHT: buf.append(" RIGHT JOIN ");break;
+ case FULL: buf.append(" FULL JOIN ");break;
default: buf.append(" JOIN "); // should not come here!
}
right.getUpdateColumn().getRowSet().addSQL(buf, CTX_DEFAULT |
CTX_ALIAS);
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 c76da2f..0c06e31 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
@@ -52,7 +52,7 @@ public class DBCrossJoinExpr extends DBJoinExpr
*/
public DBCrossJoinExpr(DBRowSet left, DBRowSet right)
{
- super(DBJoinType.CROSS);
+ super(DBJoinType.FULL);
this.left = left;
this.right = right;
}