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 2022/01/11 05:26:00 UTC

[jira] [Comment Edited] (CALCITE-4979) Add support for extending parser to support additional select statements

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

Julian Hyde edited comment on CALCITE-4979 at 1/11/22, 5:25 AM:
----------------------------------------------------------------

I don't understand. If the select statement is "SELECT * FROM PREDICT ( MODEL my_model,
SELECT x, y, z FROM data)" then the parser has to choose when it sees the very first SELECT which variant it is going to parse. It can't defer the decision until it sees PREDICT; nor can it look ahead a constant number of tokens for PREDICT, because PREDICT might be an unbounded number of tokens in the future.

For this case, do you think it would make more sense to extend the {{TableRef()}} clause (i.e. what can appear in FROM)?


was (Author: julianhyde):
I don't understand. If the select statement is "SELECT * FROM PREDICT ( MODEL my_model,
SELECT x, y, z FROM data)" then the parser has to choose when it sees the very first SELECT which variant it is going to parse. It can't defer the decision until it sees PREDICT; nor can it look ahead a constant number of tokens for PREDICT, because PREDICT might be an unbounded number of tokens in the future.

For this case, it would make more sense to extend the {{TableRef()}} clause (i.e. what can appear in FROM).

> Add support for extending parser to support additional select statements
> ------------------------------------------------------------------------
>
>                 Key: CALCITE-4979
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4979
>             Project: Calcite
>          Issue Type: New Feature
>          Components: extensions
>    Affects Versions: 1.29.0
>         Environment: * mac-arm64
>            Reporter: Julian Bright
>            Priority: Minor
>
> Calcite currently supports [extending the parser]([https://calcite.apache.org/docs/adapter.html#extending-the-parser)] with `config.fmpp` that has sections statements including alter and drop.
> I require the ability to introduce a custom `SELECT` like statement which requires adding adding an additional clause to the LeafQuery syntax in the `Parser.jj` file eg:
> {{    /**}}
> {{    * Parses a leaf in a query expression (SELECT, VALUES or TABLE).}}
> {{    */}}
> {{    SqlNode LeafQuery(ExprContext exprContext) :}}
> {{    {}}
> {{        SqlNode e;}}
> {{    }}}
> {{    {}}
> {{        {}}
> {{            // ensure a query is legal in this context}}
> {{            checkQueryExpression(exprContext);}}
> {{        }}}
> {{        e = SqlSelect() \{ return e; }}}
> {{    |}}
> {{    <#-- Add methods to parse additional select statements here -->}}
> {{    <#list (parser.selectStatementParserMethods!default.parser.selectStatementParserMethods) as method>}}
> {{        e = ${method} \{ return e; }}}
> {{    |}}
> {{    </#list>}}
> {{        e = TableConstructor() \{ return e; }}}
> {{    |}}
> {{        e = ExplicitTable(getPos()) \{ return e; }}}
> {{    }}}
> I would like to add a new section `selectStatementParserMethods` to the config eg:
> {{    # List of methods for parsing custom select statements.}}
> {{    selectStatementParserMethods: [}}
> {{      "SqlCustomSelect()"}}
> {{    ]}}
> Files required to be updated main codegen are:
>  * core/src/main/codegen/templates/Parser.jj
>  * core/src/main/codegen/default_config.fmpp



--
This message was sent by Atlassian Jira
(v8.20.1#820001)