[
https://issues.apache.org/jira/browse/CALCITE-6023?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jordan Hannel updated CALCITE-6023:
-----------------------------------
Description:
Hello all, I believe I have found a bug in SqlToRelConverter. The symptom and
repro are outlined below, and the full stacktrace is attached. This is on
calcite version 1.35.0. Any insight would be much appreciated, thanks!
When I parse the below SQL string to get a SqlNode, and call
SqlToRelConverter.convertQuery on this SqlNode, I get error:
{quote}UnsupportedOperationException: class
org.apache.calcite.sql.SqlBasicCall: LEAD(COUNT( * )) OVER (ORDER BY `dim4`)
{quote}
SQL:
{{SELECT "dim4" AS "dim7", LEAD(COUNT( * ), -1) OVER (ORDER BY "dim4") AS
"measure10"}}
{{FROM (}}
{{ SELECT "timestamp" AS "dim4" FROM "Shared.factDataset") AS "t0"}}
{{GROUP BY "dim4"}}
I have confirmed that my SqlToRelConverter instance seems generally ok, because
it is able to convert many other SqlNodes to RelNodes. After some
experimentation, I noticed that just changing `ORDER BY "dim4"` to `ORDER BY
"t0"."dim4"` fixes the issue - after that, the SqlNode successfully is
translated to a RelNode.
Below is the way I am invoking convertQuery. The error comes in the last line,
on invocation of convertQuery
{{var config = Frameworks.newConfigBuilder()}}
{{ .operatorTable(getOperatorTable())}}
{{ .parserConfig(defaultParserConfig().build())}}
{{ .build();}}
{{var sqlNode = Frameworks.getPlanner(config).parse(sqlString);}}
{{var typeFactory = new JavaTypeFactoryImpl();}}
{{var calciteSchema = buildCalciteSchema(typeFactory, schema);}}
{{var catalogReader = new CalciteCatalogReader(}}
{{ calciteSchema,}}
{{ List.of(),}}
{{ typeFactory,}}
{{ CalciteConnectionConfig.DEFAULT);}}
{{var validator = new SqlValidatorImpl(}}
{{ getOperatorTable(),}}
{{ catalogReader,}}
{{ typeFactory,}}
{{ SqlValidator.Config.DEFAULT.withCallRewrite(false)) {};}}
{{var vol = new VolcanoPlanner();}}
{{vol.addRelTraitDef(ConventionTraitDef.INSTANCE);}}
{{var cluster = RelOptCluster.create(vol, new RexBuilder(typeFactory));}}
{{var sqlToRel = new SqlToRelConverter(}}
{{ NOOP_EXPANDER,}}
{{ validator,}}
{{ catalogReader,}}
{{ cluster,}}
{{ StandardConvertletTable.INSTANCE,}}
{{ SqlToRelConverter.config());}}
{{return sqlToRel.convertQuery(sqlNode, true, true);}}
was:
Hello all, I believe I have found a bug in SqlToRelConverter. The symptom and
repro are outlined below, and the full stacktrace is attached. This is on
calcite version 1.35.0. Any insight would be much appreciated, thanks!
When I parse the below SQL string to get a SqlNode, and call
SqlToRelConverter.convertQuery on this SqlNode, I get error:
{quote}UnsupportedOperationException: class
org.apache.calcite.sql.SqlBasicCall: LEAD(COUNT( * )) OVER (ORDER BY `dim4`)
{quote}
SQL:
{{SELECT "dim4" AS "dim7", LEAD(COUNT( * ), -1) OVER (ORDER BY "dim4") AS
"measure10"}}
{{FROM (}}
{{ SELECT "timestamp" AS "dim4" FROM "Shared.factDataset") AS "t0"}}
{{GROUP BY "dim4"}}
I have confirmed that my SqlToRelConverter instance seems generally ok, because
it is able to convert many other SqlNodes to RelNodes. After some
experimentation, I noticed that just changing `ORDER BY "dim4"` to `ORDER BY
"t0"."dim4"` fixes the issue - after that, the SqlNode successfully is
translated to a RelNode.
Below is the way I am invoking convertQuery. The error comes in the last line,
on invocation of convertQuery
{{
var config = Frameworks.newConfigBuilder()
.operatorTable(getOperatorTable())
.parserConfig(defaultParserConfig().build())
.build();
var sqlNode = Frameworks.getPlanner(config).parse(sqlString);
var typeFactory = new JavaTypeFactoryImpl();
var calciteSchema = buildCalciteSchema(typeFactory, schema);
var catalogReader = new CalciteCatalogReader(
calciteSchema,
List.of(),
typeFactory,
CalciteConnectionConfig.DEFAULT);
var validator = new SqlValidatorImpl(
getOperatorTable(),
catalogReader,
typeFactory,
SqlValidator.Config.DEFAULT.withCallRewrite(false)) {};
var vol = new VolcanoPlanner();
vol.addRelTraitDef(ConventionTraitDef.INSTANCE);
var cluster = RelOptCluster.create(vol, new RexBuilder(typeFactory));
var sqlToRel = new SqlToRelConverter(
NOOP_EXPANDER,
validator,
catalogReader,
cluster,
StandardConvertletTable.INSTANCE,
SqlToRelConverter.config());
return sqlToRel.convertQuery(sqlNode, true, true);
}}
> Error in SqlToRelConverter.convertQuery, possibly due to unqualified column
> reference
> -------------------------------------------------------------------------------------
>
> Key: CALCITE-6023
> URL: https://issues.apache.org/jira/browse/CALCITE-6023
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.35.0
> Reporter: Jordan Hannel
> Priority: Major
> Attachments: stacktrace.txt
>
>
> Hello all, I believe I have found a bug in SqlToRelConverter. The symptom and
> repro are outlined below, and the full stacktrace is attached. This is on
> calcite version 1.35.0. Any insight would be much appreciated, thanks!
> When I parse the below SQL string to get a SqlNode, and call
> SqlToRelConverter.convertQuery on this SqlNode, I get error:
> {quote}UnsupportedOperationException: class
> org.apache.calcite.sql.SqlBasicCall: LEAD(COUNT( * )) OVER (ORDER BY `dim4`)
> {quote}
> SQL:
> {{SELECT "dim4" AS "dim7", LEAD(COUNT( * ), -1) OVER (ORDER BY "dim4") AS
> "measure10"}}
> {{FROM (}}
> {{ SELECT "timestamp" AS "dim4" FROM "Shared.factDataset") AS "t0"}}
> {{GROUP BY "dim4"}}
> I have confirmed that my SqlToRelConverter instance seems generally ok,
> because it is able to convert many other SqlNodes to RelNodes. After some
> experimentation, I noticed that just changing `ORDER BY "dim4"` to `ORDER BY
> "t0"."dim4"` fixes the issue - after that, the SqlNode successfully is
> translated to a RelNode.
>
> Below is the way I am invoking convertQuery. The error comes in the last
> line, on invocation of convertQuery
> {{var config = Frameworks.newConfigBuilder()}}
> {{ .operatorTable(getOperatorTable())}}
> {{ .parserConfig(defaultParserConfig().build())}}
> {{ .build();}}
> {{var sqlNode = Frameworks.getPlanner(config).parse(sqlString);}}
> {{var typeFactory = new JavaTypeFactoryImpl();}}
> {{var calciteSchema = buildCalciteSchema(typeFactory, schema);}}
> {{var catalogReader = new CalciteCatalogReader(}}
> {{ calciteSchema,}}
> {{ List.of(),}}
> {{ typeFactory,}}
> {{ CalciteConnectionConfig.DEFAULT);}}
> {{var validator = new SqlValidatorImpl(}}
> {{ getOperatorTable(),}}
> {{ catalogReader,}}
> {{ typeFactory,}}
> {{ SqlValidator.Config.DEFAULT.withCallRewrite(false)) {};}}
> {{var vol = new VolcanoPlanner();}}
> {{vol.addRelTraitDef(ConventionTraitDef.INSTANCE);}}
> {{var cluster = RelOptCluster.create(vol, new RexBuilder(typeFactory));}}
> {{var sqlToRel = new SqlToRelConverter(}}
> {{ NOOP_EXPANDER,}}
> {{ validator,}}
> {{ catalogReader,}}
> {{ cluster,}}
> {{ StandardConvertletTable.INSTANCE,}}
> {{ SqlToRelConverter.config());}}
> {{return sqlToRel.convertQuery(sqlNode, true, true);}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)