citusdata / citusdata/citus

Wrong result for a query generated by Citus Query Generator

Open
#6,872 1 comment 0 reactions 0 assignees View on GitHub
bug tool_reported
Dominant language
C
Stars
12.8k
Forks
794
Avg merge
2d 14h
Merged PRs (30d)
31

Description

1. Run below lines to create and populate distributed tables:

```sql
DROP TABLE IF EXISTS dist0; CREATE TABLE dist0(id int); SELECT create_distributed_table('dist0','id');

DROP TABLE IF EXISTS ref0;
CREATE TABLE ref0(id int);
SELECT create_reference_table('ref0');

DROP TABLE IF EXISTS dist1;
CREATE TABLE dist1(id int);
SELECT create_distributed_table('dist1','id');

DROP TABLE IF EXISTS ref1;
CREATE TABLE ref1(id int);
SELECT create_reference_table('ref1');

INSERT INTO dist0 SELECT i FROM generate_series(0,10) i;INSERT INTO dist0 SELECT i FROM generate_series(1005,1025) i;
INSERT INTO dist0 SELECT * FROM dist0 ORDER BY id LIMIT 1;

INSERT INTO ref0 SELECT i FROM generate_series(0,10) i;INSERT INTO ref0 SELECT i FROM generate_series(1010,1030) i;
INSERT INTO ref0 SELECT NULL FROM generate_series(0,1) i;
INSERT INTO ref0 SELECT * FROM ref0 ORDER BY id LIMIT 1;

INSERT INTO dist1 SELECT i FROM generate_series(0,10) i;INSERT INTO dist1 SELECT i FROM generate_series(1015,1035) i;
INSERT INTO dist1 SELECT * FROM dist1 ORDER BY id LIMIT 1;

INSERT INTO ref1 SELECT i FROM generate_series(0,10) i;INSERT INTO ref1 SELECT i FROM generate_series(1020,1040) i;
INSERT INTO ref1 SELECT NULL FROM generate_series(0,1) i;
INSERT INTO ref1 SELECT * FROM ref1 ORDER BY id LIMIT 1;
```

2. Perform query below to get wrong null result:

```sql
WITH cte_0 AS (
SELECT
table_0.id
FROM
dist0 AS table_0
INNER JOIN ref0 AS table_1 USING (id)
ORDER BY
id
)
SELECT
avg(avgsub.id)
FROM
(
SELECT
table_2.id
FROM
(
SELECT
table_3.id
FROM
cte_0 AS table_3
ORDER BY
id
) AS table_2
WHERE
table_2.id IN (
SELECT
table_4.id
FROM
dist0 AS table_4
RIGHT JOIN (
SELECT
table_6.id
FROM
dist0 AS table_6
INNER JOIN ref1 AS table_7 USING (id)
ORDER BY
id
LIMIT
28
) AS table_5 USING (id)
RIGHT JOIN dist1 AS table_8 USING (id)
WHERE
table_8.id = 6
ORDER BY
id
)
) AS avgsub;

avg
-----

(1 row)
```

3. Undistribute tables:

```sql
select undistribute_table('dist0'), undistribute_table('dist1'), undistribute_table('ref0'), undistribute_table('ref1');
```

4. Rerun the query performed at step 2 to get correct result on PG local tables.
```sql
avg
--------------------
6.0000000000000000
(1 row)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.