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,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