mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 09:47:00 +02:00
d5a4b69c3a
In this case we generate two PathKey references to the expression (one for DISTINCT and one for ORDER BY) and they really need to refer to the same EquivalenceClass. However get_eclass_for_sort_expr was being overly paranoid and creating two different EC's. Correct behavior is to use the SortGroupRef index to decide whether two references to volatile expressions that are equal() (ie textually equivalent) should be considered the same. Backpatch to 8.4. Possibly this should be changed in 8.3 as well, but I'll refrain in the absence of evidence of a visible failure in that branch. Per bug #5049.
76 lines
1.8 KiB
Plaintext
76 lines
1.8 KiB
Plaintext
--
|
|
-- SELECT_DISTINCT_ON
|
|
--
|
|
SELECT DISTINCT ON (string4) string4, two, ten
|
|
FROM tmp
|
|
ORDER BY string4 using <, two using >, ten using <;
|
|
string4 | two | ten
|
|
---------+-----+-----
|
|
AAAAxx | 1 | 1
|
|
HHHHxx | 1 | 1
|
|
OOOOxx | 1 | 1
|
|
VVVVxx | 1 | 1
|
|
(4 rows)
|
|
|
|
-- this will fail due to conflict of ordering requirements
|
|
SELECT DISTINCT ON (string4, ten) string4, two, ten
|
|
FROM tmp
|
|
ORDER BY string4 using <, two using <, ten using <;
|
|
ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
|
|
LINE 1: SELECT DISTINCT ON (string4, ten) string4, two, ten
|
|
^
|
|
SELECT DISTINCT ON (string4, ten) string4, ten, two
|
|
FROM tmp
|
|
ORDER BY string4 using <, ten using >, two using <;
|
|
string4 | ten | two
|
|
---------+-----+-----
|
|
AAAAxx | 9 | 1
|
|
AAAAxx | 8 | 0
|
|
AAAAxx | 7 | 1
|
|
AAAAxx | 6 | 0
|
|
AAAAxx | 5 | 1
|
|
AAAAxx | 4 | 0
|
|
AAAAxx | 3 | 1
|
|
AAAAxx | 2 | 0
|
|
AAAAxx | 1 | 1
|
|
AAAAxx | 0 | 0
|
|
HHHHxx | 9 | 1
|
|
HHHHxx | 8 | 0
|
|
HHHHxx | 7 | 1
|
|
HHHHxx | 6 | 0
|
|
HHHHxx | 5 | 1
|
|
HHHHxx | 4 | 0
|
|
HHHHxx | 3 | 1
|
|
HHHHxx | 2 | 0
|
|
HHHHxx | 1 | 1
|
|
HHHHxx | 0 | 0
|
|
OOOOxx | 9 | 1
|
|
OOOOxx | 8 | 0
|
|
OOOOxx | 7 | 1
|
|
OOOOxx | 6 | 0
|
|
OOOOxx | 5 | 1
|
|
OOOOxx | 4 | 0
|
|
OOOOxx | 3 | 1
|
|
OOOOxx | 2 | 0
|
|
OOOOxx | 1 | 1
|
|
OOOOxx | 0 | 0
|
|
VVVVxx | 9 | 1
|
|
VVVVxx | 8 | 0
|
|
VVVVxx | 7 | 1
|
|
VVVVxx | 6 | 0
|
|
VVVVxx | 5 | 1
|
|
VVVVxx | 4 | 0
|
|
VVVVxx | 3 | 1
|
|
VVVVxx | 2 | 0
|
|
VVVVxx | 1 | 1
|
|
VVVVxx | 0 | 0
|
|
(40 rows)
|
|
|
|
-- bug #5049: early 8.4.x chokes on volatile DISTINCT ON clauses
|
|
select distinct on (1) floor(random()) as r, f1 from int4_tbl order by 1,2;
|
|
r | f1
|
|
---+-------------
|
|
0 | -2147483647
|
|
(1 row)
|
|
|