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