Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: NormalizationRule::PushPredicateThroughJoin is executed incorrectly during correlated subqueries #194

Closed
KKould opened this issue Mar 30, 2024 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@KKould
Copy link
Member

KKould commented Mar 30, 2024

          > It seems that there is something wrong with `HashJoin`, I'm debugging now, I'll merge this first

ops, I found the problem. In correlated subqueries, there is no left data in right.
so this case will return empty data (wrong)

let fnck_sql = DataBaseBuilder::path(temp_dir.path())
    .build()
    .await?;
let _ = fnck_sql
    .run("create table t2(id int primary key, a int not null, b int not null);")
    .await?;
let _ = fnck_sql
    .run("create table t3(id int primary key, a int not null, c int not null);")
    .await?;
let _ = fnck_sql
    .run("insert into t2 values (0, 1, 2), (3, 4, 5), (8, 0, 0);")
    .await?;
let _ = fnck_sql
    .run("insert into t3 values (0, 2, 2), (3, 8, 5);")
    .await?;
let (schema, tuples) = fnck_sql.run("select id,a,b from t2 where id in (select a from t3 where a > t2.a);").await?;
println!("{}", create_table(&schema, &tuples));

there is only t3.a on the right but no t2.a, so filter always returns false

+--------------------------------------------------------------------+
| PLAN                                                               |
+====================================================================+
| Projection [t2.id, t2.a, t2.b] [Project]                           |
|   LeftSemi Join On t2.id = (t3.a) as (_temp_table_0_.a) [HashJoin] |
|     Scan t2 -> [id, a, b] [SeqScan]                                |
|     Projection [(t3.a) as (_temp_table_0_.a)] [Project]            |
|       Projection [t3.a] [Project]                                  |
|         Filter (t3.a > t2.a), Is Having: false [Filter]            |
|           Scan t3 -> [a] [SeqScan]                                 |
+--------------------------------------------------------------------+

I think this problem is caused by NormalizationRule: PushPredicateThroughJoin

Originally posted by @KKould in #192 (comment)

@KKould KKould changed the title > It seems that there is something wrong with HashJoin, I'm debugging now, I'll merge this first Bug: NormalizationRule::PushPredicateThroughJoin is executed incorrectly during correlated subqueries Mar 30, 2024
@KKould KKould added the bug Something isn't working label Mar 30, 2024
@KKould KKould self-assigned this Mar 30, 2024
@KKould KKould closed this as completed Mar 30, 2024
@KKould
Copy link
Member Author

KKould commented Mar 30, 2024

mistake

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant