You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Nikolay Izhikov (Jira)" <ji...@apache.org> on 2019/10/01 03:09:00 UTC

[jira] [Updated] (IGNITE-11448) SQL: Wrong results of select with aggregates in subquery

     [ https://issues.apache.org/jira/browse/IGNITE-11448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nikolay Izhikov updated IGNITE-11448:
-------------------------------------
    Labels: h2-limitation  (was: )

> SQL: Wrong results of select with aggregates in subquery
> --------------------------------------------------------
>
>                 Key: IGNITE-11448
>                 URL: https://issues.apache.org/jira/browse/IGNITE-11448
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>            Reporter: Roman Kondakov
>            Priority: Major
>              Labels: h2-limitation
>         Attachments: Subquery reproducer
>
>
> Subqueries with aggregates may return wrong results due to incorrect splitting.
> Let's consider a table {{person}}:
> {noformat}
> SELECT id, firstName FROM person:
> [1, firstName1], 
> [2, firstName2], 
> [3, firstName3], 
> [4, firstName4], 
> [5, firstName5], 
> [6, firstName6], 
> [7, firstName7], 
> [8, firstName8], 
> [9, firstName9], 
> [10, firstName10]
> {noformat}
> The result of query {{SELECT COUNT(\*) FROM person}} is {{10}}, which is correct.
> The result of query {{SELECT * FROM person WHERE id = 10}} is {{[10, firstName10]}}, which is also correct.
> But the result of the query {{SELECT * FROM person WHERE id = (SELECT COUNT(\*) FROM person)}} is {{[1, firstName1]}} which is completely wrong.
> The root cause of this behavior is the incorrect query splitting. The latest query is split into these parts:
> Map:
> {noformat}
> SELECT
> __Z0.ID __C0_0,
> __Z0.FIRSTNAME __C0_1
> FROM PUBLIC.PERSON __Z0
> WHERE __Z0.ID = (SELECT
> COUNT(*)
> FROM PUBLIC.PERSON __Z1)
> {noformat}
> Reduce:
> {noformat}
> SELECT
> __C0_0 ID,
> __C0_1 FIRSTNAME
> FROM PUBLIC.__T0
> {noformat}
> As we can see, aggregate {{COUNT(\*)}} is calculated locally on each map node instead of calculating a single global aggregate and then using it in predicate.
> Reproducer is attached.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)