should be it
This commit is contained in:
311
external/duckdb/test/sql/parser/digit_separators.test
vendored
Normal file
311
external/duckdb/test/sql/parser/digit_separators.test
vendored
Normal 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
|
||||
Reference in New Issue
Block a user