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,311 @@
# name: test/sql/parser/digit_separators.test
# group: [parser]
statement ok
PRAGMA enable_verification
# Simple parse test
query I
SELECT 1_2
----
12
# With decimal notation
query I
SELECT 1_2.1_2E1_0
----
12.12e10
# With string converison
query I
SELECT '1_2.1_2E1_0'::DOUBLE
----
12.12e10
# We cant have multiple underscores, in that case it gets interpreted as the column name
query I
SELECT 1__2
----
1
query I
SELECT 1_000_000
----
1000000
query I
SELECT '1000_000_000'::INT
----
1_000_000_000
statement error
SELECT '1000__000__000'::INT
----
Could not convert string '1000__000__000' to INT32
# Cant start with an underscore
statement error
SELECT '_1_2'::INT
----
Could not convert string '_1_2' to INT32
# Cant end with an underscore
statement error
SELECT '1_2_'::INT
----
Could not convert string '1_2_' to INT32
# Decimals
query I
SELECT 1_2.1_2
----
12.12
query I
SELECT 12.1_2
----
12.12
query I
SELECT 1_2.12
----
12.12
# Cant start with an underscore
statement error
SELECT '_12.12'::DECIMAL(4,2)
----
Conversion Error: Could not convert string "_12.12" to DECIMAL(4,2)
statement error
SELECT '12._12'::DECIMAL(4,2)
----
Conversion Error: Could not convert string "12._12" to DECIMAL(4,2)
# Cant end with an underscore
statement error
SELECT '12_.12'::DECIMAL(4,2)
----
Conversion Error: Could not convert string "12_.12" to DECIMAL(4,2)
statement error
SELECT '12.12_'::DECIMAL(4,2)
----
Conversion Error: Could not convert string "12.12_" to DECIMAL(4,2)
# Floats
statement error
SELECT '1__2.1__2'::FLOAT
----
Conversion Error: Could not convert string '1__2.1__2' to FLOAT
query I
SELECT '12.1_2'::FLOAT
----
12.12
query I
SELECT '1_2.12'::FLOAT
----
12.12
query I
SELECT '12.1_2e2'::FLOAT
----
12.12e2
# Cant start with an underscore
statement error
SELECT '_12.12'::FLOAT == 12.12
----
Conversion Error: Could not convert string '_12.12' to FLOAT
statement error
SELECT '12._12'::FLOAT == 12.12
----
Conversion Error: Could not convert string '12._12' to FLOAT
statement error
SELECT '12._12e2'::FLOAT == 12.12e2
----
Conversion Error: Could not convert string '12._12e2' to FLOAT
# Cant end with an underscore
statement error
SELECT '12_.12'::FLOAT == 12.12
----
Conversion Error: Could not convert string '12_.12' to FLOAT
statement error
SELECT '12.12_'::FLOAT == 12.12
----
Conversion Error: Could not convert string '12.12_' to FLOAT
statement error
SELECT '12.12_e2'::FLOAT == 12.12e2
----
Conversion Error: Could not convert string '12.12_e2' to FLOAT
# Large reals > 19 digits
query I
SELECT 1_000_000_000_000_000_000_000::DOUBLE
----
1e+21
query I
SELECT .000_000_000_000_000_000_000_123::DOUBLE
----
123e-23
query I
SELECT 1_000_000_000_000_000_000_000.5::DOUBLE
----
1000000000000000000000.5
query I
SELECT '1_000_000_000.000_000_000_5'::DOUBLE
----
1000000000.0000000005
# Cant start with an underscore
statement error
SELECT '_1_000_000_000_000_000_000_000'::DOUBLE == 1e+21
----
Conversion Error: Could not convert string '_1_000_000_000_000_000_000_000' to DOUBLE
statement error
SELECT '._000_000_000_000_000_000_000_123'::DOUBLE == 123e-23
----
Conversion Error: Could not convert string '._000_000_000_000_000_000_000_123' to DOUBLE
# Cant end with an underscore
statement error
SELECT '1_000_000_000_000_000_000_000_'::DOUBLE == 1e+21
----
Conversion Error: Could not convert string '1_000_000_000_000_000_000_000_' to DOUBLE
statement error
SELECT '.000_000_000_000_000_000_000_123_'::DOUBLE == 123e-23
----
Conversion Error: Could not convert string '.000_000_000_000_000_000_000_123_' to DOUBLE
# Exponents
statement error
select '20e10_'::FLOAT
----
Conversion Error: Could not convert string '20e10_' to FLOAT
statement error
select '20e_10'::FLOAT
----
Conversion Error: Could not convert string '20e_10' to FLOAT
statement error
select '20e10_'::BIGINT
----
Conversion Error: Could not convert string '20e10_' to INT64
statement error
select '20e_10'::BIGINT
----
Conversion Error: Could not convert string '20e_10' to INT64
query I
SELECT 12e1_0::BIGINT == 12e10::BIGINT
----
true
statement error
SELECT '12e10_'::BIGINT == 12e10::BIGINT
----
Conversion Error: Could not convert string '12e10_' to INT64
statement error
SELECT '_12e10::BIGINT' == 12e10::BIGINT
----
Conversion Error: Could not convert string '_12e10::BIGINT' to INT64
# Binary notation (trailing, leading and duplicate underscores)
query I
SELECT '0b01_01'::INT
----
5
query I
SELECT '0b0_1_0_1'::INT
----
5
statement error
SELECT '0b0_1_0_1_'::INT
----
Conversion Error: Could not convert string '0b0_1_0_1_' to INT32
statement error
SELECT '0b_0_1_0_1'::INT
----
Conversion Error: Could not convert string '0b_0_1_0_1' to INT32
statement error
SELECT '0b0__1_0_1'::INT
----
Conversion Error: Could not convert string '0b0__1_0_1' to INT32
# Hex notation (trailing, leading and duplicate underscores)
query I
SELECT '0xFF_FF'::INT;
----
65535
query I
SELECT '0xF_F_F_F'::INT;
----
65535
statement error
SELECT '0x0_F_F_F_'::INT
----
Conversion Error: Could not convert string '0x0_F_F_F_' to INT32
statement error
SELECT '0x_F_F_F'::INT
----
Conversion Error: Could not convert string '0x_F_F_F' to INT32
statement error
SELECT '0x0__F_F_F'::INT
----
Conversion Error: Could not convert string '0x0__F_F_F' to INT32
# Test decimals keep their width
query IIII
SELECT typeof(10.00), typeof(10.0_0), typeof(1_0.00), typeof(1_0.0_0);
----
DECIMAL(4,2) DECIMAL(4,2) DECIMAL(4,2) DECIMAL(4,2)
query I
select 1_2e1_0::FLOAT
----
1.2e+11
query I
select '1_2e1_0'::FLOAT
----
1.2e+11
query I
select 1_2e1_0::BIGINT
----
120000000000
query I
select '1_2e1_0'::BIGINT
----
120000000000