should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,427 @@
# name: test/sql/cast/test_bit_cast.test
# description: Test casting from and to BitString
# group: [cast]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE bits (b bit);
statement ok
INSERT INTO bits VALUES('00001111');
# cast to bool
# ---------------------------------------------------
statement error
SELECT bitstring('1', 9)::BOOL;
----
Conversion Error: Bitstring doesn't fit inside of UINT8
query I
SELECT b::BOOLEAN FROM bits;
----
true
query I
SELECT '1'::BIT::BOOL;
----
true
query I
SELECT '0'::BIT::BOOL;
----
false
# casting to numerical types
# ---------------------------------------------------
query I
SELECT b::TINYINT FROM bits;
----
15
query I
SELECT b::SMALLINT FROM bits;
----
15
query I
SELECT b::INTEGER FROM bits;
----
15
query I
SELECT b::BIGINT FROM bits;
----
15
query I
SELECT b::UTINYINT FROM bits;
----
15
query I
SELECT b::USMALLINT FROM bits;
----
15
query I
SELECT b::UINTEGER FROM bits;
----
15
query I
SELECT b::UBIGINT FROM bits;
----
15
query I
SELECT b::HUGEINT FROM bits;
----
15
query I
SELECT b::UHUGEINT FROM bits;
----
15
query I
SELECT b::FLOAT FROM bits;
----
2.1e-44
query I
SELECT b::DOUBLE FROM bits;
----
7.4e-323
query I
SELECT '100001111000011110000111100001111'::BIT::BIGINT;
----
4547612431
# numeric to bitstring
# ---------------------------------------------------
query I
SELECT 15::BOOLEAN::BIT;
----
00000001
query I
SELECT 15::TINYINT::BIT;
----
00001111
query I
SELECT 15::SMALLINT::BIT;
----
0000000000001111
query I
SELECT 15::BIT;
----
00000000000000000000000000001111
query I
SELECT 15::BIGINT::BIT;
----
0000000000000000000000000000000000000000000000000000000000001111
query I
SELECT 15::HUGEINT::BIT;
----
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111
query I
SELECT 15::UHUGEINT::BIT;
----
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111
query I
SELECT 2.1e-44::FLOAT::BIT;
----
00000000000000000000000000001111
query I
SELECT 7.4e-323::BIT;
----
0000000000000000000000000000000000000000000000000000000000001111
# bitstrings that are too large for casted-to type
# ---------------------------------------------------
statement error
SELECT bitstring('1', 9)::TINYINT;
----
Conversion Error: Bitstring doesn't fit inside of INT8
statement error
SELECT bitstring('1', 17)::SMALLINT;
----
Conversion Error: Bitstring doesn't fit inside of INT16
statement error
SELECT bitstring('1', 33)::INT;
----
Conversion Error: Bitstring doesn't fit inside of INT32
statement error
SELECT bitstring('1', 65)::BIGINT;
----
Conversion Error: Bitstring doesn't fit inside of INT64
statement error
SELECT bitstring('1', 33)::FLOAT;
----
Conversion Error: Bitstring doesn't fit inside of FLOAT
statement error
SELECT bitstring('1', 65)::DOUBLE;
----
Conversion Error: Bitstring doesn't fit inside of DOUBLE
# casting to BLOB type
# ---------------------------------------------------
query I
SELECT b::BLOB FROM bits;
----
\x0F
query I
SELECT bitstring('1111', 32)::BLOB;
----
\x00\x00\x00\x0F
query I
SELECT '1111'::BIT::BLOB;
----
\x0F
query I
select 'ab'::BLOB::BIT::BLOB;
----
ab
query I
select 'a'::BLOB::BIT::BLOB;
----
a
query I
SELECT bitstring('1111', 33)::BLOB;
----
\x00\x00\x00\x00\x0F
# casting from BLOB type
# ---------------------------------------------------
query I
SELECT 'AAAA'::BLOB::BIT;
----
01000001010000010100000101000001
statement error
SELECT ''::BLOB::BIT;
----
Conversion Error: Cannot cast empty BLOB to BIT
# negative numbers
# ---------------------------------------------------
query I
SELECT (-15)::TINYINT::BIT;
----
11110001
query I
SELECT (-15)::HUGEINT::BIT;
----
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110001
# signed integer limits -> Bit
# ---------------------------------------------------
query I
SELECT (127)::TINYINT::BIT;
----
01111111
query I
SELECT (-128)::TINYINT::BIT;
----
10000000
query I
SELECT (32767)::SMALLINT::BIT;
----
0111111111111111
query I
SELECT (-32768)::SMALLINT::BIT;
----
1000000000000000
query I
SELECT (2147483647)::INT::BIT;
----
01111111111111111111111111111111
query I
SELECT (-2147483648)::INT::BIT;
----
10000000000000000000000000000000
query I
SELECT (9223372036854775807)::BIGINT::BIT;
----
0111111111111111111111111111111111111111111111111111111111111111
query I
SELECT (-9223372036854775808)::BIGINT::BIT;
----
1000000000000000000000000000000000000000000000000000000000000000
query I
SELECT (170141183460469231731687303715884105727)::HUGEINT::BIT;
----
01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
query I
SELECT (-170141183460469231731687303715884105728)::HUGEINT::BIT;
----
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
# Bit -> signed integer limits
# ---------------------------------------------------
query I
SELECT '01111111'::BIT::TINYINT;
----
127
query I
SELECT '10000000'::BIT::TINYINT;
----
-128
query I
SELECT '0111111111111111'::BIT::SMALLINT;
----
32767
query I
SELECT '1000000000000000'::BIT::SMALLINT;
----
-32768
query I
SELECT '01111111111111111111111111111111'::BIT::INT;
----
2147483647
query I
SELECT '10000000000000000000000000000000'::BIT::INT;
----
-2147483648
query I
SELECT '0111111111111111111111111111111111111111111111111111111111111111'::BIT::BIGINT;
----
9223372036854775807
query I
SELECT '1000000000000000000000000000000000000000000000000000000000000000'::BIT::BIGINT;
----
-9223372036854775808
query I
SELECT '01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'::BIT::HUGEINT;
----
170141183460469231731687303715884105727
query I
SELECT '10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'::BIT::HUGEINT;
----
-170141183460469231731687303715884105728
# unsigned integer limits -> Bit
# ---------------------------------------------------
query I
SELECT (255)::UTINYINT::BIT;
----
11111111
query I
SELECT (65535)::USMALLINT::BIT;
----
1111111111111111
query I
SELECT (4294967295)::UINTEGER::BIT;
----
11111111111111111111111111111111
query I
SELECT (18446744073709551615)::UBIGINT::BIT;
----
1111111111111111111111111111111111111111111111111111111111111111
query I
SELECT '340282366920938463463374607431768211455'::UHUGEINT::BIT;
----
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
# Bit -> unsigned integer limits
# ---------------------------------------------------
query I
SELECT '11111111'::BIT::UTINYINT;
----
255
query I
SELECT '1111111111111111'::BIT::USMALLINT;
----
65535
query I
SELECT '11111111111111111111111111111111'::BIT::UINTEGER;
----
4294967295
query I
SELECT '1111111111111111111111111111111111111111111111111111111111111111'::BIT::UBIGINT;
----
18446744073709551615
# float limits -> Bit
# ---------------------------------------------------
query I
SELECT (3.4028235e+38)::FLOAT::BIT;
----
01111111011111111111111111111111
query I
SELECT (1.7976931348623157e+308)::DOUBLE::BIT;
----
0111111111101111111111111111111111111111111111111111111111111111
# Bit -> float limits
# ---------------------------------------------------
query I
SELECT '01111111011111111111111111111111'::BIT::FLOAT;
----
3.4028235e+38
query I
SELECT '0111111111101111111111111111111111111111111111111111111111111111'::BIT::DOUBLE;
----
1.7976931348623157e+308
# NULL <-> Bit
# ---------------------------------------------------
query I
SELECT NULL::BIT;
----
NULL
query I
SELECT NULL::BIT::INT;
----
NULL