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 2020/12/03 16:23:27 UTC

[empire-db] branch master updated: EMPIREDB-336 Validity checks for join expressions added

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 1b7d768  EMPIREDB-336 Validity checks for join expressions added
1b7d768 is described below

commit 1b7d76833317f41aeab18fd900cba9b6a081655f
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Thu Dec 3 17:23:21 2020 +0100

    EMPIREDB-336
    Validity checks for join expressions added
---
 .../main/java/org/apache/empire/db/DBCommand.java  |  7 +++++-
 .../empire/db/expr/join/DBColumnJoinExpr.java      | 27 +++++++++++++---------
 .../empire/db/expr/join/DBCompareJoinExpr.java     |  5 ++--
 3 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index caffa5a..158a8ec 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -42,6 +42,7 @@ import org.apache.empire.db.expr.join.DBCrossJoinExpr;
 import org.apache.empire.db.expr.join.DBJoinExpr;
 import org.apache.empire.db.expr.set.DBSetExpr;
 import org.apache.empire.exceptions.InternalException;
+import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.MiscellaneousErrorException;
 import org.apache.empire.exceptions.ObjectNotValidException;
 import org.slf4j.Logger;
@@ -506,6 +507,10 @@ public abstract class DBCommand extends DBCommandExpr
     public void join(DBJoinExpr join)
     {
         checkDatabase(join);
+        // check tables
+        if (join.getLeftTable().equals(join.getRightTable()))
+            throw new InvalidArgumentException("left|right", join.getLeftTable());
+        // create list
         if (joins == null)
             joins = new ArrayList<DBJoinExpr>();
         // Create a new join
@@ -542,7 +547,7 @@ public abstract class DBCommand extends DBCommandExpr
      */
     public final DBColumnJoinExpr join(DBColumnExpr left, DBColumnExpr right, DBJoinType joinType)
     {
-        DBColumnJoinExpr join = new DBColumnJoinExpr(left, right, joinType); 
+        DBColumnJoinExpr join = new DBColumnJoinExpr(left, right, joinType);
         join(join);
         return join;
     }
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 0309094..e35c2b2 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
@@ -27,6 +27,7 @@ import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBJoinType;
 import org.apache.empire.db.DBRowSet;
 import org.apache.empire.db.expr.compare.DBCompareExpr;
+import org.apache.empire.exceptions.InvalidPropertyException;
 
 public class DBColumnJoinExpr extends DBJoinExpr
 {
@@ -84,7 +85,10 @@ public class DBColumnJoinExpr extends DBJoinExpr
     @Override
     public DBRowSet getLeftTable()
     {
-        return left.getUpdateColumn().getRowSet();
+        DBColumn col = left.getUpdateColumn();
+        if (col==null)
+            throw new InvalidPropertyException("left", left);
+        return col.getRowSet();
     }
     
     /**
@@ -93,7 +97,10 @@ public class DBColumnJoinExpr extends DBJoinExpr
     @Override
     public DBRowSet getRightTable()
     {
-        return right.getUpdateColumn().getRowSet();
+        DBColumn col = right.getUpdateColumn();
+        if (col==null)
+            throw new InvalidPropertyException("right", right);
+        return col.getRowSet();
     }
     
     /**
@@ -104,11 +111,8 @@ public class DBColumnJoinExpr extends DBJoinExpr
     {
         if (rowset==null)
             return false;
-        DBColumn l = (left !=null ? left .getUpdateColumn() : null);
-        DBColumn r = (right!=null ? right.getUpdateColumn() : null);
-        DBRowSet rsl = (l!=null ? l.getRowSet() : null);
-        DBRowSet rsr = (r!=null ? r.getRowSet() : null);
-        return rowset.equals(rsl) || rowset.equals(rsr);
+        // compare rowsets
+        return rowset.equals(getLeftTable()) || rowset.equals(getRightTable());
     }
     
     /**
@@ -145,8 +149,8 @@ public class DBColumnJoinExpr extends DBJoinExpr
     {
         switch(type)
         {
-            case LEFT:  return right.getUpdateColumn().getRowSet();
-            case RIGHT: return left .getUpdateColumn().getRowSet();
+            case LEFT:  return getRightTable();
+            case RIGHT: return getLeftTable();
             default:    return null; // no outer table!
         }
     }
@@ -216,8 +220,9 @@ public class DBColumnJoinExpr extends DBJoinExpr
     @Override
     public void addSQL(StringBuilder buf, long context)
     {
+        // left 
         if ((context & CTX_NAME) != 0)
-            left.getUpdateColumn().getRowSet().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
+            getLeftTable().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
         if ((context & CTX_VALUE) != 0)
         { // Join Type
             switch(type)
@@ -228,7 +233,7 @@ public class DBColumnJoinExpr extends DBJoinExpr
                 case FULL:  buf.append(" FULL JOIN ");break;
                 default:    buf.append(" JOIN "); // should not come here!
             }
-            right.getUpdateColumn().getRowSet().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
+            getRightTable().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
             // compare equal
             buf.append(" ON ");
             right.addSQL(buf, CTX_DEFAULT);
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
index 029b04a..bbc02f6 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
@@ -85,8 +85,9 @@ public class DBCompareJoinExpr extends DBColumnJoinExpr
     @Override
     public void addSQL(StringBuilder buf, long context)
     {
+        // left 
         if ((context & CTX_NAME) != 0)
-            left.getUpdateColumn().getRowSet().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
+            getLeftTable().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
         if ((context & CTX_VALUE) != 0)
         { // Join Type
             switch(type)
@@ -96,7 +97,7 @@ public class DBCompareJoinExpr extends DBColumnJoinExpr
                 case RIGHT: buf.append(" RIGHT JOIN ");break;
                 default:    buf.append(" JOIN "); // should not come here!
             }
-            right.getUpdateColumn().getRowSet().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
+            getRightTable().addSQL(buf, CTX_DEFAULT | CTX_ALIAS);
             // compare equal
             buf.append(" ON ");
             cmp.addSQL(buf, CTX_DEFAULT);