text: --
  --prepared execute bypass
  --
  set enable_opfusion=on;
  set enable_bitmapscan=off;
  set enable_seqscan=off;
  set opfusion_debug_mode = 'log';
  set log_min_messages=debug;
  set logging_module = 'on(OPFUSION)';
  set sql_beta_feature = 'index_cost_with_leaf_pages_only';
  
  drop table if exists test_bypass_sq1;
  create table test_bypass_sq1(col1 int, col2 int, col3 text);
  create index itest_bypass_sq1 on test_bypass_sq1(col1,col2);
  
  prepare p11 as insert into test_bypass_sq1 values($1,$2,$3);
  prepare p12 as insert into test_bypass_sq1(col1,col2) values ($1,$2);
  --bypass
  explain execute p11(0,0,'test_insert');
  execute p11(0,0,'test_insert');
  execute p11(1,1,'test_insert');
  execute p11(-1,-1,'test_insert2');
  execute p11(2,2,'test_insert2');
  execute p11(3,3,'test_insert3');
  execute p11(0,0,'test_insert3');
  explain execute p12(1,1);
  execute p12(1,1);
  execute p12(2,2);
  execute p12(0,0);
  execute p11(null,null,null);
  --bypass
  prepare p13 as select * from test_bypass_sq1 where col1=$1 and col2=$2;
  explain execute p13(0,0);
  execute p13(0,0);
  prepare p13 as select col1,col2 from test_bypass_sq1 where col1=$1 and col2=$2;
  --bypass through index only scan
  explain execute p13(0,0);
  execute p13(0,0);
  set enable_indexonlyscan=off;
  execute p13(0,0);
  reset enable_indexonlyscan;
  --not bypass (distribute key)
  --prepare p14 as update test_bypass_sq1 set col1=col1+$4,col2=$5,col3=$3 where col1=$1 and col2=$2;
  --execute p14 (0,0,'test_update',3,-1);
  --bypass
  prepare p15 as update test_bypass_sq1 set col2=col2+$4,col3=$3 where col1=$1 and col2=$2;
  execute p15 (0,0,'test_update',-1);
  --bypass
  prepare p16 as update test_bypass_sq1 set col2=mod($1,$2)  where col1=$3 and col2=$4;
  execute p16(5,3,1,1);
  --bypass / set  enable_bitmapscan=off;
  prepare p101 as update test_bypass_sq1 set col2=$1,col3=$2 where  col1=$3 ;
  execute p101 (111,'test_update2',-1);
  prepare p102 as select * from  test_bypass_sq1 where col1=$1;
  execute p102 (1);
  prepare p1011 as insert into test_bypass_sq1 values(-3,-3,'test_pbe');
  prepare p1013 as update test_bypass_sq1 set col2=10 where col1=-3;
  prepare p1012 as select * from test_bypass_sq1 where col1=-3;
  prepare p1014 as select * from test_bypass_sq1 where col1=-3 for update;
  prepare p1015 as delete from test_bypass_sq1 where col1=-3;
  explain execute p1011;
  execute p1011;
  explain execute p1012;
  execute p1012;
  explain execute p1013;
  execute p1013;
  explain execute p1014;
  execute p1014;
  --bypass through index only scan
  prepare p10141 as select col1,col2 from test_bypass_sq1 where col1=-3 for update;
  execute p10141;
  execute p1015;
  
  prepare p1020 as  select * from  test_bypass_sq1 where col1>0 order by col1 limit 1;
  execute p1020;
  prepare p1021 as select * from  test_bypass_sq1 where col1=$1 limit 1;
  execute p1021(1);
  --bypass through index only scan
  prepare p10200 as  select col1,col2 from  test_bypass_sq1 where col1>0 order by col1 limit 1;
  explain execute p10200;
  execute p10200;
  prepare p10211 as select col1,col2 from  test_bypass_sq1 where col1=$1 limit 1;
  explain execute p10211(1);
  execute p10211(1);
  prepare p10212 as select col1,col2 from  test_bypass_sq1 where col1=$1 offset 1;
  explain execute p10212(1);
  execute p10212(1);
  prepare p10213 as select col1,col2 from  test_bypass_sq1 where col1=$1 limit 1 offset null;
  explain execute p10213(1);
  execute p10213(1);
  prepare p10214 as select col1,col2 from  test_bypass_sq1 where col1=$1 limit null offset null;
  explain execute p10214(1);
  execute p10214(1);
  --not bypass
  prepare p1022 as select * from  test_bypass_sq1 where col1=$1 limit $2;
  explain execute p1022(0,3);
  explain execute p1022(0,null);
  prepare p1023 as select * from  test_bypass_sq1 where col1=$1 limit $2 offset $3;
  explain execute p1023(0,3,2);
  --bypass
  prepare p1024 as select * from  test_bypass_sq1 where col1=0 order by col1 for update limit 1;
  prepare p1025 as select * from  test_bypass_sq1 where col1=$1 for update limit 1;
  execute p1024;
  execute p1025(1);
  --not bypass
  prepare p1026 as select * from  test_bypass_sq1 where col1=$1 for update limit $2;
  prepare p1027 as select * from  test_bypass_sq1 where col1=$1 for update limit $2 offset $3;
  explain execute p1026(0,3);
  execute p1026(0,3);
  explain execute p1027(0,3,2);
  execute p1027(0,3,2);
  --bypass
  prepare p103 as select col1,col2 from test_bypass_sq1 where col2=$1 order by col1;
  execute p103 (2);
  prepare p104 as select * from test_bypass_sq1 where col1=$1 order by col1;
  execute p104 (3);
  prepare p105 as select col1,col2 from test_bypass_sq1 where col2<$1 order by col1;
  execute p105 (5);
  prepare p1051 as select col1,col2 from test_bypass_sq1 where col2<$1 order by col1 limit 3;
  execute p1051(5);
  prepare p1052 as select col1,col2 from test_bypass_sq1 where col1=$1 order by col1 for update limit 2;
  execute p1052(2);
  prepare p106 as select col1,col2 from test_bypass_sq1 where col1>$1 and col2>$2 order by col1;
  explain execute p106 (0,1);
  execute p106 (0,1);
  prepare p1061 as select col1,col2 from test_bypass_sq1 where col1 is not null and col2 is not null order by col1;
  explain execute p1061;
  execute p1061;
  prepare p1062 as select col1,col2 from test_bypass_sq1 where col1 is not null and col2 < $1 order by col1;
  execute p1062 (3);
  --bypass through index only scan
  prepare p10601 as select col1,col2 from test_bypass_sq1 where col1>$1 and col2>$2 order by col1;
  execute p10601 (0,1);
  --bypass
  prepare p17 as select * from test_bypass_sq1 where col1=$1 and col2=$2 for update;
  execute p17 (3,3);
  --bypass (?)
  prepare p18 as update test_bypass_sq1 set col2=$1*$2  where col1=$3 and col2=$4;
  explain execute p18(3,7,3,3);
  execute p18(3,7,3,3);
  prepare p181 as update test_bypass_sq1 set col2= $1 where col1 is null;
  explain execute p181(111);
  execute p181(111);
  --bypass
  prepare p19 as delete from  test_bypass_sq1 where col1=$1 and col2=$2;
  execute p19 (0,-1);
  
  execute p11(null,null,'test_null');
  prepare p191 as select * from test_bypass_sq1 where col1 is null  and col2 is null;
  prepare p192 as delete from  test_bypass_sq1 where col1 is null  and col2 is null;
  execute p191;
  execute p192;
  --bypass (order by is supported when ordered col is  in index)
  prepare p111 as select col1,col2 from test_bypass_sq1 order by col1 desc;
  execute p111;
  prepare p112 as select col1,col2 from test_bypass_sq1 order by col1;
  execute p112;
  --bypass through index only scan
  prepare p11301 as select col1,col2 from test_bypass_sq1 where col1 = $1 order by col1,col2 desc;
  explain execute p11301 (2);
  prepare p11401 as select col1,col2 from test_bypass_sq1 where col1 = $1 order by col1,col2;
  explain execute p11401 (2);
  set enable_indexonlyscan=off;
  explain execute p11301 (2);
  explain execute p11401 (2);
  reset enable_indexonlyscan;
  --not bypass
  prepare p115 as select * from test_bypass_sq1 order by col2 desc;
  explain execute p115;
  prepare p116 as select * from test_bypass_sq1 order by col2;
  explain execute p116;
  -- bypass
  prepare p117 as select col1, col2 from test_bypass_sq1 where true order by col1;
  prepare p118 as select col2, col1 from test_bypass_sq1 order by col1;
  prepare p119 as select col1, col2 from test_bypass_sq1 order by col1 desc;
  execute p117;
  execute p118;
  execute p119;
  
  prepare p120 as insert into test_bypass_sq1 select * from test_bypass_sq1 where col1>$1;
  execute p120 (0);
  --
  drop table if exists test_bypass_sq2;
  create table test_bypass_sq2(col1 int not null, col2 int);
  create index itest_bypass_sq2 on test_bypass_sq2(col1);
  --bypass
  prepare p21 as insert into test_bypass_sq2(col1) values ($1);
  execute p21(0);
  --error
  execute p21(null);
  --bypass
  prepare p22 as insert into test_bypass_sq2(col1,col2) values ($1,$2);
  explain execute p22(1,null);
  execute p22(1,null);
  execute p22(3,3);
  execute p22(-1,-1);
  execute p22(1,1);
  execute p22(2,2);
  execute p22(3,3);
  
  --bypass
  prepare p24 as update test_bypass_sq2 set col2 = col2+$1 where col1 = $2;
  execute p24(1,0);
  prepare p25 as select * from test_bypass_sq2  where col1 = $1;
  execute p25(0);
  --bypass
  prepare p26 as select * from test_bypass_sq2  where col1 >= $1 order by col1;
  execute p26 (0);
  prepare p261 as select * from test_bypass_sq2  where col1 >= $1 order by col1 limit 1;
  execute p261 (0);
  prepare p262 as select * from test_bypass_sq2  where col1 = $1 order by col1 for update limit 2;
  explain execute p262 (0);
  execute p262 (0);
  --bypass through index only scan
  prepare p26101 as select col1 from test_bypass_sq2  where col1 >= $1 order by col1 limit 2;
  execute p26101 (0);
  --not bypass
  prepare p201 as select * from test_bypass_sq2  where col2 = $1;
  explain execute p201 (0);
  explain execute p201 (null);
  prepare p202 as select * from test_bypass_sq2  where col1 = $1 and col2 = $2;
  explain execute p202 (0,0);
  --not bypass
  prepare p203 as select t1.col3, t2.col2  from test_bypass_sq1 as t1 join test_bypass_sq2 as t2 on t1.col1=t2.col1;
  explain execute p203;
  prepare p204 as select count(*),col1 from test_bypass_sq1 group by col1;
  explain execute p204;
  --bypass (order by is supported when ordered col is in index)
  prepare p211 as select col1,col2 from test_bypass_sq1 order by col1 desc;
  execute p211;
  prepare p212 as select col1,col2 from test_bypass_sq1 order by col1;
  execute p212;
  --not bypass
  prepare p213 as select * from test_bypass_sq2 order by col1,col2;
  explain execute p213;
  --bypass
  prepare p27 as select * from test_bypass_sq2 where col1 = $1 limit 1;
  execute p27(0);
  execute p27(1);
  prepare p270 as select * from test_bypass_sq2 where col1 = $1 for update limit 1;
  execute p270(0);
  execute p270(1);
  prepare p271 as select * from test_bypass_sq2 where col1 > $1 order by col1 limit 2 offset 1;
  execute p271(0);
  prepare p2710 as select * from test_bypass_sq2 where col1 > $1 for update limit 2 offset 1;
  explain execute p2710(0);
  
  --not bypass
  prepare p272 as select * from test_bypass_sq2 where col1 = $1 limit $2;
  explain execute p272(0,3);
  prepare p2720 as select * from test_bypass_sq2 where col1 = $1 for update limit $2;
  explain execute p2720(0,3);
  prepare p273 as select * from test_bypass_sq2 where col1 = $1 limit -1;
  explain execute p273(0);
  --bypass
  prepare p2730 as select * from test_bypass_sq2 where col1 = $1 for update limit -1;
  explain execute p2730(0);
  prepare p274 as select * from test_bypass_sq2 where col1 = $1 limit 0;
  execute p274(0);
  prepare p2740 as select * from test_bypass_sq2 where col1 = $1 for update limit 0;
  execute p2740(0);
  prepare p275 as select * from  test_bypass_sq2 where col1 is not null;
  explain execute p275;
  
  --
  drop table if exists test_bypass_sq3;
  create table test_bypass_sq3(col1 int default 1, col2 int, col3 timestamp);
  create index itest_bypass_sq3 on test_bypass_sq3(col1);
  --bypass
  prepare p31 as insert into test_bypass_sq3(col2,col3) values ($1,$2);
  --wrong input
  execute p31(1,default);
  --bypass
  execute p31(3,null);
  prepare p32 as insert into test_bypass_sq3 values($1,$2,$3);
  execute p32(2,3,null);
  execute p32 (3,3,null);
  execute p32 (null,3,null);
  --bypass(?)
  execute p32 (-1,-1,current_timestamp);
  --bypass
  prepare p33 as select * from test_bypass_sq3 where col1 >= $1 order by col1;
  execute p33(1);
  execute p33(2);
  
  prepare p34 as select col2 from test_bypass_sq3 where col1 = $1 for update;
  prepare p35 as update test_bypass_sq3 set col2 = col2*3 where col1 = $1;
  execute p34(2);
  execute p35(2);
  execute p34(1);
  execute p35(1);
  --not bypass
  prepare p36 as select * from test_bypass_sq3 where col2 > 0;
  explain execute p36(3);
  --bypass
  prepare p37 as select * from test_bypass_sq3 where col1 is null;
  execute p37;
  
  
  --test random index pos
  drop table if exists test_bypass_sq4;
  create table test_bypass_sq4(col1 int, col2 int, col3 int);
  create index itest_bypass_sq4 on test_bypass_sq4(col3,col2);
  prepare p40 as insert into test_bypass_sq4 values ($1,$2,$3);
  execute p40 (11,21,31);
  execute p40 (11,22,32);
  execute p40 (12,23,32);
  execute p40 (12,23,33);
  execute p40 (13,24,33);
  execute p40 (13,24,34);
  execute p40 (14,25,34);
  execute p40 (14,25,35);
  execute p40 (55,55,55);
  execute p40 (55,55,null);
  execute p40  (55,null,55);
  execute p40  (55,null,null);
  explain execute p40 (null,null,null);
  execute p40 (null,null,null);
  prepare p401 as select col3, col1, col2 from test_bypass_sq4 where col2 >$1 order by 1,3;
  execute p401 (22);
  prepare p402 as  select * from test_bypass_sq4 where col2 =$1 and col3= $2 order by col2;
  execute p402(22,32);
  prepare p403 as select col3,col2,col3 from test_bypass_sq4 where col3 >= $1 and col2 >= $2 order by col3,col2;
  execute p403 (33,22);
  prepare p404 as select col2,col3,col2 from test_bypass_sq4 where col3 >= $1 and col2 >= $2 order by col3,col2;
  execute p404 (34,22);
  prepare p405 as select col3,col2,col3 from test_bypass_sq4 where col3 >= $1 and col2 >= $2 order by col3 for update;
  execute p406 (33,22);
  prepare p406 as select col2,col3,col2 from test_bypass_sq4 where col3 >= $1 and col2 >= $2 order by col3,col2 for update;
  execute p406 (34,22);
  prepare p407 as select col2,col3,col2 from test_bypass_sq4 where col3 is null and col2 is null order by col3,col2;
  execute p407;
  prepare p408 as select col2,col3 from test_bypass_sq4 where col3 is null and col2 is not null;
  execute p408;
  prepare p409 as select col2,col3 from test_bypass_sq4 where col3 is not null order by col3 desc,col2 desc;
  execute p409;
  
  
  drop table if exists test_bypass_sq6;
  create type complextype AS (f1 int, f2 text);
  create table test_bypass_sq6(col1 int, col2 complextype,col3 text);
  create index itest_bypass_sq6 on test_bypass_sq6(col1,col3);
  --not bypass
  prepare p601 as insert into test_bypass_sq6 values ($1,ROW($2, $3),$4);
  explain execute p601 (1,1,'Simon1'::text,'test'::text);
  -- just insert
  reset opfusion_debug_mode;
  execute p601 (1,1,'Simon1'::text,'test'::text);
  set opfusion_debug_mode = 'error';
  --bypass
  prepare p602 as select * from test_bypass_sq6 where col1 is not null;
  execute p602;
  prepare p603 as select * from test_bypass_sq6 where col3 =$1 for update;
  execute p603 ('test'::text);
  prepare p604 as update test_bypass_sq6 set col3= $1 where col1 = $2;
  execute p604 ('test_2'::text,1);
  prepare p605 as select col1 from test_bypass_sq6;
  execute p605;
  prepare p606 as select col3 from test_bypass_sq6 order by col1,col3;
  execute p606;
  prepare p607 as select col1, col3 from test_bypass_sq6 where true;
  execute p607;
  prepare p608 as update test_bypass_sq6 set col2=$1 where col1 = $2;
  execute p608(ROW(2,'Ruby2'::text),1);
  --notbypass
  prepare p6071 as select * from test_bypass_sq6 where true;
  explain execute p6071;
  prepare p609 as update test_bypass_sq6 set col2=ROW($1,$2) where col1 = $3;
  explain execute p609 (3,'Ruby3'::text,1);
  --bypass
  prepare p6091 as delete from test_bypass_sq6 where col1 = $1;
  execute p6091(1);
  
  reset enable_seqscan;
  reset enable_bitmapscan;
  reset opfusion_debug_mode;
  reset log_min_messages;
  reset logging_module;
  
  drop table test_bypass_sq1;
  drop table test_bypass_sq2;
  drop table test_bypass_sq3;
  drop table test_bypass_sq4;
  drop table test_bypass_sq6;
  drop type complextype;
  