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/10 21:55:00 UTC

[jira] [Commented] (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=17472340#comment-17472340 ] 

Julian Hyde commented on CALCITE-4979:
--------------------------------------

Would this be *in addition to* the default SELECT expression or *instead of*? If *in addition to*, it is likely that the parser will be ambiguous, because it will have to choose which SELECT variant it is seeing based on just the first keyword.

To resolve this question, it would be useful to see one or two examples of what you have in mind for a "custom select".

> 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)