123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 |
- <sql-statement>
- --
- -- TEXT
- --
- SELECT text 'this is a text string' = text 'this is a text string' AS true;
- </sql-statement>
- <sql-statement>
- SELECT text 'this is a text string' = text 'this is a text strin' AS false;
- </sql-statement>
- <sql-statement>
- CREATE TABLE TEXT_TBL (f1 text);
- </sql-statement>
- <sql-statement>
- INSERT INTO TEXT_TBL VALUES ('doh!');
- </sql-statement>
- <sql-statement>
- INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
- </sql-statement>
- <sql-statement>
- SELECT * FROM TEXT_TBL;
- </sql-statement>
- <sql-statement>
- -- As of 8.3 we have removed most implicit casts to text, so that for example
- -- this no longer works:
- select length(42);
- </sql-statement>
- -stdin-:<main>: Error: Type annotation
- -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
- -- As of 8.3 we have removed most implicit casts to text, so that for example
- ^
- -stdin-:<main>:3:8: Error: At function: PgCall
- select length(42);
- ^
- -stdin-:<main>:3:8: Error: Unable to find an overload for proc length with given argument types: (int4)
- select length(42);
- ^
- <sql-statement>
- -- But as a special exception for usability's sake, we still allow implicit
- -- casting to text in concatenations, so long as the other input is text or
- -- an unknown literal. So these work:
- select 'four: '::text || 2+2;
- </sql-statement>
- -stdin-:<main>: Error: Type annotation
- -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
- -- But as a special exception for usability's sake, we still allow implicit
- ^
- -stdin-:<main>:4:23: Error: At function: PgOp
- select 'four: '::text || 2+2;
- ^
- -stdin-:<main>:4:23: Error: Unable to find an overload for operator || with given argument type(s): (text,int4)
- select 'four: '::text || 2+2;
- ^
- <sql-statement>
- select 'four: ' || 2+2;
- </sql-statement>
- -stdin-:<main>: Error: Type annotation
- -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
- select 'four: ' || 2+2;
- ^
- -stdin-:<main>:1:17: Error: At function: PgOp
- select 'four: ' || 2+2;
- ^
- -stdin-:<main>:1:17: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
- select 'four: ' || 2+2;
- ^
- <sql-statement>
- -- but not this:
- select 3 || 4.0;
- </sql-statement>
- -stdin-:<main>: Error: Type annotation
- -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
- -- but not this:
- ^
- -stdin-:<main>:2:10: Error: At function: PgOp
- select 3 || 4.0;
- ^
- -stdin-:<main>:2:10: Error: Unable to find an overload for operator || with given argument type(s): (int4,numeric)
- select 3 || 4.0;
- ^
- <sql-statement>
- /*
- * various string functions
- */
- select concat('one');
- </sql-statement>
- <sql-statement>
- select concat(1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
- </sql-statement>
- <sql-statement>
- select concat_ws('#','one');
- </sql-statement>
- <sql-statement>
- select concat_ws('#',1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
- </sql-statement>
- <sql-statement>
- select concat_ws(',',10,20,null,30);
- </sql-statement>
- <sql-statement>
- select concat_ws('',10,20,null,30);
- </sql-statement>
- <sql-statement>
- select concat_ws(NULL,10,20,null,30) is null;
- </sql-statement>
- <sql-statement>
- select reverse('abcde');
- </sql-statement>
- <sql-statement>
- select i, left('ahoj', i), right('ahoj', i) from generate_series(-5, 5) t(i) order by i;
- </sql-statement>
- <sql-statement>
- select quote_literal('');
- </sql-statement>
- <sql-statement>
- select quote_literal('abc''');
- </sql-statement>
- <sql-statement>
- select quote_literal(e'\\');
- </sql-statement>
- <sql-statement>
- -- check variadic labeled argument
- select concat(variadic array[1,2,3]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select concat(variadic array[1,2,3]);
- ^
- <sql-statement>
- select concat_ws(',', variadic array[1,2,3]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select concat_ws(',', variadic array[1,2,3]);
- ^
- <sql-statement>
- select concat_ws(',', variadic NULL::int[]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select concat_ws(',', variadic NULL::int[]);
- ^
- <sql-statement>
- select concat(variadic NULL::int[]) is NULL;
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select concat(variadic NULL::int[]) is NULL;
- ^
- <sql-statement>
- select concat(variadic '{}'::int[]) = '';
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select concat(variadic '{}'::int[]) = '';
- ^
- <sql-statement>
- --should fail
- select concat_ws(',', variadic 10);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select concat_ws(',', variadic 10);
- ^
- <sql-statement>
- /*
- * format
- */
- select format(NULL);
- </sql-statement>
- <sql-statement>
- select format('Hello');
- </sql-statement>
- <sql-statement>
- select format('Hello %s', 'World');
- </sql-statement>
- <sql-statement>
- select format('Hello %%');
- </sql-statement>
- <sql-statement>
- select format('Hello %%%%');
- </sql-statement>
- <sql-statement>
- -- should fail
- select format('Hello %s %s', 'World');
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- -- should fail
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
- -- should fail
- ^
- <sql-statement>
- select format('Hello %s');
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('Hello %s');
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
- select format('Hello %s');
- ^
- <sql-statement>
- select format('Hello %x', 20);
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('Hello %x', 20);
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: unrecognized format() type specifier "x"
- HINT: For a single "%" use "%%".
- select format('Hello %x', 20);
- ^
- <sql-statement>
- -- check literal and sql identifiers
- select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, 'Hello');
- </sql-statement>
- <sql-statement>
- select format('%s%s%s','Hello', NULL,'World');
- </sql-statement>
- <sql-statement>
- select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, NULL);
- </sql-statement>
- <sql-statement>
- select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', NULL, 'Hello');
- </sql-statement>
- <sql-statement>
- -- should fail, sql identifier cannot be NULL
- select format('INSERT INTO %I VALUES(%L,%L)', NULL, 10, 'Hello');
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- -- should fail, sql identifier cannot be NULL
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: null values cannot be formatted as an SQL identifier
- -- should fail, sql identifier cannot be NULL
- ^
- <sql-statement>
- -- check positional placeholders
- select format('%1$s %3$s', 1, 2, 3);
- </sql-statement>
- <sql-statement>
- select format('%1$s %12$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- </sql-statement>
- <sql-statement>
- -- should fail
- select format('%1$s %4$s', 1, 2, 3);
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- -- should fail
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
- -- should fail
- ^
- <sql-statement>
- select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
- select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- ^
- <sql-statement>
- select format('%0$s', 'Hello');
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('%0$s', 'Hello');
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: format specifies argument 0, but arguments are numbered from 1
- select format('%0$s', 'Hello');
- ^
- <sql-statement>
- select format('%*0$s', 'Hello');
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('%*0$s', 'Hello');
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: format specifies argument 0, but arguments are numbered from 1
- select format('%*0$s', 'Hello');
- ^
- <sql-statement>
- select format('%1$', 1);
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('%1$', 1);
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: unterminated format() type specifier
- HINT: For a single "%" use "%%".
- select format('%1$', 1);
- ^
- <sql-statement>
- select format('%1$1', 1);
- </sql-statement>
- -stdin-:<main>: Fatal: Execution
- -stdin-:<main>:1:1: Fatal: Execution of node: Result
- select format('%1$1', 1);
- ^
- -stdin-:<main>:1:1: Fatal: ERROR: unterminated format() type specifier
- HINT: For a single "%" use "%%".
- select format('%1$1', 1);
- ^
- <sql-statement>
- -- check mix of positional and ordered placeholders
- select format('Hello %s %1$s %s', 'World', 'Hello again');
- </sql-statement>
- <sql-statement>
- select format('Hello %s %s, %2$s %2$s', 'World', 'Hello again');
- </sql-statement>
- <sql-statement>
- -- check variadic labeled arguments
- select format('%s, %s', variadic array['Hello','World']);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select format('%s, %s', variadic array['Hello','World']);
- ^
- <sql-statement>
- select format('%s, %s', variadic array[1, 2]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select format('%s, %s', variadic array[1, 2]);
- ^
- <sql-statement>
- select format('%s, %s', variadic array[true, false]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select format('%s, %s', variadic array[true, false]);
- ^
- <sql-statement>
- select format('%s, %s', variadic array[true, false]::text[]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select format('%s, %s', variadic array[true, false]::text[]);
- ^
- <sql-statement>
- -- check variadic with positional placeholders
- select format('%2$s, %1$s', variadic array['first', 'second']);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select format('%2$s, %1$s', variadic array['first', 'second']);
- ^
- <sql-statement>
- select format('%2$s, %1$s', variadic array[1, 2]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
- select format('%2$s, %1$s', variadic array[1, 2]);
- ^
- <sql-statement>
- -- variadic argument can be array type NULL, but should not be referenced
- select format('Hello', variadic NULL::int[]);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select format('Hello', variadic NULL::int[]);
- ^
- <sql-statement>
- -- variadic argument allows simulating more than FUNC_MAX_ARGS parameters
- select format(string_agg('%s',','), variadic array_agg(i))
- from generate_series(1,200) g(i);
- </sql-statement>
- -stdin-:<main>: Error: Parse Sql
- -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
- select format(string_agg('%s',','), variadic array_agg(i))
- ^
- <sql-statement>
- -- check field widths and left, right alignment
- select format('>>%10s<<', 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%10s<<', NULL);
- </sql-statement>
- <sql-statement>
- select format('>>%10s<<', '');
- </sql-statement>
- <sql-statement>
- select format('>>%-10s<<', '');
- </sql-statement>
- <sql-statement>
- select format('>>%-10s<<', 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%-10s<<', NULL);
- </sql-statement>
- <sql-statement>
- select format('>>%1$10s<<', 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%1$-10I<<', 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%2$*1$L<<', 10, 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%2$*1$L<<', 10, NULL);
- </sql-statement>
- <sql-statement>
- select format('>>%2$*1$L<<', -10, NULL);
- </sql-statement>
- <sql-statement>
- select format('>>%*s<<', 10, 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%*1$s<<', 10, 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%-s<<', 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%10L<<', NULL);
- </sql-statement>
- <sql-statement>
- select format('>>%2$*1$L<<', NULL, 'Hello');
- </sql-statement>
- <sql-statement>
- select format('>>%2$*1$L<<', 0, 'Hello');
- </sql-statement>
|