DROP TABLE IF EXISTS tbl;
DROP TABLE IF EXISTS data_redis_tmp_54321;

CREATE OR REPLACE FUNCTION pg_get_redis_rel_end_ctid(text)
RETURNS tid
AS '@abs_bindir@/../lib/postgresql/gsredistribute@DLSUFFIX@','pg_get_redis_rel_end_ctid'
LANGUAGE C STABLE not fenced;

CREATE OR REPLACE FUNCTION pg_get_redis_rel_start_ctid(text)
RETURNS tid
AS '@abs_bindir@/../lib/postgresql/gsredistribute@DLSUFFIX@','pg_get_redis_rel_start_ctid'
LANGUAGE C STABLE not fenced;
CREATE SCHEMA data_redis;
CREATE TABLE tbl(i int, j int);
CREATE TABLE data_redis_tmp_54321(LIKE tbl INCLUDING STORAGE INCLUDING RELOPTIONS INCLUDING DISTRIBUTION INCLUDING CONSTRAINTS, nodeid int, tupleid tid);
INSERT INTO tbl VALUES (generate_series(1, 200), 5);

-- phase 1
ALTER TABLE tbl SET(append_mode=on, rel_cn_oid=16389);
\d+ tbl
INSERT INTO data_redis_tmp_54321
        SELECT *, xc_node_id, ctid
        FROM ONLY tbl
        WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl') AND pg_get_redis_rel_end_ctid('tbl');

SELECT count(*) FROM data_redis_tmp_54321;

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM  tbl
   MINUS ALL
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);

-- phase 2
DELETE FROM tbl;
DELETE FROM data_redis_tmp_54321;

INSERT INTO tbl VALUES (generate_series(201, 500), 5);

ALTER TABLE tbl SET(append_mode=on, rel_cn_oid=16389);

INSERT INTO data_redis_tmp_54321
        SELECT *, xc_node_id, ctid FROM ONLY tbl
        WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl')
                        AND pg_get_redis_rel_end_ctid('tbl');


SELECT count(*) FROM data_redis_tmp_54321;
SELECT count(*) FROM tbl;

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM tbl
   MINUS all
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);

SELECT count(*) FROM data_redis_tmp_54321;
						
ALTER TABLE tbl SET(append_mode=refresh, rel_cn_oid=16389);

INSERT INTO data_redis_tmp_54321
        SELECT *, xc_node_id, ctid FROM ONLY tbl
        WHERE ctid BETWEEN pg_get_redis_rel_start_ctid('tbl')
                        AND pg_get_redis_rel_end_ctid('tbl');

SELECT count(*) FROM data_redis_tmp_54321;
SELECT count(*) FROM tbl;

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM tbl
   MINUS all
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);

SELECT count(*) FROM data_redis_tmp_54321;

ALTER TABLE tbl SET(append_mode=off);
-- drop hash table in shmem

DROP TABLE IF EXISTS tbl;
DROP TABLE IF EXISTS data_redis_tmp_54321;
DROP SCHEMA data_redis CASCADE;
DROP FUNCTION IF EXISTS pg_get_redis_rel_end_ctid;
DROP FUNCTION IF EXISTS pg_get_redis_rel_start_ctid;