EMPIREDB-329
fix for FULL OUTER JOIN
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 @@
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.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 @@
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 @@
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 DBCrossJoinExpr(DBRowSet left, DBRowSet right)
{
- super(DBJoinType.CROSS);
+ super(DBJoinType.FULL);
this.left = left;
this.right = right;
}