You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Julian Bright (Jira)" <ji...@apache.org> on 2022/01/09 20:32:00 UTC
[jira] [Created] (CALCITE-4979) Add support for extending parser to support additional select statements
Julian Bright created CALCITE-4979:
--------------------------------------
Summary: 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
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)