text.err 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <sql-statement>
  2. --
  3. -- TEXT
  4. --
  5. SELECT text 'this is a text string' = text 'this is a text string' AS true;
  6. </sql-statement>
  7. <sql-statement>
  8. SELECT text 'this is a text string' = text 'this is a text strin' AS false;
  9. </sql-statement>
  10. <sql-statement>
  11. CREATE TABLE TEXT_TBL (f1 text);
  12. </sql-statement>
  13. <sql-statement>
  14. INSERT INTO TEXT_TBL VALUES ('doh!');
  15. </sql-statement>
  16. <sql-statement>
  17. INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
  18. </sql-statement>
  19. <sql-statement>
  20. SELECT * FROM TEXT_TBL;
  21. </sql-statement>
  22. <sql-statement>
  23. -- As of 8.3 we have removed most implicit casts to text, so that for example
  24. -- this no longer works:
  25. select length(42);
  26. </sql-statement>
  27. -stdin-:<main>: Error: Type annotation
  28. -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
  29. -- As of 8.3 we have removed most implicit casts to text, so that for example
  30. ^
  31. -stdin-:<main>:3:8: Error: At function: PgCall
  32. select length(42);
  33. ^
  34. -stdin-:<main>:3:8: Error: Unable to find an overload for proc length with given argument types: (int4)
  35. select length(42);
  36. ^
  37. <sql-statement>
  38. -- But as a special exception for usability's sake, we still allow implicit
  39. -- casting to text in concatenations, so long as the other input is text or
  40. -- an unknown literal. So these work:
  41. select 'four: '::text || 2+2;
  42. </sql-statement>
  43. -stdin-:<main>: Error: Type annotation
  44. -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
  45. -- But as a special exception for usability's sake, we still allow implicit
  46. ^
  47. -stdin-:<main>:4:23: Error: At function: PgOp
  48. select 'four: '::text || 2+2;
  49. ^
  50. -stdin-:<main>:4:23: Error: Unable to find an overload for operator || with given argument type(s): (text,int4)
  51. select 'four: '::text || 2+2;
  52. ^
  53. <sql-statement>
  54. select 'four: ' || 2+2;
  55. </sql-statement>
  56. -stdin-:<main>: Error: Type annotation
  57. -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
  58. select 'four: ' || 2+2;
  59. ^
  60. -stdin-:<main>:1:17: Error: At function: PgOp
  61. select 'four: ' || 2+2;
  62. ^
  63. -stdin-:<main>:1:17: Error: Unable to find an overload for operator || with given argument type(s): (unknown,int4)
  64. select 'four: ' || 2+2;
  65. ^
  66. <sql-statement>
  67. -- but not this:
  68. select 3 || 4.0;
  69. </sql-statement>
  70. -stdin-:<main>: Error: Type annotation
  71. -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem
  72. -- but not this:
  73. ^
  74. -stdin-:<main>:2:10: Error: At function: PgOp
  75. select 3 || 4.0;
  76. ^
  77. -stdin-:<main>:2:10: Error: Unable to find an overload for operator || with given argument type(s): (int4,numeric)
  78. select 3 || 4.0;
  79. ^
  80. <sql-statement>
  81. /*
  82. * various string functions
  83. */
  84. select concat('one');
  85. </sql-statement>
  86. <sql-statement>
  87. select concat(1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
  88. </sql-statement>
  89. <sql-statement>
  90. select concat_ws('#','one');
  91. </sql-statement>
  92. <sql-statement>
  93. select concat_ws('#',1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
  94. </sql-statement>
  95. <sql-statement>
  96. select concat_ws(',',10,20,null,30);
  97. </sql-statement>
  98. <sql-statement>
  99. select concat_ws('',10,20,null,30);
  100. </sql-statement>
  101. <sql-statement>
  102. select concat_ws(NULL,10,20,null,30) is null;
  103. </sql-statement>
  104. <sql-statement>
  105. select reverse('abcde');
  106. </sql-statement>
  107. <sql-statement>
  108. select i, left('ahoj', i), right('ahoj', i) from generate_series(-5, 5) t(i) order by i;
  109. </sql-statement>
  110. <sql-statement>
  111. select quote_literal('');
  112. </sql-statement>
  113. <sql-statement>
  114. select quote_literal('abc''');
  115. </sql-statement>
  116. <sql-statement>
  117. select quote_literal(e'\\');
  118. </sql-statement>
  119. <sql-statement>
  120. -- check variadic labeled argument
  121. select concat(variadic array[1,2,3]);
  122. </sql-statement>
  123. -stdin-:<main>: Error: Parse Sql
  124. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  125. select concat(variadic array[1,2,3]);
  126. ^
  127. <sql-statement>
  128. select concat_ws(',', variadic array[1,2,3]);
  129. </sql-statement>
  130. -stdin-:<main>: Error: Parse Sql
  131. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  132. select concat_ws(',', variadic array[1,2,3]);
  133. ^
  134. <sql-statement>
  135. select concat_ws(',', variadic NULL::int[]);
  136. </sql-statement>
  137. -stdin-:<main>: Error: Parse Sql
  138. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  139. select concat_ws(',', variadic NULL::int[]);
  140. ^
  141. <sql-statement>
  142. select concat(variadic NULL::int[]) is NULL;
  143. </sql-statement>
  144. -stdin-:<main>: Error: Parse Sql
  145. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  146. select concat(variadic NULL::int[]) is NULL;
  147. ^
  148. <sql-statement>
  149. select concat(variadic '{}'::int[]) = '';
  150. </sql-statement>
  151. -stdin-:<main>: Error: Parse Sql
  152. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  153. select concat(variadic '{}'::int[]) = '';
  154. ^
  155. <sql-statement>
  156. --should fail
  157. select concat_ws(',', variadic 10);
  158. </sql-statement>
  159. -stdin-:<main>: Error: Parse Sql
  160. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  161. select concat_ws(',', variadic 10);
  162. ^
  163. <sql-statement>
  164. /*
  165. * format
  166. */
  167. select format(NULL);
  168. </sql-statement>
  169. <sql-statement>
  170. select format('Hello');
  171. </sql-statement>
  172. <sql-statement>
  173. select format('Hello %s', 'World');
  174. </sql-statement>
  175. <sql-statement>
  176. select format('Hello %%');
  177. </sql-statement>
  178. <sql-statement>
  179. select format('Hello %%%%');
  180. </sql-statement>
  181. <sql-statement>
  182. -- should fail
  183. select format('Hello %s %s', 'World');
  184. </sql-statement>
  185. -stdin-:<main>: Fatal: Execution
  186. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  187. -- should fail
  188. ^
  189. -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
  190. -- should fail
  191. ^
  192. <sql-statement>
  193. select format('Hello %s');
  194. </sql-statement>
  195. -stdin-:<main>: Fatal: Execution
  196. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  197. select format('Hello %s');
  198. ^
  199. -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
  200. select format('Hello %s');
  201. ^
  202. <sql-statement>
  203. select format('Hello %x', 20);
  204. </sql-statement>
  205. -stdin-:<main>: Fatal: Execution
  206. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  207. select format('Hello %x', 20);
  208. ^
  209. -stdin-:<main>:1:1: Fatal: ERROR: unrecognized format() type specifier "x"
  210. HINT: For a single "%" use "%%".
  211. select format('Hello %x', 20);
  212. ^
  213. <sql-statement>
  214. -- check literal and sql identifiers
  215. select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, 'Hello');
  216. </sql-statement>
  217. <sql-statement>
  218. select format('%s%s%s','Hello', NULL,'World');
  219. </sql-statement>
  220. <sql-statement>
  221. select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, NULL);
  222. </sql-statement>
  223. <sql-statement>
  224. select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', NULL, 'Hello');
  225. </sql-statement>
  226. <sql-statement>
  227. -- should fail, sql identifier cannot be NULL
  228. select format('INSERT INTO %I VALUES(%L,%L)', NULL, 10, 'Hello');
  229. </sql-statement>
  230. -stdin-:<main>: Fatal: Execution
  231. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  232. -- should fail, sql identifier cannot be NULL
  233. ^
  234. -stdin-:<main>:1:1: Fatal: ERROR: null values cannot be formatted as an SQL identifier
  235. -- should fail, sql identifier cannot be NULL
  236. ^
  237. <sql-statement>
  238. -- check positional placeholders
  239. select format('%1$s %3$s', 1, 2, 3);
  240. </sql-statement>
  241. <sql-statement>
  242. select format('%1$s %12$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  243. </sql-statement>
  244. <sql-statement>
  245. -- should fail
  246. select format('%1$s %4$s', 1, 2, 3);
  247. </sql-statement>
  248. -stdin-:<main>: Fatal: Execution
  249. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  250. -- should fail
  251. ^
  252. -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
  253. -- should fail
  254. ^
  255. <sql-statement>
  256. select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  257. </sql-statement>
  258. -stdin-:<main>: Fatal: Execution
  259. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  260. select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  261. ^
  262. -stdin-:<main>:1:1: Fatal: ERROR: too few arguments for format()
  263. select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
  264. ^
  265. <sql-statement>
  266. select format('%0$s', 'Hello');
  267. </sql-statement>
  268. -stdin-:<main>: Fatal: Execution
  269. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  270. select format('%0$s', 'Hello');
  271. ^
  272. -stdin-:<main>:1:1: Fatal: ERROR: format specifies argument 0, but arguments are numbered from 1
  273. select format('%0$s', 'Hello');
  274. ^
  275. <sql-statement>
  276. select format('%*0$s', 'Hello');
  277. </sql-statement>
  278. -stdin-:<main>: Fatal: Execution
  279. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  280. select format('%*0$s', 'Hello');
  281. ^
  282. -stdin-:<main>:1:1: Fatal: ERROR: format specifies argument 0, but arguments are numbered from 1
  283. select format('%*0$s', 'Hello');
  284. ^
  285. <sql-statement>
  286. select format('%1$', 1);
  287. </sql-statement>
  288. -stdin-:<main>: Fatal: Execution
  289. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  290. select format('%1$', 1);
  291. ^
  292. -stdin-:<main>:1:1: Fatal: ERROR: unterminated format() type specifier
  293. HINT: For a single "%" use "%%".
  294. select format('%1$', 1);
  295. ^
  296. <sql-statement>
  297. select format('%1$1', 1);
  298. </sql-statement>
  299. -stdin-:<main>: Fatal: Execution
  300. -stdin-:<main>:1:1: Fatal: Execution of node: Result
  301. select format('%1$1', 1);
  302. ^
  303. -stdin-:<main>:1:1: Fatal: ERROR: unterminated format() type specifier
  304. HINT: For a single "%" use "%%".
  305. select format('%1$1', 1);
  306. ^
  307. <sql-statement>
  308. -- check mix of positional and ordered placeholders
  309. select format('Hello %s %1$s %s', 'World', 'Hello again');
  310. </sql-statement>
  311. <sql-statement>
  312. select format('Hello %s %s, %2$s %2$s', 'World', 'Hello again');
  313. </sql-statement>
  314. <sql-statement>
  315. -- check variadic labeled arguments
  316. select format('%s, %s', variadic array['Hello','World']);
  317. </sql-statement>
  318. -stdin-:<main>: Error: Parse Sql
  319. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  320. select format('%s, %s', variadic array['Hello','World']);
  321. ^
  322. <sql-statement>
  323. select format('%s, %s', variadic array[1, 2]);
  324. </sql-statement>
  325. -stdin-:<main>: Error: Parse Sql
  326. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  327. select format('%s, %s', variadic array[1, 2]);
  328. ^
  329. <sql-statement>
  330. select format('%s, %s', variadic array[true, false]);
  331. </sql-statement>
  332. -stdin-:<main>: Error: Parse Sql
  333. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  334. select format('%s, %s', variadic array[true, false]);
  335. ^
  336. <sql-statement>
  337. select format('%s, %s', variadic array[true, false]::text[]);
  338. </sql-statement>
  339. -stdin-:<main>: Error: Parse Sql
  340. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  341. select format('%s, %s', variadic array[true, false]::text[]);
  342. ^
  343. <sql-statement>
  344. -- check variadic with positional placeholders
  345. select format('%2$s, %1$s', variadic array['first', 'second']);
  346. </sql-statement>
  347. -stdin-:<main>: Error: Parse Sql
  348. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  349. select format('%2$s, %1$s', variadic array['first', 'second']);
  350. ^
  351. <sql-statement>
  352. select format('%2$s, %1$s', variadic array[1, 2]);
  353. </sql-statement>
  354. -stdin-:<main>: Error: Parse Sql
  355. -stdin-:<main>:1:8: Error: FuncCall: unsupported func_variadic
  356. select format('%2$s, %1$s', variadic array[1, 2]);
  357. ^
  358. <sql-statement>
  359. -- variadic argument can be array type NULL, but should not be referenced
  360. select format('Hello', variadic NULL::int[]);
  361. </sql-statement>
  362. -stdin-:<main>: Error: Parse Sql
  363. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  364. select format('Hello', variadic NULL::int[]);
  365. ^
  366. <sql-statement>
  367. -- variadic argument allows simulating more than FUNC_MAX_ARGS parameters
  368. select format(string_agg('%s',','), variadic array_agg(i))
  369. from generate_series(1,200) g(i);
  370. </sql-statement>
  371. -stdin-:<main>: Error: Parse Sql
  372. -stdin-:<main>:2:8: Error: FuncCall: unsupported func_variadic
  373. select format(string_agg('%s',','), variadic array_agg(i))
  374. ^
  375. <sql-statement>
  376. -- check field widths and left, right alignment
  377. select format('>>%10s<<', 'Hello');
  378. </sql-statement>
  379. <sql-statement>
  380. select format('>>%10s<<', NULL);
  381. </sql-statement>
  382. <sql-statement>
  383. select format('>>%10s<<', '');
  384. </sql-statement>
  385. <sql-statement>
  386. select format('>>%-10s<<', '');
  387. </sql-statement>
  388. <sql-statement>
  389. select format('>>%-10s<<', 'Hello');
  390. </sql-statement>
  391. <sql-statement>
  392. select format('>>%-10s<<', NULL);
  393. </sql-statement>
  394. <sql-statement>
  395. select format('>>%1$10s<<', 'Hello');
  396. </sql-statement>
  397. <sql-statement>
  398. select format('>>%1$-10I<<', 'Hello');
  399. </sql-statement>
  400. <sql-statement>
  401. select format('>>%2$*1$L<<', 10, 'Hello');
  402. </sql-statement>
  403. <sql-statement>
  404. select format('>>%2$*1$L<<', 10, NULL);
  405. </sql-statement>
  406. <sql-statement>
  407. select format('>>%2$*1$L<<', -10, NULL);
  408. </sql-statement>
  409. <sql-statement>
  410. select format('>>%*s<<', 10, 'Hello');
  411. </sql-statement>
  412. <sql-statement>
  413. select format('>>%*1$s<<', 10, 'Hello');
  414. </sql-statement>
  415. <sql-statement>
  416. select format('>>%-s<<', 'Hello');
  417. </sql-statement>
  418. <sql-statement>
  419. select format('>>%10L<<', NULL);
  420. </sql-statement>
  421. <sql-statement>
  422. select format('>>%2$*1$L<<', NULL, 'Hello');
  423. </sql-statement>
  424. <sql-statement>
  425. select format('>>%2$*1$L<<', 0, 'Hello');
  426. </sql-statement>