-- This file and its contents are licensed under the Apache License 2.0.
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.

CREATE TABLE cursor_test(time timestamptz, device_id int, temp float);
SELECT create_hypertable('cursor_test','time');

INSERT INTO cursor_test SELECT '2000-01-01',1,0.5;
INSERT INTO cursor_test SELECT '2001-01-01',1,0.5;
INSERT INTO cursor_test SELECT '2002-01-01',1,0.5;

\set ON_ERROR_STOP 0
BEGIN;
DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test;
FETCH NEXT FROM c1;
-- this will produce an error on PG < 14 because PostgreSQL checks
-- for the existence of a scan node with the relation id for every relation
-- used in the update plan in the plan of the cursor.
UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1;
COMMIT;

-- test cursor with no chunks left after runtime exclusion
BEGIN;
DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > now();
UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1;
COMMIT;

-- test cursor with no chunks left after planning exclusion
BEGIN;
DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > '2010-01-01';
UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1;
COMMIT;
\set ON_ERROR_STOP 1

SET timescaledb.enable_constraint_exclusion TO off;
BEGIN;
DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test;
FETCH NEXT FROM c1;
UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1;
COMMIT;

