[
https://issues.apache.org/jira/browse/CALCITE-6494?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitry Sysolyatin updated CALCITE-6494:
---------------------------------------
Description:
MongoAdapter throws an exception if any function unsupported by MongoProject is
used
A simple example [1]:
{code}
@Test void testCalciteFunc() {
assertModel(MODEL)
.query("select CHAR_LENGTH(state) from zips")
.runs();
}
{code}
throws
{code}
Suppressed: java.lang.IllegalArgumentException: Translation of
CHAR_LENGTH(CAST(ITEM($0, 'state')):VARCHAR(2)) is not supported by MongoProject
{code}
The reason is that MongoProjectRule does not properly filter projects from
LogicalProjects.getNamedProjects that can be used. I think the proper
implementation of this rule should be similar to DruidProjectRule [2]. It
should extract input references from the project if it cannot be fully
supported and add an additional Project on top of MongoProject.
[1] -
https://github.com/dssysolyatin/calcite/commit/96cddae9c6516701e1aa44f7c75df5afdc497f8d
[2] -
https://github.com/apache/calcite/blob/ea1a255fd071a518fe8d30e361efa0696164a037/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java#L353
was:
MongoAdapter throws an exception if any function unsupported by MongoProject is
used
A simple example [1]:
{code}
@Test void testCalciteFunc() {
assertModel(MODEL)
.query("select CHAR_LENGTH(state) from zips")
.runs();
}
{code}
throws
{code}
Suppressed: java.lang.IllegalArgumentException: Translation of
CHAR_LENGTH(CAST(ITEM($0, 'state')):VARCHAR(2)) is not supported by MongoProject
{code}
The reason is that MongoProjectRule does not properly filter projects from
LogicalProjects.getNamedProjects that can be used. I think the proper
implementation of this rule should be similar to DruidProjectRule. It should
extract input references from the project if it cannot be fully supported and
add an additional Project on top of MongoProject.
[1] -
https://github.com/dssysolyatin/calcite/commit/96cddae9c6516701e1aa44f7c75df5afdc497f8d
> MongoAdapter throws an exception if any function unsupported by MongoProject
> is used
> ------------------------------------------------------------------------------------
>
> Key: CALCITE-6494
> URL: https://issues.apache.org/jira/browse/CALCITE-6494
> Project: Calcite
> Issue Type: Bug
> Components: mongodb-adapter
> Affects Versions: 1.37.0
> Reporter: Dmitry Sysolyatin
> Priority: Major
>
> MongoAdapter throws an exception if any function unsupported by MongoProject
> is used
> A simple example [1]:
> {code}
> @Test void testCalciteFunc() {
> assertModel(MODEL)
> .query("select CHAR_LENGTH(state) from zips")
> .runs();
> }
> {code}
> throws
> {code}
> Suppressed: java.lang.IllegalArgumentException: Translation of
> CHAR_LENGTH(CAST(ITEM($0, 'state')):VARCHAR(2)) is not supported by
> MongoProject
> {code}
> The reason is that MongoProjectRule does not properly filter projects from
> LogicalProjects.getNamedProjects that can be used. I think the proper
> implementation of this rule should be similar to DruidProjectRule [2]. It
> should extract input references from the project if it cannot be fully
> supported and add an additional Project on top of MongoProject.
> [1] -
> https://github.com/dssysolyatin/calcite/commit/96cddae9c6516701e1aa44f7c75df5afdc497f8d
> [2] -
> https://github.com/apache/calcite/blob/ea1a255fd071a518fe8d30e361efa0696164a037/druid/src/main/java/org/apache/calcite/adapter/druid/DruidRules.java#L353
--
This message was sent by Atlassian Jira
(v8.20.10#820010)