# 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