Package com.twilio.kudu.sql.rules
Class KuduPredicatePushDownVisitor
java.lang.Object
com.twilio.kudu.sql.rules.KuduPredicatePushDownVisitor
- All Implemented Interfaces:
org.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
public class KuduPredicatePushDownVisitor
extends Object
implements org.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,org.apache.calcite.rex.RexCall>
KuduPredicatePushDownVisitor returns a List of a List of
CalciteKuduPredicates. The inner list represents a
AsyncKuduScanner
that can be executed
independently of each other. The outer list therefore represents a List of
AsyncKuduScanner
s that will satifisy the provided filters.
It is expected that it is called with RexNode
that represent the
filters-
Constructor Summary
ConstructorsConstructorDescriptionKuduPredicatePushDownVisitor
(org.apache.calcite.rex.RexBuilder rexBuilder, int primaryKeyColumnCount, boolean disableInListOptimization) -
Method Summary
Modifier and TypeMethodDescriptionboolean
static List<List<CalciteKuduPredicate>>
mergePredicateLists
(org.apache.calcite.sql.SqlKind booleanOp, List<List<CalciteKuduPredicate>> left, List<List<CalciteKuduPredicate>> right) visitCall
(org.apache.calcite.rex.RexCall call, org.apache.calcite.rex.RexCall parent) A sql function call, process it.visitCorrelVariable
(org.apache.calcite.rex.RexCorrelVariable correlVariable, org.apache.calcite.rex.RexCall parent) visitDynamicParam
(org.apache.calcite.rex.RexDynamicParam dynamicParam, org.apache.calcite.rex.RexCall parent) visitFieldAccess
(org.apache.calcite.rex.RexFieldAccess fieldAccess, org.apache.calcite.rex.RexCall parent) visitInputRef
(org.apache.calcite.rex.RexInputRef inputRef, org.apache.calcite.rex.RexCall parent) visitLiteral
(org.apache.calcite.rex.RexLiteral literal, org.apache.calcite.rex.RexCall parent) This visit method adds a predicate.visitLocalRef
(org.apache.calcite.rex.RexLocalRef localRef, org.apache.calcite.rex.RexCall parent) visitOver
(org.apache.calcite.rex.RexOver over, org.apache.calcite.rex.RexCall parent) visitPatternFieldRef
(org.apache.calcite.rex.RexPatternFieldRef ref, org.apache.calcite.rex.RexCall parent) visitRangeRef
(org.apache.calcite.rex.RexRangeRef rangeRef, org.apache.calcite.rex.RexCall parent) visitSubQuery
(org.apache.calcite.rex.RexSubQuery subQuery, org.apache.calcite.rex.RexCall parent) visitTableInputRef
(org.apache.calcite.rex.RexTableInputRef ref, org.apache.calcite.rex.RexCall parent) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.calcite.rex.RexBiVisitor
visitEach, visitEachIndexed, visitList, visitList
-
Constructor Details
-
KuduPredicatePushDownVisitor
public KuduPredicatePushDownVisitor(org.apache.calcite.rex.RexBuilder rexBuilder, int primaryKeyColumnCount, boolean disableInListOptimization)
-
-
Method Details
-
areAllFiltersApplied
public boolean areAllFiltersApplied()- Returns:
- true if we can push down all filters to kudu
-
mergePredicateLists
public static List<List<CalciteKuduPredicate>> mergePredicateLists(org.apache.calcite.sql.SqlKind booleanOp, List<List<CalciteKuduPredicate>> left, List<List<CalciteKuduPredicate>> right) -
visitCall
public List<List<CalciteKuduPredicate>> visitCall(org.apache.calcite.rex.RexCall call, org.apache.calcite.rex.RexCall parent) A sql function call, process it. Including handling boolean calls.- Specified by:
visitCall
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall> - Parameters:
call
- this is the relational call object to process- Returns:
- updated list of kudu predicates
-
visitInputRef
public List<List<CalciteKuduPredicate>> visitInputRef(org.apache.calcite.rex.RexInputRef inputRef, org.apache.calcite.rex.RexCall parent) - Specified by:
visitInputRef
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitLocalRef
public List<List<CalciteKuduPredicate>> visitLocalRef(org.apache.calcite.rex.RexLocalRef localRef, org.apache.calcite.rex.RexCall parent) - Specified by:
visitLocalRef
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitLiteral
public List<List<CalciteKuduPredicate>> visitLiteral(org.apache.calcite.rex.RexLiteral literal, org.apache.calcite.rex.RexCall parent) This visit method adds a predicate. this is the leaf of a tree so it gets to create a fresh list of list- Specified by:
visitLiteral
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitOver
public List<List<CalciteKuduPredicate>> visitOver(org.apache.calcite.rex.RexOver over, org.apache.calcite.rex.RexCall parent) - Specified by:
visitOver
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitCorrelVariable
public List<List<CalciteKuduPredicate>> visitCorrelVariable(org.apache.calcite.rex.RexCorrelVariable correlVariable, org.apache.calcite.rex.RexCall parent) - Specified by:
visitCorrelVariable
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitDynamicParam
public List<List<CalciteKuduPredicate>> visitDynamicParam(org.apache.calcite.rex.RexDynamicParam dynamicParam, org.apache.calcite.rex.RexCall parent) - Specified by:
visitDynamicParam
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitRangeRef
public List<List<CalciteKuduPredicate>> visitRangeRef(org.apache.calcite.rex.RexRangeRef rangeRef, org.apache.calcite.rex.RexCall parent) - Specified by:
visitRangeRef
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitFieldAccess
public List<List<CalciteKuduPredicate>> visitFieldAccess(org.apache.calcite.rex.RexFieldAccess fieldAccess, org.apache.calcite.rex.RexCall parent) - Specified by:
visitFieldAccess
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitSubQuery
public List<List<CalciteKuduPredicate>> visitSubQuery(org.apache.calcite.rex.RexSubQuery subQuery, org.apache.calcite.rex.RexCall parent) - Specified by:
visitSubQuery
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitTableInputRef
public List<List<CalciteKuduPredicate>> visitTableInputRef(org.apache.calcite.rex.RexTableInputRef ref, org.apache.calcite.rex.RexCall parent) - Specified by:
visitTableInputRef
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-
visitPatternFieldRef
public List<List<CalciteKuduPredicate>> visitPatternFieldRef(org.apache.calcite.rex.RexPatternFieldRef ref, org.apache.calcite.rex.RexCall parent) - Specified by:
visitPatternFieldRef
in interfaceorg.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,
org.apache.calcite.rex.RexCall>
-