blob: 40d92067636fda6f0df63260fcc99eccd1df6224 [file] [log] [blame]
-- @Description Tests syntax for the PARALLEL RETRIEVE CURSOR statement
--
DROP TABLE IF EXISTS t1;
DROP
CREATE TABLE t1 (a INT) DISTRIBUTED by (a);
CREATE
insert into t1 select generate_series(1,100);
INSERT 100
-- Test1: PARALLEL RETRIEVE CURSOR with other options (WITH HOLD/SCROLL) is not supported
BEGIN;
BEGIN
DECLARE c1 PARALLEL RETRIEVE CURSOR WITHOUT HOLD FOR SELECT * FROM t1;
DECLARE
DECLARE c2 PARALLEL RETRIEVE CURSOR WITH HOLD FOR SELECT * FROM t1;
ERROR: DECLARE PARALLEL RETRIEVE CURSOR WITH HOLD ... is not supported
DETAIL: Holdable cursors can not be parallel
ROLLBACK;
ROLLBACK
BEGIN;
BEGIN
DECLARE c1 NO SCROLL PARALLEL RETRIEVE CURSOR FOR SELECT * FROM t1;
DECLARE
DECLARE c2 SCROLL PARALLEL RETRIEVE CURSOR FOR SELECT * FROM t1;
ERROR: SCROLL is not allowed for the PARALLEL RETRIEVE CURSORs
DETAIL: Scrollable cursors can not be parallel
ROLLBACK;
ROLLBACK
-- Test2: PARALLEL RETRIEVE CURSOR can not support FETCH/MOVE statement
BEGIN;
BEGIN
DECLARE c1 PARALLEL RETRIEVE CURSOR FOR SELECT * FROM t1;
DECLARE
FETCH ALL FROM c1;
ERROR: cannot specify 'FETCH' for PARALLEL RETRIEVE CURSOR
HINT: Use 'RETRIEVE' statement on endpoint instead.
ROLLBACK;
ROLLBACK
BEGIN;
BEGIN
DECLARE c1 PARALLEL RETRIEVE CURSOR FOR SELECT * FROM t1;
DECLARE
MOVE 10 FROM c1;
ERROR: the 'MOVE' statement for PARALLEL RETRIEVE CURSOR is not supported
ROLLBACK;
ROLLBACK
-- Test3: non-PARALLEL RETRIEVE CURSOR can not support the PARALLEL RETRIEVE CURSOR related UDF
BEGIN;
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
DECLARE
SELECT * FROM gp_wait_parallel_retrieve_cursor('c1', 0);
ERROR: cursor is not a PARALLEL RETRIEVE CURSOR
ROLLBACK;
ROLLBACK
BEGIN;
BEGIN
DECLARE c1 CURSOR FOR SELECT * FROM t1;
DECLARE
SELECT * FROM gp_wait_parallel_retrieve_cursor('c1', -1);
ERROR: cursor is not a PARALLEL RETRIEVE CURSOR
ROLLBACK;
ROLLBACK
-- Test4: PARALLEL RETRIEVE CURSOR can not support in SPI
BEGIN;
BEGIN
DECLARE c1 CURSOR WITHOUT HOLD FOR SELECT * FROM t1;
DECLARE
DO $$ DECLARE i int4; c2 refcursor = 'c1'; BEGIN FETCH FROM c2 INTO i; RAISE NOTICE '%', i; END; $$;
DO
ROLLBACK;
ROLLBACK
BEGIN;
BEGIN
DECLARE c3 PARALLEL RETRIEVE CURSOR WITHOUT HOLD FOR SELECT * FROM t1;
DECLARE
DO $$ DECLARE i int4; c4 refcursor = 'c3'; BEGIN FETCH FROM c4 INTO i; RAISE NOTICE '%', i; END; $$;
ERROR: The PARALLEL RETRIEVE CURSOR is not supported in SPI.
HINT: Use normal cursor statement instead.
CONTEXT: PL/pgSQL function inline_code_block line 1 at FETCH
ROLLBACK;
ROLLBACK