[
https://issues.apache.org/jira/browse/CALCITE-5506?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jiajun Xie updated CALCITE-5506:
--------------------------------
Description:
Here is a sql
{code:java}
select l.v as l_cost
from (
select 0 as v,
1 as k
) l
join (
select sum("cost") as v,
1 as k
from (
select 1 as "cost"
union
select 2 as "cost"
)
) r
on l.k = r.k {code}
Before trimming, the RelNode is
{code:java}
LogicalProject(L_COST=[$0])
LogicalJoin(condition=[=($1, $3)], joinType=[inner])
LogicalValues(tuples=[[{ 0, 1 }]])
LogicalProject(V=[$0], K=[1])
LogicalAggregate(group=[{}], V=[SUM($0)]) <!-- Here is SUM() -->
LogicalUnion(all=[false])
LogicalValues(tuples=[[{ 1 }]])
LogicalValues(tuples=[[{ 2 }]]) {code}
After trimming, the RelNode is
{code:java}
LogicalProject(L_COST=[$0])
LogicalJoin(condition=[=($1, $2)], joinType=[inner])
LogicalValues(tuples=[[{ 0, 1 }]])
LogicalProject(K=[1])
LogicalAggregate(group=[{}], DUMMY=[COUNT()]) <!-- Missing SUM() -->
LogicalUnion(all=[false])
LogicalValues(tuples=[[{ 1 }]])
LogicalValues(tuples=[[{ 2 }]]){code}
If we convert trimmed RelNode to sql, the sql will be
{code:java}
SELECT *
FROM
(VALUES (0, 1)) AS "t" ("V", "K")
INNER JOIN
(SELECT 1 AS "K" -- Missing SUM()
FROM (SELECT *
FROM (VALUES (1)) AS "t" ("cost")
UNION
SELECT *
FROM (VALUES (2)) AS "t" ("cost")) AS "t2"
) AS "t4"
ON "t"."K" = "t4"."K" {code}
The origin sql only has one row result, but the new sql that be trimmed has two
row result.
was:
Here is a sql
{code:java}
select l.v as l_cost
from (
select 0 as v,
1 as k
) l
join (
select sum("cost") as v,
1 as k
from (
select 1 as "cost"
union
select 2 as "cost"
)
) r
on l.k = r.k {code}
Before trimming, the RelNode is
{code:java}
LogicalProject(L_COST=[$0])
LogicalJoin(condition=[=($1, $3)], joinType=[inner])
LogicalValues(tuples=[[{ 0, 1 }]])
LogicalProject(V=[$0], K=[1])
LogicalAggregate(group=[{}], V=[SUM($0)]) <!-- Here is SUM() -->
LogicalUnion(all=[false])
LogicalValues(tuples=[[{ 1 }]])
LogicalValues(tuples=[[{ 2 }]]) {code}
After trimming, the RelNode is
{code:java}
LogicalProject(L_COST=[$0])
LogicalJoin(condition=[=($1, $2)], joinType=[inner])
LogicalValues(tuples=[[{ 0, 1 }]])
LogicalProject(K=[1])
LogicalAggregate(group=[{}], DUMMY=[COUNT()]) <!-- Missing SUM() -->
LogicalUnion(all=[false])
LogicalValues(tuples=[[{ 1 }]])
LogicalValues(tuples=[[{ 2 }]]){code}
If we convert trimmed RelNode to sql, the sql will be
{code:java}
SELECT *
FROM
(VALUES (0, 1)) AS "t" ("V", "K")
INNER JOIN
(SELECT 1 AS "K" -- Missing SUM()
FROM (SELECT *
FROM (VALUES (1)) AS "t" ("cost")
UNION
SELECT *
FROM (VALUES (2)) AS "t" ("cost")) AS "t2"
) AS "t4"
ON "t"."K" = "t4"."K" {code}
The origin sql only has one row result, but the new sql that be trimmed has two
row result.
> RelToSqlConverter get error result because RelFieldTrimmer lost aggregate
> function
> ----------------------------------------------------------------------------------
>
> Key: CALCITE-5506
> URL: https://issues.apache.org/jira/browse/CALCITE-5506
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Reporter: Jiajun Xie
> Priority: Major
>
> Here is a sql
> {code:java}
> select l.v as l_cost
> from (
> select 0 as v,
> 1 as k
> ) l
> join (
> select sum("cost") as v,
> 1 as k
> from (
> select 1 as "cost"
> union
> select 2 as "cost"
> )
> ) r
> on l.k = r.k {code}
> Before trimming, the RelNode is
> {code:java}
> LogicalProject(L_COST=[$0])
> LogicalJoin(condition=[=($1, $3)], joinType=[inner])
> LogicalValues(tuples=[[{ 0, 1 }]])
> LogicalProject(V=[$0], K=[1])
> LogicalAggregate(group=[{}], V=[SUM($0)]) <!-- Here is SUM() -->
> LogicalUnion(all=[false])
> LogicalValues(tuples=[[{ 1 }]])
> LogicalValues(tuples=[[{ 2 }]]) {code}
> After trimming, the RelNode is
> {code:java}
> LogicalProject(L_COST=[$0])
> LogicalJoin(condition=[=($1, $2)], joinType=[inner])
> LogicalValues(tuples=[[{ 0, 1 }]])
> LogicalProject(K=[1])
> LogicalAggregate(group=[{}], DUMMY=[COUNT()]) <!-- Missing SUM() -->
> LogicalUnion(all=[false])
> LogicalValues(tuples=[[{ 1 }]])
> LogicalValues(tuples=[[{ 2 }]]){code}
> If we convert trimmed RelNode to sql, the sql will be
> {code:java}
> SELECT *
> FROM
> (VALUES (0, 1)) AS "t" ("V", "K")
> INNER JOIN
> (SELECT 1 AS "K" -- Missing SUM()
> FROM (SELECT *
> FROM (VALUES (1)) AS "t" ("cost")
> UNION
> SELECT *
> FROM (VALUES (2)) AS "t" ("cost")) AS "t2"
> ) AS "t4"
> ON "t"."K" = "t4"."K" {code}
> The origin sql only has one row result, but the new sql that be trimmed has
> two row result.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)