[ 
https://issues.apache.org/jira/browse/CALCITE-436?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julian Hyde resolved CALCITE-436.
---------------------------------
       Resolution: Fixed
    Fix Version/s: 0.9.2-incubating

Fixed in 
http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/263640ff.

> Simpler SPI to query Table
> --------------------------
>
>                 Key: CALCITE-436
>                 URL: https://issues.apache.org/jira/browse/CALCITE-436
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>             Fix For: 0.9.2-incubating
>
>
> 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.
> {code}
> 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);
> }
> {code}
> 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.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to