drop schema if exists nullsafe_eq_schema cascade;
create schema nullsafe_eq_schema;
set current_schema to 'nullsafe_eq_schema';
---------- head ----------
set dolphin.b_compatibility_mode to on;
set dolphin.sql_mode to 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date';
drop table if exists test_multi_type_table;
CREATE TABLE test_multi_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);

INSERT INTO test_multi_type_table VALUES(1,1,1,1,1,1,1,1,1,1,1,b'1',b'1',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', 'b,c', json_object('a',1,'b',1));

\x
SELECT
    `tinyblob` <=> `int1` AS `tinyblob_<=>_int1`,
    `tinyblob` <=> `uint1` AS `tinyblob_<=>_uint1`,
    `tinyblob` <=> `int2` AS `tinyblob_<=>_int2`,
    `tinyblob` <=> `uint2` AS `tinyblob_<=>_uint2`,
    `tinyblob` <=> `int4` AS `tinyblob_<=>_int4`,
    `tinyblob` <=> `uint4` AS `tinyblob_<=>_uint4`,
    `tinyblob` <=> `int8` AS `tinyblob_<=>_int8`,
    `tinyblob` <=> `uint8` AS `tinyblob_<=>_uint8`,
    `tinyblob` <=> `float4` AS `tinyblob_<=>_float4`,
    `tinyblob` <=> `float8` AS `tinyblob_<=>_float8`,
    `tinyblob` <=> `numeric` AS `tinyblob_<=>_numeric`,
    `tinyblob` <=> `bit1` AS `tinyblob_<=>_bit1`,
    `tinyblob` <=> `bit64` AS `tinyblob_<=>_bit64`,
    `tinyblob` <=> `boolean` AS `tinyblob_<=>_boolean`,
    `tinyblob` <=> `date` AS `tinyblob_<=>_date`,
    `tinyblob` <=> `time` AS `tinyblob_<=>_time`,
    `tinyblob` <=> `time(4)` AS `tinyblob_<=>_time(4)`,
    `tinyblob` <=> `datetime` AS `tinyblob_<=>_datetime`,
    `tinyblob` <=> `datetime(4)` AS `tinyblob_<=>_datetime(4)`,
    `tinyblob` <=> `timestamp` AS `tinyblob_<=>_timestamp`,
    `tinyblob` <=> `timestamp(4)` AS `tinyblob_<=>_timestamp(4)`,
    `tinyblob` <=> `year` AS `tinyblob_<=>_year`,
    `tinyblob` <=> `char` AS `tinyblob_<=>_char`,
    `tinyblob` <=> `varchar` AS `tinyblob_<=>_varchar`,
    `tinyblob` <=> `binary` AS `tinyblob_<=>_binary`,
    `tinyblob` <=> `varbinary` AS `tinyblob_<=>_varbinary`,
    `tinyblob` <=> `tinyblob` AS `tinyblob_<=>_tinyblob`,
    `tinyblob` <=> `blob` AS `tinyblob_<=>_blob`,
    `tinyblob` <=> `mediumblob` AS `tinyblob_<=>_mediumblob`,
    `tinyblob` <=> `longblob` AS `tinyblob_<=>_longblob`,
    `tinyblob` <=> `text` AS `tinyblob_<=>_text`,
    `tinyblob` <=> `enum_t` AS `tinyblob_<=>_enum_t`,
    `tinyblob` <=> `set_t` AS `tinyblob_<=>_set_t`,
    `tinyblob` <=> `json` AS `tinyblob_<=>_json` FROM test_multi_type_table;

SELECT
    `blob` <=> `int1` AS `blob_<=>_int1`,
    `blob` <=> `uint1` AS `blob_<=>_uint1`,
    `blob` <=> `int2` AS `blob_<=>_int2`,
    `blob` <=> `uint2` AS `blob_<=>_uint2`,
    `blob` <=> `int4` AS `blob_<=>_int4`,
    `blob` <=> `uint4` AS `blob_<=>_uint4`,
    `blob` <=> `int8` AS `blob_<=>_int8`,
    `blob` <=> `uint8` AS `blob_<=>_uint8`,
    `blob` <=> `float4` AS `blob_<=>_float4`,
    `blob` <=> `float8` AS `blob_<=>_float8`,
    `blob` <=> `numeric` AS `blob_<=>_numeric`,
    `blob` <=> `bit1` AS `blob_<=>_bit1`,
    `blob` <=> `bit64` AS `blob_<=>_bit64`,
    `blob` <=> `boolean` AS `blob_<=>_boolean`,
    `blob` <=> `date` AS `blob_<=>_date`,
    `blob` <=> `time` AS `blob_<=>_time`,
    `blob` <=> `time(4)` AS `blob_<=>_time(4)`,
    `blob` <=> `datetime` AS `blob_<=>_datetime`,
    `blob` <=> `datetime(4)` AS `blob_<=>_datetime(4)`,
    `blob` <=> `timestamp` AS `blob_<=>_timestamp`,
    `blob` <=> `timestamp(4)` AS `blob_<=>_timestamp(4)`,
    `blob` <=> `year` AS `blob_<=>_year`,
    `blob` <=> `char` AS `blob_<=>_char`,
    `blob` <=> `varchar` AS `blob_<=>_varchar`,
    `blob` <=> `binary` AS `blob_<=>_binary`,
    `blob` <=> `varbinary` AS `blob_<=>_varbinary`,
    `blob` <=> `tinyblob` AS `blob_<=>_tinyblob`,
    `blob` <=> `blob` AS `blob_<=>_blob`,
    `blob` <=> `mediumblob` AS `blob_<=>_mediumblob`,
    `blob` <=> `longblob` AS `blob_<=>_longblob`,
    `blob` <=> `text` AS `blob_<=>_text`,
    `blob` <=> `enum_t` AS `blob_<=>_enum_t`,
    `blob` <=> `set_t` AS `blob_<=>_set_t`,
    `blob` <=> `json` AS `blob_<=>_json` FROM test_multi_type_table;

SELECT
    `mediumblob` <=> `int1` AS `mediumblob_<=>_int1`,
    `mediumblob` <=> `uint1` AS `mediumblob_<=>_uint1`,
    `mediumblob` <=> `int2` AS `mediumblob_<=>_int2`,
    `mediumblob` <=> `uint2` AS `mediumblob_<=>_uint2`,
    `mediumblob` <=> `int4` AS `mediumblob_<=>_int4`,
    `mediumblob` <=> `uint4` AS `mediumblob_<=>_uint4`,
    `mediumblob` <=> `int8` AS `mediumblob_<=>_int8`,
    `mediumblob` <=> `uint8` AS `mediumblob_<=>_uint8`,
    `mediumblob` <=> `float4` AS `mediumblob_<=>_float4`,
    `mediumblob` <=> `float8` AS `mediumblob_<=>_float8`,
    `mediumblob` <=> `numeric` AS `mediumblob_<=>_numeric`,
    `mediumblob` <=> `bit1` AS `mediumblob_<=>_bit1`,
    `mediumblob` <=> `bit64` AS `mediumblob_<=>_bit64`,
    `mediumblob` <=> `boolean` AS `mediumblob_<=>_boolean`,
    `mediumblob` <=> `date` AS `mediumblob_<=>_date`,
    `mediumblob` <=> `time` AS `mediumblob_<=>_time`,
    `mediumblob` <=> `time(4)` AS `mediumblob_<=>_time(4)`,
    `mediumblob` <=> `datetime` AS `mediumblob_<=>_datetime`,
    `mediumblob` <=> `datetime(4)` AS `mediumblob_<=>_datetime(4)`,
    `mediumblob` <=> `timestamp` AS `mediumblob_<=>_timestamp`,
    `mediumblob` <=> `timestamp(4)` AS `mediumblob_<=>_timestamp(4)`,
    `mediumblob` <=> `year` AS `mediumblob_<=>_year`,
    `mediumblob` <=> `char` AS `mediumblob_<=>_char`,
    `mediumblob` <=> `varchar` AS `mediumblob_<=>_varchar`,
    `mediumblob` <=> `binary` AS `mediumblob_<=>_binary`,
    `mediumblob` <=> `varbinary` AS `mediumblob_<=>_varbinary`,
    `mediumblob` <=> `tinyblob` AS `mediumblob_<=>_tinyblob`,
    `mediumblob` <=> `blob` AS `mediumblob_<=>_blob`,
    `mediumblob` <=> `mediumblob` AS `mediumblob_<=>_mediumblob`,
    `mediumblob` <=> `longblob` AS `mediumblob_<=>_longblob`,
    `mediumblob` <=> `text` AS `mediumblob_<=>_text`,
    `mediumblob` <=> `enum_t` AS `mediumblob_<=>_enum_t`,
    `mediumblob` <=> `set_t` AS `mediumblob_<=>_set_t`,
    `mediumblob` <=> `json` AS `mediumblob_<=>_json` FROM test_multi_type_table;

SELECT
    `longblob` <=> `int1` AS `longblob_<=>_int1`,
    `longblob` <=> `uint1` AS `longblob_<=>_uint1`,
    `longblob` <=> `int2` AS `longblob_<=>_int2`,
    `longblob` <=> `uint2` AS `longblob_<=>_uint2`,
    `longblob` <=> `int4` AS `longblob_<=>_int4`,
    `longblob` <=> `uint4` AS `longblob_<=>_uint4`,
    `longblob` <=> `int8` AS `longblob_<=>_int8`,
    `longblob` <=> `uint8` AS `longblob_<=>_uint8`,
    `longblob` <=> `float4` AS `longblob_<=>_float4`,
    `longblob` <=> `float8` AS `longblob_<=>_float8`,
    `longblob` <=> `numeric` AS `longblob_<=>_numeric`,
    `longblob` <=> `bit1` AS `longblob_<=>_bit1`,
    `longblob` <=> `bit64` AS `longblob_<=>_bit64`,
    `longblob` <=> `boolean` AS `longblob_<=>_boolean`,
    `longblob` <=> `date` AS `longblob_<=>_date`,
    `longblob` <=> `time` AS `longblob_<=>_time`,
    `longblob` <=> `time(4)` AS `longblob_<=>_time(4)`,
    `longblob` <=> `datetime` AS `longblob_<=>_datetime`,
    `longblob` <=> `datetime(4)` AS `longblob_<=>_datetime(4)`,
    `longblob` <=> `timestamp` AS `longblob_<=>_timestamp`,
    `longblob` <=> `timestamp(4)` AS `longblob_<=>_timestamp(4)`,
    `longblob` <=> `year` AS `longblob_<=>_year`,
    `longblob` <=> `char` AS `longblob_<=>_char`,
    `longblob` <=> `varchar` AS `longblob_<=>_varchar`,
    `longblob` <=> `binary` AS `longblob_<=>_binary`,
    `longblob` <=> `varbinary` AS `longblob_<=>_varbinary`,
    `longblob` <=> `tinyblob` AS `longblob_<=>_tinyblob`,
    `longblob` <=> `blob` AS `longblob_<=>_blob`,
    `longblob` <=> `mediumblob` AS `longblob_<=>_mediumblob`,
    `longblob` <=> `longblob` AS `longblob_<=>_longblob`,
    `longblob` <=> `text` AS `longblob_<=>_text`,
    `longblob` <=> `enum_t` AS `longblob_<=>_enum_t`,
    `longblob` <=> `set_t` AS `longblob_<=>_set_t`,
    `longblob` <=> `json` AS `longblob_<=>_json` FROM test_multi_type_table;

DROP TABLE test_multi_type_table;

---------- tail ----------
drop schema nullsafe_eq_schema cascade;
reset current_schema;