Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-436

Simpler SPI to query Table



    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 0.9.2-incubating
    • None
    • None


      Currently, the easiest way for a Table to return results is to implement TranslatableTable, and in the toRel method return a RelNode. That RelNode is typically a sub-class of TableAccessRelBase and implements itself by generating Java code, which must be compiled an executed.

      We propose an interfaces so that a Table can return results directly.

      import net.hydromatic.avatica.Cursor;
      import org.eigenbase.util.Pair;
      import net.hydromatic.optiq.Table;
      import org.eigenbase.rex.RexNode;
      import org.eigenbase.reltype.RelDataTypeField;
      interface CursorableTable extends Table {
        /** Returns a cursor over the rows in this Table. */
        Cursor scan();
      interface ProjectableCursorableTable extends Table {
        /** Given a list of filters and a list of fields to project, returns a
         * cursor over the rows in this Table and a list of filters that it
         * could not implement.
         * <p>The cursor must implement the projects and any filters not
         * in the list. */
        Pair<Cursor, List<RexNode>> projectFilterScan(List<RexNode> filters, List<RelDataTypeField> projects);

      Cursor is a simple API to implement.

      A table that implements the CursorableTable SPI does not need to implement TranslatableTable, and so can return its results without doing any code generation.

      The ProjectableCursorableTable SPI is also optional and goes further; it allows Calcite to push down simple projects and filters without the Table implementor writing any rules or code-generation code. If the implementation of the SPI cannot handle a particular filter, it just returns it, and Calcite will add its own filter to implement it.


        Issue Links



              julianhyde Julian Hyde
              julianhyde Julian Hyde
              0 Vote for this issue
              2 Start watching this issue