should be it
This commit is contained in:
253
external/duckdb/test/sql/function/string/test_printf.test
vendored
Normal file
253
external/duckdb/test/sql/function/string/test_printf.test
vendored
Normal file
@@ -0,0 +1,253 @@
|
||||
# name: test/sql/function/string/test_printf.test
|
||||
# description: Test printf
|
||||
# group: [string]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# printf without format specifiers
|
||||
query TT
|
||||
SELECT printf('hello'), printf(NULL)
|
||||
----
|
||||
hello NULL
|
||||
|
||||
# format strings
|
||||
query TT
|
||||
SELECT printf('%s', 'hello'), printf('%s: %s', 'hello', 'world')
|
||||
----
|
||||
hello hello: world
|
||||
|
||||
# format strings with NULL values
|
||||
query TT
|
||||
SELECT printf('%s', NULL), printf(NULL, 'hello', 'world')
|
||||
----
|
||||
NULL NULL
|
||||
|
||||
# booleans
|
||||
query T
|
||||
SELECT printf('%d', TRUE)
|
||||
----
|
||||
1
|
||||
|
||||
# integers
|
||||
query TT
|
||||
SELECT printf('%d', 33), printf('%d + %d = %d', 3, 5, 3 + 5)
|
||||
----
|
||||
33 3 + 5 = 8
|
||||
|
||||
# maximum of ubigint
|
||||
query I
|
||||
SELECT printf('%d', 18446744073709551615::UBIGINT);
|
||||
----
|
||||
18446744073709551615
|
||||
|
||||
# integers with special formatting specifiers
|
||||
query TTT
|
||||
SELECT printf('%04d', 33), printf('%s %02d:%02d:%02d %s', 'time', 12, 3, 16, 'AM'), printf('%10d', 1992)
|
||||
----
|
||||
0033 time 12:03:16 AM 1992
|
||||
|
||||
# different integer types
|
||||
query T
|
||||
SELECT printf('%hhd %hd %d %lld', 33::TINYINT, 12::SMALLINT, 40::INTEGER, 80::BIGINT)
|
||||
----
|
||||
33 12 40 80
|
||||
|
||||
# ...but really any of these can be used
|
||||
query T
|
||||
SELECT printf('%d %lld %hhd %hd', 33::TINYINT, 12::SMALLINT, 40::INTEGER, 80::BIGINT)
|
||||
----
|
||||
33 12 40 80
|
||||
|
||||
# exotic types
|
||||
# dates, times and timestamps are strings
|
||||
query T
|
||||
SELECT printf('%s %s = %s', DATE '1992-01-01', TIME '12:01:00', TIMESTAMP '1992-01-01 12:01:00')
|
||||
----
|
||||
1992-01-01 12:01:00 = 1992-01-01 12:01:00
|
||||
|
||||
# blob
|
||||
query T
|
||||
SELECT printf('%s', BLOB '\x01\xa0')
|
||||
----
|
||||
\x01\xA0
|
||||
|
||||
# hugeint
|
||||
query T
|
||||
SELECT printf('%d', 120381902481294715712::HUGEINT)
|
||||
----
|
||||
120381902481294715712
|
||||
|
||||
query I
|
||||
SELECT printf('%d', '-170141183460469231731687303715884105728'::HUGEINT)
|
||||
----
|
||||
-170141183460469231731687303715884105728
|
||||
|
||||
query I
|
||||
SELECT printf('%d', '170141183460469231731687303715884105727'::HUGEINT)
|
||||
----
|
||||
170141183460469231731687303715884105727
|
||||
|
||||
# uhugeint
|
||||
query T
|
||||
SELECT printf('%d', 120381902481294715712::UHUGEINT)
|
||||
----
|
||||
120381902481294715712
|
||||
|
||||
query I
|
||||
SELECT printf('%d', '340282366920938463463374607431768211455'::UHUGEINT)
|
||||
----
|
||||
340282366920938463463374607431768211455
|
||||
|
||||
query I
|
||||
select printf('%x', 255::utinyint);
|
||||
----
|
||||
ff
|
||||
|
||||
query I
|
||||
select printf('%x', 65535::usmallint);
|
||||
----
|
||||
ffff
|
||||
|
||||
query I
|
||||
select printf('%x', 4294967295::uinteger);
|
||||
----
|
||||
ffffffff
|
||||
|
||||
query I
|
||||
select printf('%x', 18446744073709551615::ubigint);
|
||||
----
|
||||
ffffffffffffffff
|
||||
|
||||
query I
|
||||
select printf('%x', '340282366920938463463374607431768211455'::uhugeint);
|
||||
----
|
||||
ffffffffffffffffffffffffffffffff
|
||||
|
||||
# decimal
|
||||
query T
|
||||
SELECT printf('%.3f', '1.234'::DECIMAL)
|
||||
----
|
||||
1.234
|
||||
|
||||
# octal hex etc
|
||||
query T
|
||||
SELECT printf('%d %x %o %#x %#o', 100, 100, 100, 100, 100)
|
||||
----
|
||||
100 64 144 0x64 0144
|
||||
|
||||
query I
|
||||
select printf('%b', '-170141183460469231731687303715884105728'::HUGEINT);
|
||||
----
|
||||
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
|
||||
# ascii characters
|
||||
query T
|
||||
SELECT printf('%c', 65)
|
||||
----
|
||||
A
|
||||
|
||||
# width trick
|
||||
query T
|
||||
SELECT printf('%*d', 5, 10)
|
||||
----
|
||||
10
|
||||
|
||||
# floating point numbers
|
||||
query TT
|
||||
SELECT printf('%.2f', 10.0::FLOAT), printf('%.4f', 0.5)
|
||||
----
|
||||
10.00 0.5000
|
||||
|
||||
# weird float stuff
|
||||
query T
|
||||
SELECT printf('floats: %4.2f %+.0e %E', 3.1416, 3.1416, 3.1416)
|
||||
----
|
||||
floats: 3.14 +3e+00 3.141600E+00
|
||||
|
||||
# incorrect number of parameters
|
||||
# too few parameters
|
||||
statement error
|
||||
SELECT printf('%s')
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT printf('%s %s', 'hello')
|
||||
----
|
||||
|
||||
# excess parameters are ignored
|
||||
query T
|
||||
SELECT printf('%s', 'hello', 'world')
|
||||
----
|
||||
hello
|
||||
|
||||
# incorrect types
|
||||
statement error
|
||||
SELECT printf('%s', 42)
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT printf('%d', 'hello')
|
||||
----
|
||||
|
||||
# Test printf with vectors
|
||||
statement ok
|
||||
CREATE TABLE strings(idx INTEGER, fmt STRING, pint INTEGER, pstring STRING)
|
||||
|
||||
statement ok
|
||||
INSERT INTO strings VALUES (1, '%d: %s', 10, 'hello')
|
||||
|
||||
statement ok
|
||||
INSERT INTO strings VALUES (2, 'blabla %d blabla %s', 20, 'blabla')
|
||||
|
||||
statement ok
|
||||
INSERT INTO strings VALUES (3, NULL, 30, 'abcde')
|
||||
|
||||
# printf without format specifiers: too few parameters
|
||||
statement error
|
||||
SELECT printf(fmt) FROM strings ORDER BY idx
|
||||
----
|
||||
|
||||
query T
|
||||
SELECT printf(CASE WHEN pint < 15 THEN NULL ELSE pint::VARCHAR END) FROM strings ORDER BY idx
|
||||
----
|
||||
NULL
|
||||
20
|
||||
30
|
||||
|
||||
# standard vectorized printf
|
||||
query T
|
||||
SELECT printf(fmt, pint, pstring) FROM strings ORDER BY idx
|
||||
----
|
||||
10: hello
|
||||
blabla 20 blabla blabla
|
||||
NULL
|
||||
|
||||
# printf with constants in format arguments
|
||||
query T
|
||||
SELECT printf(fmt, 10, pstring) FROM strings ORDER BY idx
|
||||
----
|
||||
10: hello
|
||||
blabla 10 blabla blabla
|
||||
NULL
|
||||
|
||||
# printf with constant format string
|
||||
query T
|
||||
SELECT printf('%s: %s', pstring, pstring) FROM strings ORDER BY idx
|
||||
----
|
||||
hello: hello
|
||||
blabla: blabla
|
||||
abcde: abcde
|
||||
|
||||
# printf with selection vector
|
||||
query T
|
||||
SELECT printf('%s: %s', pstring, pstring) FROM strings WHERE idx <> 2 ORDER BY idx
|
||||
----
|
||||
hello: hello
|
||||
abcde: abcde
|
||||
|
||||
# cast integers correctly
|
||||
query T
|
||||
SELECT printf('%d %d %d %d', 100::tinyint, 1000::smallint, 1000::int, 1000::bigint);
|
||||
----
|
||||
100 1000 1000 1000
|
||||
Reference in New Issue
Block a user