create schema db_test_bit;
set current_schema to 'db_test_bit';
set dolphin.b_compatibility_mode = on;
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,
`time4` time(4),
`datetime` datetime,
`datetime4` datetime(4) default '2023-12-30 12:00:12',
`timestamp` timestamp,
`timestamp4` timestamp(4) default '2023-12-30 12:00:12',
`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
(
127, 255, 32767, 65535, 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 3.402823, 1.79769313486231, 3.141592654,
1, 0xFFFFFFFFFFFFFFFF, 1,
'2222-02-22', '11:59:58', '11:59:58.9999', '2222-02-22 11:59:58', '2222-02-22 11:59:58.9999', '2038-01-19 03:14:07', '2038-01-19 03:14:07.9999', '2155',
'Today is a good day. ', 'Today is a good day. ',
'Today is a good day. ', 'Today is a good day. ',
'Today is a good day. ', 'Today is a good day. ', 'Today is a good day. ', 'Today is a good day. ',
'Today is a good day. ',
'b',
'a,b',
json_object('a', 2, 'b', 3)
);
insert into test_type_table values
(
-127, 0, -32768, 0, -2147483648, 0, -9223372036854775808, 0,
-1234.567890, -1002345.78456892, -99999999999999.999999,
0, 0x01, 0,
'1999-09-19', '00:00:01', '00:00:01.0001', '1999-09-19 00:00:0001', '1999-09-19 00:00:01.0001', '1970-07-07 00:00:59', '1970-07-07 00:00:59.0001', '1999',
'', '', '', '',
'', '', '', '',
'',
'a', 'a,b,c',
json_object('a', 0)
);
set dolphin.sql_mode = 'pad_char_to_full_length';
SELECT
bit_length(`int1`),
bit_length(uint1),
bit_length(`int2`),
bit_length(uint2),
bit_length(`int4`),
bit_length(uint4),
bit_length(`int8`),
bit_length(uint8),
bit_length(`float4`),
bit_length(`float8`),
bit_length(`numeric`),
bit_length(bit1),
bit_length(bit64),
bit_length(`boolean`),
bit_length(`date`),
bit_length(`time`),
bit_length(time4),
bit_length(`datetime`),
bit_length(datetime4),
bit_length(`timestamp`),
bit_length(timestamp4),
bit_length(`year`),
bit_length(`char`),
bit_length(`varchar`),
bit_length(`binary`),
bit_length(`varbinary`),
bit_length(`tinyblob`),
bit_length(`blob`),
bit_length(`mediumblob`),
bit_length(`longblob`),
bit_length(`text`),
bit_length(enum_t),
bit_length(set_t),
bit_length(json)
FROM test_type_table;
bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length
------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------
24 | 24 | 40 | 40 | 80 | 80 | 152 | 160 | 56 | 128 | 64 | 8 | 64 | 8 | 80 | 64 | 104 | 152 | 192 | 176 | 216 | 32 | 800 | 176 | 800 | 176 | 176 | 176 | 176 | 176 | 176 | 8 | 24 | 128
32 | 8 | 48 | 8 | 88 | 8 | 160 | 8 | 64 | 136 | 176 | 8 | 64 | 8 | 80 | 64 | 104 | 152 | 192 | 176 | 216 | 32 | 800 | 0 | 800 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 40 | 64
(2 rows)
set dolphin.sql_mode = '';
SELECT
bit_length(`int1`),
bit_length(uint1),
bit_length(`int2`),
bit_length(uint2),
bit_length(`int4`),
bit_length(uint4),
bit_length(`int8`),
bit_length(uint8),
bit_length(`float4`),
bit_length(`float8`),
bit_length(`numeric`),
bit_length(bit1),
bit_length(bit64),
bit_length(`boolean`),
bit_length(`date`),
bit_length(`time`),
bit_length(time4),
bit_length(`datetime`),
bit_length(datetime4),
bit_length(`timestamp`),
bit_length(timestamp4),
bit_length(`year`),
bit_length(`char`),
bit_length(`varchar`),
bit_length(`binary`),
bit_length(`varbinary`),
bit_length(`tinyblob`),
bit_length(`blob`),
bit_length(`mediumblob`),
bit_length(`longblob`),
bit_length(`text`),
bit_length(enum_t),
bit_length(set_t),
bit_length(json)
FROM test_type_table;
bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length | bit_length
------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------
24 | 24 | 40 | 40 | 80 | 80 | 152 | 160 | 56 | 128 | 64 | 8 | 64 | 8 | 80 | 64 | 104 | 152 | 192 | 176 | 216 | 32 | 160 | 176 | 800 | 176 | 176 | 176 | 176 | 176 | 176 | 8 | 24 | 128
32 | 8 | 48 | 8 | 88 | 8 | 160 | 8 | 64 | 136 | 176 | 8 | 64 | 8 | 80 | 64 | 104 | 152 | 192 | 176 | 216 | 32 | 0 | 0 | 800 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 40 | 64
(2 rows)
-- valid binary type
create table binary_test (`binary20` binary(20), `binary45` binary(45), `binary88` binary(88));
insert into binary_test values ('abcd', '98765 - 43210 = 55555', 'Today is a good day.');
insert into binary_test values (' abcd ', '98765 - 43210 = 55555 ', '');
set dolphin.sql_mode = 'pad_char_to_full_length';
select bit_length(`binary20`), bit_length(`binary45`), bit_length(`binary88`) from binary_test;
bit_length | bit_length | bit_length
------------+------------+------------
160 | 360 | 704
160 | 360 | 704
(2 rows)
set dolphin.sql_mode = '';
select bit_length(`binary20`), bit_length(`binary45`), bit_length(`binary88`) from binary_test;
bit_length | bit_length | bit_length
------------+------------+------------
160 | 360 | 704
160 | 360 | 704
(2 rows)
-- valid char type
create table char_test (char10 char(10), char48 char(48), char97 char(97));
insert into char_test values ('abcd', '98765 - 43210 = 55555', 'Today is a good day.');
insert into char_test values (' abcd ', '', ' ');
set dolphin.sql_mode = 'pad_char_to_full_length';
select bit_length(char10), bit_length(char48), bit_length(char97) from char_test;
bit_length | bit_length | bit_length
------------+------------+------------
80 | 384 | 776
80 | 384 | 776
(2 rows)
set dolphin.sql_mode = '';
select bit_length(char10), bit_length(char48), bit_length(char97) from char_test;
bit_length | bit_length | bit_length
------------+------------+------------
32 | 168 | 160
48 | 0 | 0
(2 rows)
drop table binary_test;
drop table test_type_table;
drop table char_test;
-- insert conv to bit col
set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date,pad_char_to_full_length,auto_recompile_function,error_for_division_by_zero';
create table t1 (c1 bit(10));
insert into t1 values (conv(0, 10, 2));
insert into t1 values (conv(1, 10, 2));
insert into t1 values (conv(2, 10, 2)); -- error
ERROR: bit string length 16 does not match type bit(10)
CONTEXT: referenced column: c1
insert into t1 values (conv(3, 10, 2)); -- error
ERROR: bit string length 16 does not match type bit(10)
CONTEXT: referenced column: c1
select * from t1;
c1
------------
0000110000
0000110001
(2 rows)
-- test convert text to bit
select cast('123' as bit(24));
bit
--------------------------
001100010011001000110011
(1 row)
select cast('abcd' as bit(32));
bit
----------------------------------
01100001011000100110001101100100
(1 row)
create table t2 (c1 int, c2 bit(8), c3 bit(20));
insert into t2 values (1, '0', 'ab');
insert into t2 values (2, '1', 'A1');
insert into t2 values (3, '2', 'C4');
select c1, c2, c3 from t2 order by c1;
c1 | c2 | c3
----+----------+----------------------
1 | 00110000 | 00000110000101100010
2 | 00110001 | 00000100000100110001
3 | 00110010 | 00000100001100110100
(3 rows)
drop table t1;
drop table t2;
drop schema db_test_bit cascade;
reset bytea_output;
reset dolphin.sql_mode;
reset dolphin.b_compatibility_mode;
reset current_schema;