You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/01/19 18:36:06 UTC
[1/2] calcite git commit: [CALCITE-1592] SqlToRelConverter throws
UnsupportedOperationException if query has NOT ... NOT IN
Repository: calcite
Updated Branches:
refs/heads/master 010f7abb9 -> aadc62d4c
[CALCITE-1592] SqlToRelConverter throws UnsupportedOperationException if query has NOT ... NOT IN
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/aadc62d4
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/aadc62d4
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/aadc62d4
Branch: refs/heads/master
Commit: aadc62d4c283e31b7004c98bee55c1df4128fb9e
Parents: f10810a
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Jan 18 23:57:41 2017 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Jan 19 03:58:51 2017 -0800
----------------------------------------------------------------------
.../calcite/sql2rel/SqlToRelConverter.java | 63 +++++++++++---------
.../calcite/test/SqlToRelConverterTest.java | 5 ++
.../calcite/test/SqlToRelConverterTest.xml | 12 ++++
core/src/test/resources/sql/misc.iq | 20 +++++++
4 files changed, 72 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/aadc62d4/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index 857eb7c..3f3fe34 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -864,19 +864,21 @@ public class SqlToRelConverter {
/**
* Push down all the NOT logical operators into any IN/NOT IN operators.
*
+ * @param scope Scope where {@code sqlNode} occurs
* @param sqlNode the root node from which to look for NOT operators
* @return the transformed SqlNode representation with NOT pushed down.
*/
- private static SqlNode pushDownNotForIn(SqlNode sqlNode) {
+ private static SqlNode pushDownNotForIn(SqlValidatorScope scope,
+ SqlNode sqlNode) {
if ((sqlNode instanceof SqlCall) && containsInOperator(sqlNode)) {
SqlCall sqlCall = (SqlCall) sqlNode;
if ((sqlCall.getOperator() == SqlStdOperatorTable.AND)
|| (sqlCall.getOperator() == SqlStdOperatorTable.OR)) {
SqlNode[] sqlOperands = ((SqlBasicCall) sqlCall).operands;
for (int i = 0; i < sqlOperands.length; i++) {
- sqlOperands[i] = pushDownNotForIn(sqlOperands[i]);
+ sqlOperands[i] = pushDownNotForIn(scope, sqlOperands[i]);
}
- return sqlNode;
+ return reg(scope, sqlNode);
} else if (sqlCall.getOperator() == SqlStdOperatorTable.NOT) {
SqlNode childNode = sqlCall.operand(0);
assert childNode instanceof SqlCall;
@@ -885,48 +887,46 @@ public class SqlToRelConverter {
SqlNode[] andOperands = childSqlCall.getOperands();
SqlNode[] orOperands = new SqlNode[andOperands.length];
for (int i = 0; i < orOperands.length; i++) {
- orOperands[i] =
- SqlStdOperatorTable.NOT.createCall(
- SqlParserPos.ZERO,
- andOperands[i]);
+ orOperands[i] = reg(scope,
+ SqlStdOperatorTable.NOT.createCall(SqlParserPos.ZERO,
+ andOperands[i]));
}
for (int i = 0; i < orOperands.length; i++) {
- orOperands[i] = pushDownNotForIn(orOperands[i]);
+ orOperands[i] = pushDownNotForIn(scope, orOperands[i]);
}
- return SqlStdOperatorTable.OR.createCall(SqlParserPos.ZERO,
- orOperands[0], orOperands[1]);
+ return reg(scope,
+ SqlStdOperatorTable.OR.createCall(SqlParserPos.ZERO,
+ orOperands[0], orOperands[1]));
} else if (childSqlCall.getOperator() == SqlStdOperatorTable.OR) {
SqlNode[] orOperands = childSqlCall.getOperands();
SqlNode[] andOperands = new SqlNode[orOperands.length];
for (int i = 0; i < andOperands.length; i++) {
- andOperands[i] =
- SqlStdOperatorTable.NOT.createCall(
- SqlParserPos.ZERO,
- orOperands[i]);
+ andOperands[i] = reg(scope,
+ SqlStdOperatorTable.NOT.createCall(SqlParserPos.ZERO,
+ orOperands[i]));
}
for (int i = 0; i < andOperands.length; i++) {
- andOperands[i] = pushDownNotForIn(andOperands[i]);
+ andOperands[i] = pushDownNotForIn(scope, andOperands[i]);
}
- return SqlStdOperatorTable.AND.createCall(SqlParserPos.ZERO,
- andOperands[0], andOperands[1]);
+ return reg(scope,
+ SqlStdOperatorTable.AND.createCall(SqlParserPos.ZERO,
+ andOperands[0], andOperands[1]));
} else if (childSqlCall.getOperator() == SqlStdOperatorTable.NOT) {
SqlNode[] notOperands = childSqlCall.getOperands();
assert notOperands.length == 1;
- return pushDownNotForIn(notOperands[0]);
+ return pushDownNotForIn(scope, notOperands[0]);
} else if (childSqlCall.getOperator() instanceof SqlInOperator) {
SqlNode[] inOperands = childSqlCall.getOperands();
SqlInOperator inOp =
(SqlInOperator) childSqlCall.getOperator();
if (inOp.isNotIn()) {
- return SqlStdOperatorTable.IN.createCall(
- SqlParserPos.ZERO,
- inOperands[0],
- inOperands[1]);
+ return reg(scope,
+ SqlStdOperatorTable.IN.createCall(SqlParserPos.ZERO,
+ inOperands[0], inOperands[1]));
} else {
- return SqlStdOperatorTable.NOT_IN.createCall(
- SqlParserPos.ZERO,
- inOperands[0],
- inOperands[1]);
+ return reg(scope,
+ SqlStdOperatorTable.NOT_IN.createCall(SqlParserPos.ZERO,
+ inOperands[0], inOperands[1]));
}
} else {
// childSqlCall is "leaf" node in a logical expression tree
@@ -944,6 +944,13 @@ public class SqlToRelConverter {
}
}
+ /** Registers with the validator a {@link SqlNode} that has been created
+ * during the Sql-to-Rel process. */
+ private static SqlNode reg(SqlValidatorScope scope, SqlNode e) {
+ scope.getValidator().deriveType(scope, e);
+ return e;
+ }
+
/**
* Converts a WHERE clause.
*
@@ -956,7 +963,7 @@ public class SqlToRelConverter {
if (where == null) {
return;
}
- SqlNode newWhere = pushDownNotForIn(where);
+ SqlNode newWhere = pushDownNotForIn(bb.scope, where);
replaceSubQueries(bb, newWhere, RelOptUtil.Logic.UNKNOWN_AS_FALSE);
final RexNode convertedWhere = bb.convertExpression(newWhere);
@@ -2599,7 +2606,7 @@ public class SqlToRelConverter {
// Replace sub-queries in having here and modify having to use
// the replaced expressions
if (having != null) {
- SqlNode newHaving = pushDownNotForIn(having);
+ SqlNode newHaving = pushDownNotForIn(bb.scope, having);
replaceSubQueries(bb, newHaving, RelOptUtil.Logic.UNKNOWN_AS_FALSE);
havingExpr = bb.convertExpression(newHaving);
if (havingExpr.isAlwaysTrue()) {
http://git-wip-us.apache.org/repos/asf/calcite/blob/aadc62d4/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index ef3840d..375e7c5 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -1213,6 +1213,11 @@ public class SqlToRelConverterTest extends SqlToRelTestBase {
sql(sql).ok();
}
+ @Test public void testNotNotIn() {
+ final String sql = "select * from EMP where not (ename not in ('Fred') )";
+ sql(sql).ok();
+ }
+
@Test public void testOverMultiple() {
final String sql = "select sum(sal) over w1,\n"
+ " sum(deptno) over w1,\n"
http://git-wip-us.apache.org/repos/asf/calcite/blob/aadc62d4/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index cfbfa8f..10c1650 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -2257,6 +2257,18 @@ LogicalProject(DEPTNO=[$1], EXPR$1=[CASE($3, 1, 0)], EXPR$2=[$4], EXPR$3=[CASE($
]]>
</Resource>
</TestCase>
+ <TestCase name="testNotNotIn">
+ <Resource name="sql">
+ <![CDATA[select * from EMP where not (ename not in ('Fred') )]]>
+ </Resource>
+ <Resource name="plan">
+ <![CDATA[
+LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
+ LogicalFilter(condition=[=($1, 'Fred')])
+ LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+]]>
+ </Resource>
+ </TestCase>
<TestCase name="testTableExtend">
<Resource name="sql">
<![CDATA[select * from dept extend (x varchar(5) not null)]]>
http://git-wip-us.apache.org/repos/asf/calcite/blob/aadc62d4/core/src/test/resources/sql/misc.iq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/misc.iq b/core/src/test/resources/sql/misc.iq
index cc3a4af..9d856ba 100644
--- a/core/src/test/resources/sql/misc.iq
+++ b/core/src/test/resources/sql/misc.iq
@@ -1807,4 +1807,24 @@ values (degrees(pi), degrees(-pi / 2));
!ok
+# [CALCITE-1592] SqlToRelConverter throws UnsupportedOperationException if query has NOT ... NOT IN
+select * from "scott".emp where not (ename not in ('Fred'));
++-------+-------+-----+-----+----------+-----+------+--------+
+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
++-------+-------+-----+-----+----------+-----+------+--------+
++-------+-------+-----+-----+----------+-----+------+--------+
+(0 rows)
+
+!ok
+
+select count(*) as c from "scott".emp where not (ename in ('Fred'));
++----+
+| C |
++----+
+| 14 |
++----+
+(1 row)
+
+!ok
+
# End misc.iq
[2/2] calcite git commit: [CALCITE-1590] Support Guava version 21.0
Posted by jh...@apache.org.
[CALCITE-1590] Support Guava version 21.0
The default Guava version is now 20.0, but you can override to any
version between 14.0.1 and 21.0. Version 21.0 requires JDK8 and higher.
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/f10810a2
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/f10810a2
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/f10810a2
Branch: refs/heads/master
Commit: f10810a2e17cc945eec2d0eb2b8343cdd82e49bd
Parents: 010f7ab
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Jan 18 13:48:47 2017 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Thu Jan 19 03:58:51 2017 -0800
----------------------------------------------------------------------
.../adapter/cassandra/CassandraRules.java | 13 +++---
.../calcite/plan/AbstractRelOptPlanner.java | 6 +--
.../org/apache/calcite/plan/RelOptUtil.java | 13 +++---
.../calcite/plan/SubstitutionVisitor.java | 5 ++-
.../calcite/prepare/CalciteCatalogReader.java | 13 +++---
.../org/apache/calcite/rel/core/Aggregate.java | 9 ++--
.../org/apache/calcite/rel/core/Values.java | 9 ++--
.../calcite/rel/logical/LogicalWindow.java | 6 +--
.../rel/metadata/RelMdColumnUniqueness.java | 5 ++-
.../calcite/rel/rules/DateRangeRules.java | 5 ++-
.../calcite/rel/rules/FilterTableScanRule.java | 5 ++-
.../calcite/rel/rules/ProjectRemoveRule.java | 5 ++-
.../calcite/rel/rules/ProjectTableScanRule.java | 5 ++-
.../calcite/rel/rules/ProjectToWindowRule.java | 9 ++--
.../apache/calcite/rel/rules/SemiJoinRule.java | 5 ++-
.../java/org/apache/calcite/rex/RexUtil.java | 27 ++++++------
.../apache/calcite/runtime/PredicateImpl.java | 43 ++++++++++++++++++++
.../java/org/apache/calcite/sql/SqlUtil.java | 21 +++++-----
.../apache/calcite/sql/advise/SqlAdvisor.java | 11 +++--
.../calcite/sql/parser/SqlParserUtil.java | 5 ++-
.../calcite/adapter/druid/DruidRules.java | 5 ++-
pom.xml | 4 +-
site/_docs/history.md | 10 +++++
23 files changed, 154 insertions(+), 85 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
----------------------------------------------------------------------
diff --git a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
index d67532d..ec29bd6 100644
--- a/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
+++ b/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraRules.java
@@ -37,6 +37,7 @@ import org.apache.calcite.rex.RexCall;
import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.validate.SqlValidatorUtil;
import org.apache.calcite.util.Pair;
@@ -121,8 +122,8 @@ public class CassandraRules {
*/
private static class CassandraFilterRule extends RelOptRule {
private static final Predicate<LogicalFilter> PREDICATE =
- new Predicate<LogicalFilter>() {
- public boolean apply(LogicalFilter input) {
+ new PredicateImpl<LogicalFilter>() {
+ public boolean test(LogicalFilter input) {
// TODO: Check for an equality predicate on the partition key
// Right now this just checks if we have a single top-level AND
return RelOptUtil.disjunctions(input.getCondition()).size() == 1;
@@ -277,15 +278,15 @@ public class CassandraRules {
*/
private static class CassandraSortRule extends RelOptRule {
private static final Predicate<Sort> SORT_PREDICATE =
- new Predicate<Sort>() {
- public boolean apply(Sort input) {
+ new PredicateImpl<Sort>() {
+ public boolean test(Sort input) {
// Limits are handled by CassandraLimit
return input.offset == null && input.fetch == null;
}
};
private static final Predicate<CassandraFilter> FILTER_PREDICATE =
- new Predicate<CassandraFilter>() {
- public boolean apply(CassandraFilter input) {
+ new PredicateImpl<CassandraFilter>() {
+ public boolean test(CassandraFilter input) {
// We can only use implicit sorting within a single partition
return input.isSinglePartition();
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java b/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
index 875ecd7..eaed2ef 100644
--- a/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/AbstractRelOptPlanner.java
@@ -20,9 +20,9 @@ import org.apache.calcite.plan.volcano.RelSubset;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.util.CancelFlag;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -415,8 +415,8 @@ public abstract class AbstractRelOptPlanner implements RelOptPlanner {
public Iterable<Class<? extends RelNode>> subClasses(
final Class<? extends RelNode> clazz) {
return Iterables.filter(classes,
- new Predicate<Class<? extends RelNode>>() {
- public boolean apply(Class<? extends RelNode> input) {
+ new PredicateImpl<Class<? extends RelNode>>() {
+ public boolean test(Class<? extends RelNode> input) {
return clazz.isAssignableFrom(input);
}
});
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
index f51c625..3239419 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
@@ -75,6 +75,7 @@ import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexSubQuery;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlExplainFormat;
import org.apache.calcite.sql.SqlExplainLevel;
import org.apache.calcite.sql.SqlKind;
@@ -126,8 +127,8 @@ public abstract class RelOptUtil {
/** Predicate for whether a filter contains multisets or windowed
* aggregates. */
public static final Predicate<Filter> FILTER_PREDICATE =
- new Predicate<Filter>() {
- public boolean apply(Filter filter) {
+ new PredicateImpl<Filter>() {
+ public boolean test(Filter filter) {
return !(B
&& RexMultisetUtil.containsMultiset(filter.getCondition(), true)
|| RexOver.containsOver(filter.getCondition()));
@@ -137,8 +138,8 @@ public abstract class RelOptUtil {
/** Predicate for whether a project contains multisets or windowed
* aggregates. */
public static final Predicate<Project> PROJECT_PREDICATE =
- new Predicate<Project>() {
- public boolean apply(Project project) {
+ new PredicateImpl<Project>() {
+ public boolean test(Project project) {
return !(B
&& RexMultisetUtil.containsMultiset(project.getProjects(), true)
|| RexOver.containsOver(project.getProjects(), null));
@@ -148,8 +149,8 @@ public abstract class RelOptUtil {
/** Predicate for whether a calc contains multisets or windowed
* aggregates. */
public static final Predicate<Calc> CALC_PREDICATE =
- new Predicate<Calc>() {
- public boolean apply(Calc calc) {
+ new PredicateImpl<Calc>() {
+ public boolean test(Calc calc) {
return !(B
&& RexMultisetUtil.containsMultiset(calc.getProgram())
|| calc.getProgram().containsAggs());
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
index dd60c22..edba57f 100644
--- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
+++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
@@ -48,6 +48,7 @@ import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.validate.SqlValidatorUtil;
@@ -2392,8 +2393,8 @@ public class SubstitutionVisitor {
*/
public static class FilterOnProjectRule extends RelOptRule {
private static final Predicate<LogicalFilter> PREDICATE =
- new Predicate<LogicalFilter>() {
- public boolean apply(LogicalFilter input) {
+ new PredicateImpl<LogicalFilter>() {
+ public boolean test(LogicalFilter input) {
return input.getCondition() instanceof RexInputRef;
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java b/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
index 7f0823c..277a6f9 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
@@ -23,6 +23,7 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeFactoryImpl;
import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.schema.AggregateFunction;
import org.apache.calcite.schema.Function;
import org.apache.calcite.schema.FunctionParameter;
@@ -275,15 +276,15 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
if (category == null) {
predicate = Predicates.alwaysTrue();
} else if (category.isTableFunction()) {
- predicate = new Predicate<Function>() {
- public boolean apply(Function function) {
+ predicate = new PredicateImpl<Function>() {
+ public boolean test(Function function) {
return function instanceof TableMacro
|| function instanceof TableFunction;
}
};
} else {
- predicate = new Predicate<Function>() {
- public boolean apply(Function function) {
+ predicate = new PredicateImpl<Function>() {
+ public boolean test(Function function) {
return !(function instanceof TableMacro
|| function instanceof TableFunction);
}
@@ -313,8 +314,8 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
Util.first(type.getSqlTypeName().getFamily(), SqlTypeFamily.ANY));
}
final Predicate<Integer> optional =
- new Predicate<Integer>() {
- public boolean apply(Integer input) {
+ new PredicateImpl<Integer>() {
+ public boolean test(Integer input) {
return function.getParameters().get(input).isOptional();
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/core/Aggregate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Aggregate.java b/core/src/main/java/org/apache/calcite/rel/core/Aggregate.java
index cd4243a..f22b405 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Aggregate.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Aggregate.java
@@ -31,6 +31,7 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.runtime.CalciteException;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.runtime.Resources;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.sql.SqlOperatorBinding;
@@ -73,15 +74,15 @@ public abstract class Aggregate extends SingleRel {
* @see org.apache.calcite.util.Bug#CALCITE_461_FIXED
*/
public static final Predicate<Aggregate> IS_SIMPLE =
- new Predicate<Aggregate>() {
- public boolean apply(Aggregate input) {
+ new PredicateImpl<Aggregate>() {
+ public boolean test(Aggregate input) {
return input.getGroupType() == Group.SIMPLE;
}
};
public static final Predicate<Aggregate> IS_NOT_GRAND_TOTAL =
- new Predicate<Aggregate>() {
- public boolean apply(Aggregate input) {
+ new PredicateImpl<Aggregate>() {
+ public boolean test(Aggregate input) {
return input.getGroupCount() > 0;
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/core/Values.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Values.java b/core/src/main/java/org/apache/calcite/rel/core/Values.java
index f9c9880..30d366d 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Values.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Values.java
@@ -28,6 +28,7 @@ import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlExplainLevel;
import org.apache.calcite.sql.type.SqlTypeUtil;
import org.apache.calcite.util.Pair;
@@ -65,8 +66,8 @@ public abstract class Values extends AbstractRelNode {
* expressions and prune away that section of the tree.
*/
public static final Predicate<? super Values> IS_EMPTY =
- new Predicate<Values>() {
- public boolean apply(Values values) {
+ new PredicateImpl<Values>() {
+ public boolean test(Values values) {
return values.getTuples().isEmpty();
}
};
@@ -79,8 +80,8 @@ public abstract class Values extends AbstractRelNode {
* expressions and prune away that section of the tree.
*/
public static final Predicate<? super Values> IS_NOT_EMPTY =
- new Predicate<Values>() {
- public boolean apply(Values values) {
+ new PredicateImpl<Values>() {
+ public boolean test(Values values) {
return !values.getTuples().isEmpty();
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
index 9053ce2..abd703a 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
@@ -34,12 +34,12 @@ import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexWindow;
import org.apache.calcite.rex.RexWindowBound;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.Litmus;
import org.apache.calcite.util.Pair;
-import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Lists;
@@ -348,8 +348,8 @@ public final class LogicalWindow extends Window {
RelCollation orderKeys = getCollation(
Lists.newArrayList(
Iterables.filter(aggWindow.orderKeys,
- new Predicate<RexFieldCollation>() {
- public boolean apply(RexFieldCollation rexFieldCollation) {
+ new PredicateImpl<RexFieldCollation>() {
+ public boolean test(RexFieldCollation rexFieldCollation) {
// If ORDER BY references constant (i.e. RexInputRef),
// then we can ignore such ORDER BY key.
return rexFieldCollation.left instanceof RexLocalRef;
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/metadata/RelMdColumnUniqueness.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdColumnUniqueness.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdColumnUniqueness.java
index 67ef377..48c626e 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdColumnUniqueness.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdColumnUniqueness.java
@@ -40,6 +40,7 @@ import org.apache.calcite.rex.RexCall;
import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.util.BuiltInMethod;
import org.apache.calcite.util.ImmutableBitSet;
@@ -65,8 +66,8 @@ public class RelMdColumnUniqueness
/** Aggregate and Calc are "safe" children of a RelSubset to delve into. */
private static final Predicate<RelNode> SAFE_REL =
- new Predicate<RelNode>() {
- public boolean apply(RelNode r) {
+ new PredicateImpl<RelNode>() {
+ public boolean test(RelNode r) {
return r instanceof Aggregate || r instanceof Project;
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java b/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
index 8819c22..cd59787 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/DateRangeRules.java
@@ -28,6 +28,7 @@ import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlBinaryOperator;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
@@ -77,8 +78,8 @@ public abstract class DateRangeRules {
private DateRangeRules() {}
private static final Predicate<Filter> FILTER_PREDICATE =
- new Predicate<Filter>() {
- @Override public boolean apply(Filter filter) {
+ new PredicateImpl<Filter>() {
+ @Override public boolean test(Filter filter) {
final ExtractFinder finder = ExtractFinder.THREAD_INSTANCES.get();
assert finder.timeUnits.isEmpty() : "previous user did not clean up";
try {
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
index b16d6b7..d090d79 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/FilterTableScanRule.java
@@ -26,6 +26,7 @@ import org.apache.calcite.rel.core.Filter;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.schema.FilterableTable;
import org.apache.calcite.schema.ProjectableFilterableTable;
import org.apache.calcite.util.ImmutableIntList;
@@ -50,8 +51,8 @@ import com.google.common.collect.ImmutableList;
*/
public abstract class FilterTableScanRule extends RelOptRule {
public static final Predicate<TableScan> PREDICATE =
- new Predicate<TableScan>() {
- public boolean apply(TableScan scan) {
+ new PredicateImpl<TableScan>() {
+ public boolean test(TableScan scan) {
// We can only push filters into a FilterableTable or
// ProjectableFilterableTable.
final RelOptTable table = scan.getTable();
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
index 8cbbd74..7a92ccb 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
@@ -23,6 +23,7 @@ import org.apache.calcite.rel.core.Project;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.runtime.PredicateImpl;
import com.google.common.base.Predicate;
@@ -42,8 +43,8 @@ import java.util.List;
public class ProjectRemoveRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
private static final Predicate<Project> PREDICATE =
- new Predicate<Project>() {
- public boolean apply(Project input) {
+ new PredicateImpl<Project>() {
+ public boolean test(Project input) {
return isTrivial(input);
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
index 25cbe83..eff4e52 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableScanRule.java
@@ -25,6 +25,7 @@ import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.rel.core.Project;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.schema.ProjectableFilterableTable;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.mapping.Mapping;
@@ -48,8 +49,8 @@ import java.util.List;
*/
public abstract class ProjectTableScanRule extends RelOptRule {
public static final Predicate<TableScan> PREDICATE =
- new Predicate<TableScan>() {
- public boolean apply(TableScan scan) {
+ new PredicateImpl<TableScan>() {
+ public boolean test(TableScan scan) {
// We can only push projects into a ProjectableFilterableTable.
final RelOptTable table = scan.getTable();
return table.unwrap(ProjectableFilterableTable.class) != null;
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
index ed4f610..a2856f5 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectToWindowRule.java
@@ -37,6 +37,7 @@ import org.apache.calcite.rex.RexOver;
import org.apache.calcite.rex.RexProgram;
import org.apache.calcite.rex.RexVisitorImpl;
import org.apache.calcite.rex.RexWindow;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.util.ImmutableIntList;
import org.apache.calcite.util.Pair;
@@ -76,15 +77,15 @@ public abstract class ProjectToWindowRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
private static final Predicate<Calc> PREDICATE =
- new Predicate<Calc>() {
- public boolean apply(Calc calc) {
+ new PredicateImpl<Calc>() {
+ public boolean test(Calc calc) {
return RexOver.containsOver(calc.getProgram());
}
};
private static final Predicate<Project> PREDICATE2 =
- new Predicate<Project>() {
- public boolean apply(Project project) {
+ new PredicateImpl<Project>() {
+ public boolean test(Project project) {
return RexOver.containsOver(project.getProjects(), null);
}
};
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRule.java
index 13ad991..d8d56b4 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SemiJoinRule.java
@@ -28,6 +28,7 @@ import org.apache.calcite.rel.core.Project;
import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.tools.RelBuilderFactory;
import org.apache.calcite.util.ImmutableBitSet;
@@ -45,8 +46,8 @@ import java.util.List;
*/
public class SemiJoinRule extends RelOptRule {
private static final Predicate<Join> IS_LEFT_OR_INNER =
- new Predicate<Join>() {
- public boolean apply(Join input) {
+ new PredicateImpl<Join>() {
+ public boolean test(Join input) {
switch (input.getJoinType()) {
case LEFT:
case INNER:
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/rex/RexUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rex/RexUtil.java b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
index 093a5d1..bf99d2c 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexUtil.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
@@ -31,6 +31,7 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeFamily;
import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.schema.Schemas;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.sql.SqlKind;
@@ -2295,9 +2296,9 @@ public class RexUtil {
case EQUALS:
final RexCall call = (RexCall) e;
if (call.getOperands().get(1) instanceof RexLiteral) {
- notTerms = Iterables.filter(
- notTerms, new Predicate<RexNode>() {
- public boolean apply(RexNode input) {
+ notTerms = Iterables.filter(notTerms,
+ new PredicateImpl<RexNode>() {
+ public boolean test(RexNode input) {
switch (input.getKind()) {
case EQUALS:
RexCall call2 = (RexCall) input;
@@ -2312,10 +2313,10 @@ public class RexUtil {
});
}
}
- return composeConjunction(
- rexBuilder, Iterables.concat(
- ImmutableList.of(e), Iterables.transform(
- notTerms, notFn(rexBuilder))), false);
+ return composeConjunction(rexBuilder,
+ Iterables.concat(ImmutableList.of(e),
+ Iterables.transform(notTerms, notFn(rexBuilder))),
+ false);
}
/** Returns whether a given operand of a CASE expression is a predicate.
@@ -2854,8 +2855,8 @@ public class RexUtil {
/** Returns whether a {@link Project} contains a sub-query. */
public static final Predicate<Project> PROJECT_PREDICATE =
- new Predicate<Project>() {
- public boolean apply(Project project) {
+ new PredicateImpl<Project>() {
+ public boolean test(Project project) {
for (RexNode node : project.getProjects()) {
try {
node.accept(INSTANCE);
@@ -2869,8 +2870,8 @@ public class RexUtil {
/** Returns whether a {@link Filter} contains a sub-query. */
public static final Predicate<Filter> FILTER_PREDICATE =
- new Predicate<Filter>() {
- public boolean apply(Filter filter) {
+ new PredicateImpl<Filter>() {
+ public boolean test(Filter filter) {
try {
filter.getCondition().accept(INSTANCE);
return false;
@@ -2882,8 +2883,8 @@ public class RexUtil {
/** Returns whether a {@link Join} contains a sub-query. */
public static final Predicate<Join> JOIN_PREDICATE =
- new Predicate<Join>() {
- public boolean apply(Join join) {
+ new PredicateImpl<Join>() {
+ public boolean test(Join join) {
try {
join.getCondition().accept(INSTANCE);
return false;
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/runtime/PredicateImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/runtime/PredicateImpl.java b/core/src/main/java/org/apache/calcite/runtime/PredicateImpl.java
new file mode 100644
index 0000000..c958b74
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/runtime/PredicateImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.calcite.runtime;
+
+import com.google.common.base.Predicate;
+
+import javax.annotation.Nullable;
+
+/**
+ * Abstract implementation of {@link com.google.common.base.Predicate}.
+ *
+ * <p>Derived class needs to implement the {@link #test} method.
+ *
+ * <p>Helps with the transition to {@code java.util.function.Predicate},
+ * which was introduced in JDK 1.8, and is required in Guava 21.0 and higer,
+ * but still works on JDK 1.7.
+ *
+ * @param <T> the type of the input to the predicate
+ */
+public abstract class PredicateImpl<T> implements Predicate<T> {
+ public final boolean apply(@Nullable T input) {
+ return test(input);
+ }
+
+ /** Overrides {@code java.util.function.Predicate#test} in JDK8 and higher. */
+ public abstract boolean test(@Nullable T t);
+}
+
+// End PredicateImpl.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/sql/SqlUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlUtil.java b/core/src/main/java/org/apache/calcite/sql/SqlUtil.java
index bb76cd7..71e79c7 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlUtil.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlUtil.java
@@ -24,6 +24,7 @@ import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypePrecedenceList;
import org.apache.calcite.runtime.CalciteContextException;
import org.apache.calcite.runtime.CalciteException;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.runtime.Resources;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
@@ -385,8 +386,8 @@ public abstract class SqlUtil {
filterOperatorRoutinesByKind(Iterator<SqlOperator> routines,
final SqlKind sqlKind) {
return Iterators.filter(routines,
- new Predicate<SqlOperator>() {
- public boolean apply(SqlOperator input) {
+ new PredicateImpl<SqlOperator>() {
+ public boolean test(SqlOperator input) {
return input.getKind() == sqlKind;
}
});
@@ -488,8 +489,8 @@ public abstract class SqlUtil {
Predicates.instanceOf(SqlFunction.class));
default:
return Iterators.filter(sqlOperators.iterator(),
- new Predicate<SqlOperator>() {
- public boolean apply(SqlOperator operator) {
+ new PredicateImpl<SqlOperator>() {
+ public boolean test(SqlOperator operator) {
return operator.getSyntax() == syntax;
}
});
@@ -500,8 +501,8 @@ public abstract class SqlUtil {
Iterator<SqlOperator> routines,
final List<RelDataType> argTypes) {
return Iterators.filter(routines,
- new Predicate<SqlOperator>() {
- public boolean apply(SqlOperator operator) {
+ new PredicateImpl<SqlOperator>() {
+ public boolean test(SqlOperator operator) {
SqlOperandCountRange od = operator.getOperandCountRange();
return od.isValidCount(argTypes.size());
}
@@ -522,8 +523,8 @@ public abstract class SqlUtil {
//noinspection unchecked
return (Iterator) Iterators.filter(
Iterators.filter(routines, SqlFunction.class),
- new Predicate<SqlFunction>() {
- public boolean apply(SqlFunction function) {
+ new PredicateImpl<SqlFunction>() {
+ public boolean test(SqlFunction function) {
List<RelDataType> paramTypes = function.getParamTypes();
if (paramTypes == null) {
// no parameter information for builtins; keep for now
@@ -593,8 +594,8 @@ public abstract class SqlUtil {
sqlFunctions =
Lists.newArrayList(
Iterables.filter(sqlFunctions,
- new Predicate<SqlFunction>() {
- public boolean apply(SqlFunction function) {
+ new PredicateImpl<SqlFunction>() {
+ public boolean test(SqlFunction function) {
final List<RelDataType> paramTypes = function.getParamTypes();
if (paramTypes == null) {
return false;
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/sql/advise/SqlAdvisor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/advise/SqlAdvisor.java b/core/src/main/java/org/apache/calcite/sql/advise/SqlAdvisor.java
index 73a3401..1b2481e 100644
--- a/core/src/main/java/org/apache/calcite/sql/advise/SqlAdvisor.java
+++ b/core/src/main/java/org/apache/calcite/sql/advise/SqlAdvisor.java
@@ -18,6 +18,7 @@ package org.apache.calcite.sql.advise;
import org.apache.calcite.runtime.CalciteContextException;
import org.apache.calcite.runtime.CalciteException;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlSelect;
@@ -33,7 +34,6 @@ import org.apache.calcite.sql.validate.SqlValidatorWithHints;
import org.apache.calcite.util.Util;
import org.apache.calcite.util.trace.CalciteTrace;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -238,16 +238,15 @@ public class SqlAdvisor {
private static boolean isSelectListItem(SqlNode root,
final SqlParserPos pos) {
List<SqlNode> nodes = SqlUtil.getAncestry(root,
- new Predicate<SqlNode>() {
-
- public boolean apply(SqlNode input) {
+ new PredicateImpl<SqlNode>() {
+ public boolean test(SqlNode input) {
return input instanceof SqlIdentifier
&& Util.last(((SqlIdentifier) input).names)
.equals(UPPER_HINT_TOKEN);
}
},
- new Predicate<SqlNode>() {
- public boolean apply(SqlNode input) {
+ new PredicateImpl<SqlNode>() {
+ public boolean test(SqlNode input) {
return input.getParserPosition().startsAt(pos);
}
});
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java b/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java
index 4813a91..c9e1ad7 100644
--- a/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java
+++ b/core/src/main/java/org/apache/calcite/sql/parser/SqlParserUtil.java
@@ -19,6 +19,7 @@ package org.apache.calcite.sql.parser;
import org.apache.calcite.avatica.util.Casing;
import org.apache.calcite.rel.type.RelDataTypeSystem;
import org.apache.calcite.runtime.CalciteContextException;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.sql.SqlBinaryOperator;
import org.apache.calcite.sql.SqlIntervalLiteral;
import org.apache.calcite.sql.SqlIntervalQualifier;
@@ -585,8 +586,8 @@ public final class SqlParserUtil {
public static SqlNode toTreeEx(SqlSpecialOperator.TokenSequence list,
int start, final int minPrec, final SqlKind stopperKind) {
final Predicate<PrecedenceClimbingParser.Token> predicate =
- new Predicate<PrecedenceClimbingParser.Token>() {
- public boolean apply(PrecedenceClimbingParser.Token t) {
+ new PredicateImpl<PrecedenceClimbingParser.Token>() {
+ public boolean test(PrecedenceClimbingParser.Token t) {
if (t instanceof PrecedenceClimbingParser.Op) {
final SqlOperator op = ((ToTreeListItem) t.o).op;
return stopperKind != SqlKind.OTHER
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
index 7f6eee4..769e728 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java
@@ -38,6 +38,7 @@ import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexShuttle;
import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.runtime.PredicateImpl;
import org.apache.calcite.util.ImmutableBitSet;
import org.apache.calcite.util.Pair;
import org.apache.calcite.util.Util;
@@ -75,8 +76,8 @@ public class DruidRules {
/** Predicate that returns whether Druid can not handle an aggregate. */
private static final Predicate<AggregateCall> BAD_AGG =
- new Predicate<AggregateCall>() {
- public boolean apply(AggregateCall aggregateCall) {
+ new PredicateImpl<AggregateCall>() {
+ public boolean test(AggregateCall aggregateCall) {
switch (aggregateCall.getAggregation().getKind()) {
case COUNT:
case SUM:
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f196350..853698e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,9 +69,9 @@ limitations under the License.
<git-commit-id-plugin.version>2.1.9</git-commit-id-plugin.version>
<!-- We support (and test against) Guava versions between
- 14.0.1 (Hive) and 19.0 (most recent).
+ 14.0.1 (Hive) and 21.0 (most recent; supports only JDK8 and up).
Override with your preferred version and it should work. -->
- <guava.version>18.0</guava.version>
+ <guava.version>20.0</guava.version>
<joda.version>2.8.1</joda.version>
<h2.version>1.4.185</h2.version>
<hadoop.version>2.6.0</hadoop.version>
http://git-wip-us.apache.org/repos/asf/calcite/blob/f10810a2/site/_docs/history.md
----------------------------------------------------------------------
diff --git a/site/_docs/history.md b/site/_docs/history.md
index 51767b2..a85db90 100644
--- a/site/_docs/history.md
+++ b/site/_docs/history.md
@@ -28,6 +28,16 @@ For a full list of releases, see
Downloads are available on the
[downloads page]({{ site.baseurl }}/downloads/).
+## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.12.0">1.12.0</a> / under development
+{: #v1-12-0}
+
+Compatibility: This release is tested
+on Linux, macOS, Microsoft Windows;
+using Oracle JDK 1.7, 1.8, 9;
+Guava versions 14.0 to 21.0;
+Druid version 0.9.1.1;
+other software versions as specified in `pom.xml`.
+
## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.11.0">1.11.0</a> / 2017-01-09
{: #v1-11-0}