create schema bool_implicit_cast;
set current_schema to 'bool_implicit_cast';
create table t_v13(col1 boolean);
create table t_enum(col1 enum('a','b'));
create table t_set(col1 set('a','b'));
NOTICE:  CREATE TABLE will create implicit set "t_set_col1_set" for column "t_set.col1"
insert into t_v13 values(true);
insert into t_enum values('a');
insert into t_set values('a');
insert into t_enum select * from t_v13;
insert into t_set select * from t_v13;
select * from t_enum;
 col1 
------
 a
 a
(2 rows)

select * from t_set;
 col1 
------
 a
 a
(2 rows)

drop table t_enum;
drop table t_set;
create table test_type_table
(
   `int1` tinyint,
   `uint1` tinyint unsigned,
   `int2` smallint,
   `uint2` smallint unsigned,
   `int4` integer,
   `uint4` integer unsigned,
   `int8` bigint,
   `uint8` bigint unsigned,
   `float4` float4,
   `float8` float8,
   `numeric` decimal(20, 6),
   `bit1` bit(1),
   `bit64` bit(64),
   `boolean` boolean,
   `date` date,
   `time` time,
   `time(4)` time(4),
   `datetime` datetime,
   `datetime(4)` datetime(4) default '2022-11-11 11:11:11',
   `timestamp` timestamp,
   `timestamp(4)` timestamp(4) default '2022-11-11 11:11:11',
   `year` year,
   `char` char(100),
   `varchar` varchar(100), 
   `binary` binary(100),
   `varbinary` varbinary(100),
   `tinyblob` tinyblob,
   `blob` blob,
   `mediumblob` mediumblob,
   `longblob` longblob,
   `text` text,
   `enum_t` enum('a', 'b', 'c'),
   `set_t` set('a', 'b', 'c'),
   `json` json   
);
NOTICE:  CREATE TABLE will create implicit set "test_type_table_set_t_set" for column "test_type_table.set_t"
insert into test_type_table values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, b'1', b'111', true, '2023-02-05', '19:10:50', '19:10:50.3456', '2023-02-05 19:10:50', '2023-02-05 19:10:50.456', '2023-02-05 19:10:50', '2023-02-05 19:10:50.456',
'2023', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', 'a', 'a,c', json_object('a', 1, 'b', 2));
create table t_set(col1 set('a','b','c', 'd','e','f','9'));
NOTICE:  CREATE TABLE will create implicit set "t_set_col1_set" for column "t_set.col1"
create table t_enum(col1 enum('a','b','c', 'd','e','f','9'));
insert into t_set select `int1` from test_type_table;
insert into t_set select `uint1` from test_type_table;
insert into t_set select `int2` from test_type_table;
insert into t_set select `uint2` from test_type_table;
insert into t_set select `int4` from test_type_table;
insert into t_set select `uint4` from test_type_table;
insert into t_set select `int8` from test_type_table;
insert into t_set select `uint8` from test_type_table;
insert into t_set select `float4` from test_type_table;
insert into t_set select `float8` from test_type_table;
insert into t_set select `numeric` from test_type_table;
insert into t_set select `bit1` from test_type_table;
insert into t_set select `bit64` from test_type_table; 
insert into t_set select `boolean` from test_type_table;
-- error expect
insert into t_set select `year` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: 2023
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `char` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `varchar` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `binary` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `tinyblob` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `blob` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `mediumblob` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `longblob` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `text` from test_type_table;
ERROR:  invalid input value for set t_set_col1_set: '1.23a'
CONTEXT:  referenced column: col1
-- error expect
insert into t_set select `enum_t` from test_type_table;
insert into t_enum select `int1` from test_type_table;
insert into t_enum select `uint1` from test_type_table;
insert into t_enum select `int2` from test_type_table;
insert into t_enum select `uint2` from test_type_table;
insert into t_enum select `int4` from test_type_table;
insert into t_enum select `uint4` from test_type_table;
insert into t_enum select `int8` from test_type_table;
insert into t_enum select `uint8` from test_type_table;
insert into t_enum select `float4` from test_type_table;
insert into t_enum select `float8` from test_type_table;
insert into t_enum select `numeric` from test_type_table;
insert into t_enum select `bit1` from test_type_table;
insert into t_enum select `bit64` from test_type_table;
insert into t_enum select `boolean` from test_type_table;
-- error expect
insert into t_enum select `year` from test_type_table;
ERROR:  enum order 2023 out of the enum value size: 7
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `char` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `varchar` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `binary` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `tinyblob` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `blob` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `mediumblob` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `longblob` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
-- error expect
insert into t_enum select `text` from test_type_table;
--?ERROR:  invalid input value for enum .*
CONTEXT:  referenced column: col1
select ' 2' = true , ' q' = true;
WARNING:  invalid input syntax for type double precision: " q"
LINE 1: select ' 2' = true , ' q' = true;
                             ^
 ?column? | ?column? 
----------+----------
 f        | f
(1 row)

select ' 2' != true , ' q' @= true;
WARNING:  invalid input syntax for type double precision: " q"
LINE 1: select ' 2' != true , ' q' @= true;
                              ^
ERROR:  operator does not exist: double precision @= integer
LINE 1: select ' 2' != true , ' q' @= true;
                                   ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
select ' 1.0' = true , ' 1.000' = true, '1.001' = true;
 ?column? | ?column? | ?column? 
----------+----------+----------
 t        | t        | f
(1 row)

select ' 1.0' > true , ' 1.000' < true, '1.001' <> true;
 ?column? | ?column? | ?column? 
----------+----------+----------
 f        | f        | t
(1 row)

drop table test_type_table;
drop table t_set;
drop table t_enum;
select trace from dbe_perf.get_statement_history('2020-12-01 09:25:22', '2025-12-31 23:54:41') where query like 'select%from users%';
 trace 
-------
(0 rows)

drop schema bool_implicit_cast cascade;
NOTICE:  drop cascades to table t_v13
reset current_schema;