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 AsyncKuduScanners that will satifisy the provided filters. It is expected that it is called with RexNode that represent the filters
  • 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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.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 interface org.apache.calcite.rex.RexBiVisitor<List<List<CalciteKuduPredicate>>,org.apache.calcite.rex.RexCall>