citus
citus copied to clipboard
Adding no-op `WHERE true` in subquery flips result (20 rows → 0) with scalar `ORDER BY … LIMIT` subqueries and `BETWEEN`
citus version:
SELECT citus_version();
---Citus 13.2.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
PG version: 17.6
query:
select
*
from
(select
(select c5 from t1 order by c5 limit 1 offset 2)
as c_0,
(select c11 from t24 order by c11 limit 1 offset 4)
as c_1,
ref_0.c9 as c_2,
ref_0.c9 as c_3,
(select pg_catalog.min(vkey) from t1)
as c_7
from
t1 as ref_0
where true::bool
order by c_0 desc, c_1 desc, c_2 asc, c_3 asc, c_7 asc) as subq_0
where (((select vkey from t24 order by vkey limit 1 offset 6)
) between ((subq_0.c_7)) and (subq_0.c_3))
returns 0 rows.
but it will return correct after removing where true::bool
select
*
from
(select
(select c5 from t1 order by c5 limit 1 offset 2)
as c_0,
(select c11 from t24 order by c11 limit 1 offset 4)
as c_1,
ref_0.c9 as c_2,
ref_0.c9 as c_3,
(select pg_catalog.min(vkey) from t1)
as c_7
from
t1 as ref_0
--- where true::bool
order by c_0 desc, c_1 desc, c_2 asc, c_3 asc, c_7 asc) as subq_0
where (((select vkey from t24 order by vkey limit 1 offset 6)
) between ((subq_0.c_7)) and (subq_0.c_3))
SCHEMA to reproduce: