citus/src/test/regress/sql/columnar_cursor.sql

63 lines
1.6 KiB
PL/PgSQL

--
-- Testing cursors on columnar tables.
--
CREATE TABLE test_cursor (a int, b int) USING columnar;
INSERT INTO test_cursor SELECT i, j FROM generate_series(0, 100)i, generate_series(100, 200)j;
-- A case where the WHERE clause might filter out some chunks
EXPLAIN (analyze on, costs off, timing off, summary off) SELECT * FROM test_cursor WHERE a = 25;
BEGIN;
DECLARE a_25 SCROLL CURSOR
FOR SELECT * FROM test_cursor WHERE a = 25 ORDER BY 2;
FETCH 3 FROM a_25;
FETCH PRIOR FROM a_25;
FETCH NEXT FROM a_25;
FETCH NEXT FROM a_25;
FETCH RELATIVE -2 FROM a_25;
FETCH LAST FROM a_25;
FETCH RELATIVE -25 FROM a_25;
MOVE a_25;
FETCH a_25;
MOVE LAST FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
MOVE FORWARD 2 FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
UPDATE test_cursor SET a = 8000 WHERE CURRENT OF a_25;
COMMIT;
-- A case where the WHERE clause doesn't filter out any chunks
EXPLAIN (analyze on, costs off, timing off, summary off) SELECT * FROM test_cursor WHERE a > 25;
BEGIN;
DECLARE a_25 SCROLL CURSOR
FOR SELECT * FROM test_cursor WHERE a > 25 ORDER BY 1, 2;
FETCH 3 FROM a_25;
FETCH PRIOR FROM a_25;
FETCH NEXT FROM a_25;
FETCH NEXT FROM a_25;
FETCH RELATIVE -2 FROM a_25;
FETCH LAST FROM a_25;
FETCH RELATIVE -25 FROM a_25;
MOVE a_25;
FETCH a_25;
MOVE LAST FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
MOVE FORWARD 2 FROM a_25;
FETCH a_25;
MOVE RELATIVE -3 FROM a_25;
FETCH a_25;
UPDATE test_cursor SET a = 8000 WHERE CURRENT OF a_25;
COMMIT;
DROP TABLE test_cursor CASCADE;