CREATE DATABASE db_gin_utf8 TEMPLATE template0 encoding 'UTF8';
\c db_gin_utf8

SET ENABLE_SEQSCAN=OFF;
SET ENABLE_INDEXSCAN=OFF;
SET ENABLE_BITMAPSCAN=ON;

--- import data
create table import_data(id int, strType varchar(10), numType varchar(20), textType text);
copy import_data from '@abs_srcdir@/data/gin_data_1000.txt';

--- import data then create index
create table gin_test_data(id int, strType varchar(10), numType varchar(20), textType text);
insert into gin_test_data select 1, strType, numType, textType from import_data;
--- 6 times
insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--- create index
create index strType_idx on gin_test_data using gin(to_tsvector('ngram', strType)) with (fastupdate=on);
create index numType_idx on gin_test_data using gin(to_tsvector('ngram', numType)) with (fastupdate=on);
create index textType_idx on gin_test_data using gin(to_tsvector('ngram', textType)) with (fastupdate=on);
--- select
select count(*) from gin_test_data where to_tsvector('ngram', strType) @@ to_tsquery('ngram', 'BRM');
select count(*) from gin_test_data where to_tsvector('ngram', strType) @@ to_tsquery('ngram', 'tZ');
select count(*) from gin_test_data where to_tsvector('ngram', textType) @@ to_tsquery('ngram', '曹瞒');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '58');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '!58');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '711658601');

--- gin data page split
create table gin_test_data_1(id int, numType varchar(20));
insert into gin_test_data_1 select id, numType from gin_test_data;
--- 7 times
insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
--insert into gin_test_data_1 select * from gin_test_data_1;
vacuum freeze gin_test_data_1;
create index numType_idx_1 on gin_test_data_1 using gin(to_tsvector('ngram', numType)) with (fastupdate=on);
delete from gin_test_data_1;
vacuum gin_test_data_1;

--- import data with index
truncate gin_test_data;
vacuum full gin_test_data;
insert into gin_test_data select 1, strType, numType, textType from import_data;
--- 6 times
insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--insert into gin_test_data select * from gin_test_data;
--- select
select count(*) from gin_test_data where to_tsvector('ngram', strType) @@ to_tsquery('ngram', 'BRM');
select count(*) from gin_test_data where to_tsvector('ngram', strType) @@ to_tsquery('ngram', 'tZ');
select count(*) from gin_test_data where to_tsvector('ngram', textType) @@ to_tsquery('ngram', '曹瞒');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '58');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '!58');
select count(*) from gin_test_data where to_tsvector('ngram', numType) @@ to_tsquery('ngram', '711658601');

--- vacuum
vacuum gin_test_data;
delete from gin_test_data;
vacuum gin_test_data;
truncate gin_test_data;
vacuum full gin_test_data;