blob: 0180161bb4cc101225e6496b3623f60dc006ab7f [file] [log] [blame]
# name: test/sql/types/decimal/test_decimal.test
# description: Test basic decimals
# group: [decimal]
statement ok
PRAGMA enable_verification
# default decimal type is (32767, 0), see IgniteTypeSystem.getMaxNumericPrecision
query I
SELECT typeof('0.1'::DECIMAL);
----
DECIMAL(32767, 0)
# test basic string conversions
query II
SELECT '0.1'::DECIMAL::VARCHAR, '922337203685478.758'::DECIMAL::VARCHAR;
----
0.1 922337203685478.758
# negative values
query II
SELECT '-0.1'::DECIMAL::VARCHAR, '-922337203685478.758'::DECIMAL::VARCHAR;
----
-0.1 -922337203685478.758
# some more difficult string conversions
query III
SELECT ' 7 '::DECIMAL::VARCHAR, '9.'::DECIMAL::VARCHAR, '.1'::DECIMAL::VARCHAR;
----
7 9 0.1
# trailing decimals get truncated
query II
SELECT '0.123456789'::DECIMAL::VARCHAR, '-0.123456789'::DECIMAL::VARCHAR;
----
0.123456789 -0.123456789
# no overflow in conversion
query I
SELECT '9223372036854788.758'::DECIMAL;
----
9223372036854788.758
# trailing decimals with scale=0
query I
SELECT '0.1'::DECIMAL(3, 0)::VARCHAR;
----
0
# default scale is 0
query I
SELECT '123.4'::DECIMAL(9)::VARCHAR;
----
123
# scale = width also works
query II
SELECT '0.1'::DECIMAL(3, 3)::VARCHAR, '-0.1'::DECIMAL(3, 3)::VARCHAR;
----
0.100 -0.100
# any value >= 1 becomes out of range, though
statement error
SELECT '1'::DECIMAL(3, 3)::VARCHAR;
statement error
SELECT '-1'::DECIMAL(3, 3)::VARCHAR;
# repeat the same cast many times
query I
select '0.1'::decimal::decimal::decimal;
----
0.1
# string casts of various decimal sizes
query I
select '123.4'::DECIMAL(4,1)::VARCHAR
----
123.4
query I
select '2.001'::DECIMAL(4,3)::VARCHAR
----
2.001
query I
select '123456.789'::DECIMAL(9,3)::VARCHAR
----
123456.789
query I
select '123456789'::DECIMAL(9,0)::VARCHAR
----
123456789
query I
select '123456789'::DECIMAL(18,3)::VARCHAR
----
123456789.000
query I
select '1701411834604692317316873037.1588410572'::DECIMAL(38,10)::VARCHAR
----
1701411834604692317316873037.1588410572
query I
select '0'::DECIMAL(38,10)::VARCHAR
----
0.0000000000
query I
select '0.00003'::DECIMAL(38,10)::VARCHAR
----
0.0000300000
# varchar
query R
SELECT '100.100'::DECIMAL(10,0)::VARCHAR
----
100
query R
SELECT '100.100'::DECIMAL::VARCHAR
----
100.100
query R
SELECT '100.100'::DECIMAL(10)::VARCHAR
----
100
# various error conditions
# scale must be bigger than or equal to width
statement error
SELECT '0.1'::DECIMAL(3, 4);
# cannot have string variable as scale
statement error
SELECT '0.1'::DECIMAL('hello');
# ...or negative numbers
statement error
SELECT '0.1'::DECIMAL(-17);
# width/scale out of range
query I
SELECT '0.1'::DECIMAL(1000);
----
0
statement error
SELECT '0.1'::DECIMAL(1, 2, 3);
statement error
SELECT '1'::INTEGER(1000);