diff --git a/src/main/java/edu/caltech/nanodb/expressions/BooleanOperator.java b/src/main/java/edu/caltech/nanodb/expressions/BooleanOperator.java index 68edee97a017d4460185f34732b07d597ac56882..7284da10a13b6324759b3c6a35d92f5c857db55b 100755 --- a/src/main/java/edu/caltech/nanodb/expressions/BooleanOperator.java +++ b/src/main/java/edu/caltech/nanodb/expressions/BooleanOperator.java @@ -72,7 +72,7 @@ public class BooleanOperator extends Expression { throw new NullPointerException("type cannot be null"); this.type = type; - this.terms = new ArrayList<Expression>(); + this.terms = new ArrayList<>(); if (terms != null) { for (Expression term : terms) @@ -492,9 +492,12 @@ public class BooleanOperator extends Expression { // that are also BooleanOperators of the same type, since // the new nodes will now be at index i. } + else { + // Some other kind of term - skip it. + i++; + } } - return this; } diff --git a/src/main/java/edu/caltech/nanodb/queryast/FromClause.java b/src/main/java/edu/caltech/nanodb/queryast/FromClause.java index ac043a62496a9218745097a38c3505d7d4d1ed8b..2acaa36887e21b678eba150edd239344b9f80f48 100755 --- a/src/main/java/edu/caltech/nanodb/queryast/FromClause.java +++ b/src/main/java/edu/caltech/nanodb/queryast/FromClause.java @@ -665,6 +665,7 @@ public class FromClause { } joinOnExpr = expr; + joinOnExpr = joinOnExpr.simplify(); } diff --git a/src/main/java/edu/caltech/nanodb/queryast/SelectClause.java b/src/main/java/edu/caltech/nanodb/queryast/SelectClause.java index 18de7086ec00eefa40d8a168e1181b09d2772b8a..8afa5c5c97457fde956e218aa8147b3e6696542f 100755 --- a/src/main/java/edu/caltech/nanodb/queryast/SelectClause.java +++ b/src/main/java/edu/caltech/nanodb/queryast/SelectClause.java @@ -452,6 +452,10 @@ public class SelectClause { resolveExpressionRefs("WHERE clause", whereExpr, fromSchema, /* checkParentQueries */ true); + // Simplify the expression + whereExpr = whereExpr.simplify(); + + // Compute the schemas of subqueries embedded in the WHERE clause. whereExpr.traverse(subquerySchemaComputer); } @@ -470,6 +474,10 @@ public class SelectClause { resolveExpressionRefs("HAVING clause", havingExpr, fromSchema, /* checkParentQueries */ true); + // Simplify the expression + havingExpr = havingExpr.simplify(); + + // Compute the schemas of subqueries embedded in the HAVING clause havingExpr.traverse(subquerySchemaComputer); }