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;
     }

Reply via email to