mirror of https://github.com/postgres/postgres
Requires adding a guard against shift-by-32. Previously, that was impossible because the number of partitions was always greater than 1, but a new injection point can force the number of partitions to 1. Discussion: https://postgr.es/m/ff4e59305e5d689e03cd256a736348d3e7958f8f.camel@j-davis.compull/200/head
parent
052026c9b9
commit
38172d1856
@ -0,0 +1,68 @@ |
||||
-- Test for hash aggregation |
||||
CREATE EXTENSION injection_points; |
||||
SELECT injection_points_set_local(); |
||||
injection_points_set_local |
||||
---------------------------- |
||||
|
||||
(1 row) |
||||
|
||||
SELECT injection_points_attach('hash-aggregate-enter-spill-mode', 'notice'); |
||||
injection_points_attach |
||||
------------------------- |
||||
|
||||
(1 row) |
||||
|
||||
SELECT injection_points_attach('hash-aggregate-process-batch', 'notice'); |
||||
injection_points_attach |
||||
------------------------- |
||||
|
||||
(1 row) |
||||
|
||||
-- force partition fan-out to 1 |
||||
SELECT injection_points_attach('hash-aggregate-single-partition', 'notice'); |
||||
injection_points_attach |
||||
------------------------- |
||||
|
||||
(1 row) |
||||
|
||||
-- force spilling after 1000 groups |
||||
SELECT injection_points_attach('hash-aggregate-spill-1000', 'notice'); |
||||
injection_points_attach |
||||
------------------------- |
||||
|
||||
(1 row) |
||||
|
||||
CREATE TABLE hashagg_ij(x INTEGER); |
||||
INSERT INTO hashagg_ij SELECT g FROM generate_series(1,5100) g; |
||||
SET max_parallel_workers=0; |
||||
SET max_parallel_workers_per_gather=0; |
||||
SET enable_sort=FALSE; |
||||
SET work_mem='4MB'; |
||||
SELECT COUNT(*) FROM (SELECT DISTINCT x FROM hashagg_ij) s; |
||||
NOTICE: notice triggered for injection point hash-aggregate-spill-1000 |
||||
NOTICE: notice triggered for injection point hash-aggregate-enter-spill-mode |
||||
NOTICE: notice triggered for injection point hash-aggregate-single-partition |
||||
NOTICE: notice triggered for injection point hash-aggregate-process-batch |
||||
NOTICE: notice triggered for injection point hash-aggregate-spill-1000 |
||||
NOTICE: notice triggered for injection point hash-aggregate-enter-spill-mode |
||||
NOTICE: notice triggered for injection point hash-aggregate-single-partition |
||||
NOTICE: notice triggered for injection point hash-aggregate-process-batch |
||||
NOTICE: notice triggered for injection point hash-aggregate-spill-1000 |
||||
NOTICE: notice triggered for injection point hash-aggregate-enter-spill-mode |
||||
NOTICE: notice triggered for injection point hash-aggregate-single-partition |
||||
NOTICE: notice triggered for injection point hash-aggregate-process-batch |
||||
NOTICE: notice triggered for injection point hash-aggregate-spill-1000 |
||||
NOTICE: notice triggered for injection point hash-aggregate-enter-spill-mode |
||||
NOTICE: notice triggered for injection point hash-aggregate-single-partition |
||||
NOTICE: notice triggered for injection point hash-aggregate-process-batch |
||||
NOTICE: notice triggered for injection point hash-aggregate-spill-1000 |
||||
NOTICE: notice triggered for injection point hash-aggregate-enter-spill-mode |
||||
NOTICE: notice triggered for injection point hash-aggregate-single-partition |
||||
NOTICE: notice triggered for injection point hash-aggregate-process-batch |
||||
count |
||||
------- |
||||
5100 |
||||
(1 row) |
||||
|
||||
DROP TABLE hashagg_ij; |
||||
DROP EXTENSION injection_points; |
||||
@ -0,0 +1,26 @@ |
||||
-- Test for hash aggregation |
||||
CREATE EXTENSION injection_points; |
||||
|
||||
SELECT injection_points_set_local(); |
||||
|
||||
SELECT injection_points_attach('hash-aggregate-enter-spill-mode', 'notice'); |
||||
SELECT injection_points_attach('hash-aggregate-process-batch', 'notice'); |
||||
|
||||
-- force partition fan-out to 1 |
||||
SELECT injection_points_attach('hash-aggregate-single-partition', 'notice'); |
||||
|
||||
-- force spilling after 1000 groups |
||||
SELECT injection_points_attach('hash-aggregate-spill-1000', 'notice'); |
||||
|
||||
CREATE TABLE hashagg_ij(x INTEGER); |
||||
INSERT INTO hashagg_ij SELECT g FROM generate_series(1,5100) g; |
||||
|
||||
SET max_parallel_workers=0; |
||||
SET max_parallel_workers_per_gather=0; |
||||
SET enable_sort=FALSE; |
||||
SET work_mem='4MB'; |
||||
|
||||
SELECT COUNT(*) FROM (SELECT DISTINCT x FROM hashagg_ij) s; |
||||
|
||||
DROP TABLE hashagg_ij; |
||||
DROP EXTENSION injection_points; |
||||
Loading…
Reference in new issue