You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2014/10/19 10:05:33 UTC

[jira] [Commented] (OPTIQ-436) Simpler SPI to query Table

    [ https://issues.apache.org/jira/browse/OPTIQ-436?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14176249#comment-14176249 ] 

Julian Hyde commented on OPTIQ-436:
-----------------------------------

It's possible the fix also fixes OPTIQ-397. Check when the fix is ready.

> Simpler SPI to query Table
> --------------------------
>
>                 Key: OPTIQ-436
>                 URL: https://issues.apache.org/jira/browse/OPTIQ-436
>             Project: Optiq
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>
> 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)