DROP TABLE IF EXISTS tbl;
NOTICE:  table "tbl" does not exist, skipping
DROP TABLE IF EXISTS data_redis_tmp_54321;
NOTICE:  table "data_redis_tmp_54321" does not exist, skipping
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
                         Table "public.tbl"
 Column |  Type   | Modifiers | Storage | Stats target | Description 
--------+---------+-----------+---------+--------------+-------------
 i      | integer |           | plain   |              | 
 j      | integer |           | plain   |              | 
Has OIDs: no
Distribute By: HASH(i)
Location Nodes: ALL DATANODES
Options: orientation=row, compression=no, append_mode=on, rel_cn_oid=16389, append_mode_internal=1, start_ctid_internal=(0.0), end_ctid_internal=(0.0)

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;
 count 
-------
   200
(1 row)

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM  tbl
   MINUS ALL
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);
          ?column?           
-----------------------------
 Check result return code: 0
(1 row)

-- phase 2
DELETE FROM tbl;
ERROR:  delete delta table pg_delete_delta_16389 is not found when do cluster resizing table "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;
 count 
-------
   300
(1 row)

SELECT count(*) FROM tbl;
 count 
-------
   500
(1 row)

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM tbl
   MINUS all
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);
           ?column?            
-------------------------------
 Check result return code: 200
(1 row)

SELECT count(*) FROM data_redis_tmp_54321;
 count 
-------
   300
(1 row)

						
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;
 count 
-------
   800
(1 row)

SELECT count(*) FROM tbl;
 count 
-------
   500
(1 row)

SELECT 'Check result return code: ' || count(*)
FROM
(
   SELECT i, j, ctid FROM tbl
   MINUS all
   SELECT i, j, tupleid FROM data_redis_tmp_54321
);
          ?column?           
-----------------------------
 Check result return code: 0
(1 row)

SELECT count(*) FROM data_redis_tmp_54321;
 count 
-------
   800
(1 row)

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;