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