CREATE SCHEMA columnar_first_row_number;
SET search_path tO columnar_first_row_number;
CREATE TABLE col_table_1 (a int) USING columnar;
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 10) i;
BEGIN;
  -- we don't use same first_row_number even if the xact is rollback'ed
  INSERT INTO col_table_1 SELECT i FROM generate_series(1, 11) i;
ROLLBACK;
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 12) i;
ALTER TABLE col_table_1 SET (columnar.stripe_row_limit = 1000);
INSERT INTO col_table_1 SELECT i FROM generate_series(1, 2350) i;
SELECT row_count, first_row_number FROM columnar.stripe a
WHERE a.storage_id = columnar.get_storage_id('col_table_1'::regclass)
ORDER BY stripe_num;
 row_count | first_row_number
---------------------------------------------------------------------
        10 |                1
        12 |           300001
      1000 |           450001
      1000 |           451001
       350 |           452001
(5 rows)

VACUUM FULL col_table_1;
-- show that we properly update first_row_number after VACUUM FULL
SELECT row_count, first_row_number FROM columnar.stripe a
WHERE a.storage_id = columnar.get_storage_id('col_table_1'::regclass)
ORDER BY stripe_num;
 row_count | first_row_number
---------------------------------------------------------------------
      1000 |                1
      1000 |             1001
       372 |             2001
(3 rows)

TRUNCATE col_table_1;
BEGIN;
  INSERT INTO col_table_1 SELECT i FROM generate_series(1, 16) i;
  INSERT INTO col_table_1 SELECT i FROM generate_series(1, 16) i;
COMMIT;
-- show that we start with first_row_number=1 after TRUNCATE
SELECT row_count, first_row_number FROM columnar.stripe a
WHERE a.storage_id = columnar.get_storage_id('col_table_1'::regclass)
ORDER BY stripe_num;
 row_count | first_row_number
---------------------------------------------------------------------
        32 |                1
(1 row)

SET client_min_messages TO ERROR;
DROP SCHEMA columnar_first_row_number CASCADE;
