string.slt 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. mode cockroach
  10. ### column names ###
  11. query TTT colnames
  12. SELECT length('a'), ascii('a'), substr('a', 1) LIMIT 0
  13. ----
  14. length ascii substr
  15. query T colnames
  16. SELECT length(column1) FROM (VALUES ('a')) GROUP BY length(column1) LIMIT 0
  17. ----
  18. length
  19. query T colnames
  20. SELECT column1::text FROM (VALUES ('a')) LIMIT 0
  21. ----
  22. column1
  23. ### ascii ###
  24. statement ok
  25. CREATE TABLE asciitest (strcol CHAR(15), vccol VARCHAR(15))
  26. statement ok
  27. INSERT INTO asciitest VALUES ('hello world', 'goodbye moon'), (NULL, NULL),
  28. ('你好', '再见'), ('😀', '👻'), ('',''), (' ', ' ');
  29. statement error
  30. SELECT ascii(98)
  31. query II colnames
  32. SELECT ascii(strcol) AS strres, ascii(vccol) AS vcres FROM asciitest ORDER BY strres
  33. ----
  34. strres vcres
  35. 0 0
  36. 0 32
  37. 104 103
  38. 20320 20877
  39. 128512 128123
  40. NULL NULL
  41. query I
  42. SELECT ascii(NULL)
  43. ----
  44. NULL
  45. query I
  46. SELECT ascii(substr('inside literal', 3, 4))
  47. ----
  48. 115
  49. ### substr ###
  50. statement ok
  51. CREATE TABLE substrtest (strcol char(15), vccol varchar(15), smicol smallint, intcol int)
  52. statement ok
  53. INSERT INTO substrtest VALUES ('Mg', 'Mn', 1, 1), ('magnesium', 'manganese', 3, NULL),
  54. (NULL, NULL, 0, 0), ('24.31', '54.94', 2, 3), ('长久不见', '爱不释手', NULL, 2),
  55. ('', '', -1, 2)
  56. # invalid input
  57. statement error
  58. SELECT substr(192, 1, 1)
  59. statement error
  60. SELECT substr('from wrong type', 1.5, 2)
  61. statement error
  62. SELECT substr('for wrong type', 2, 1.5)
  63. query error negative substring length not allowed
  64. SELECT substr('for cannot be negative', 1, -3)
  65. query error negative substring length not allowed
  66. SELECT substr('for still cannot be negative', 30, -2)
  67. query B
  68. SELECT substr('hello', 2) IS NULL
  69. ----
  70. false
  71. query B
  72. SELECT substr(NULL, 2) IS NULL
  73. ----
  74. true
  75. query B
  76. SELECT substr('hello', NULL) IS NULL
  77. ----
  78. true
  79. query B
  80. SELECT substr(NULL, 2, 3) IS NULL
  81. ----
  82. true
  83. query B
  84. SELECT substr('hello', NULL, 3) IS NULL
  85. ----
  86. true
  87. query B
  88. SELECT substr('hello', 2, NULL) IS NULL
  89. ----
  90. true
  91. query error division by zero
  92. SELECT substr('hello', 0/0, 3)
  93. # standard tests
  94. query T colnames,rowsort
  95. SELECT to_jsonb(strcol) as strcol FROM substrtest
  96. ----
  97. strcol
  98. NULL
  99. " "
  100. "24.31 "
  101. "Mg "
  102. "magnesium "
  103. "长久不见 "
  104. query T colnames
  105. SELECT substr(vccol, 1, 3) AS vcres FROM substrtest ORDER BY vcres
  106. ----
  107. vcres
  108. (empty)
  109. 54.
  110. Mn
  111. man
  112. 爱不释
  113. NULL
  114. query T colnames
  115. SELECT substr(vccol, 1, 5) AS vcres FROM substrtest ORDER BY vcres
  116. ----
  117. vcres
  118. (empty)
  119. 54.94
  120. Mn
  121. manga
  122. 爱不释手
  123. NULL
  124. query T colnames
  125. SELECT substr(vccol, 1) AS vcres FROM substrtest ORDER BY vcres
  126. ----
  127. vcres
  128. (empty)
  129. 54.94
  130. Mn
  131. manganese
  132. 爱不释手
  133. NULL
  134. query T colnames
  135. SELECT substr(vccol, 3) AS vcres FROM substrtest ORDER BY vcres
  136. ----
  137. vcres
  138. (empty)
  139. (empty)
  140. .94
  141. nganese
  142. 释手
  143. NULL
  144. query T colnames
  145. SELECT substr(vccol, 3, 1) AS vcres FROM substrtest ORDER BY vcres
  146. ----
  147. vcres
  148. (empty)
  149. (empty)
  150. .
  151. n
  152. NULL
  153. # negative start position
  154. query T colnames
  155. SELECT substr(vccol, -1) AS vcres FROM substrtest ORDER BY vcres
  156. ----
  157. vcres
  158. (empty)
  159. 54.94
  160. Mn
  161. manganese
  162. 爱不释手
  163. NULL
  164. query T colnames
  165. SELECT substr(vccol, -2, 6) AS vcres FROM substrtest ORDER BY vcres
  166. ----
  167. vcres
  168. (empty)
  169. 54.
  170. Mn
  171. man
  172. 爱不释
  173. NULL
  174. query T colnames
  175. SELECT substr(vccol, -3, 5) AS vcres FROM substrtest ORDER BY vcres
  176. ----
  177. vcres
  178. (empty)
  179. 5
  180. M
  181. m
  182. NULL
  183. query TT colnames
  184. SELECT substr(strcol, -4, 5) AS strres, substr(vccol, -4, 5) AS vcres FROM substrtest ORDER BY vcres
  185. ----
  186. strres vcres
  187. (empty) (empty)
  188. (empty) (empty)
  189. (empty) (empty)
  190. (empty) (empty)
  191. (empty) (empty)
  192. NULL NULL
  193. query TT colnames
  194. SELECT substr(strcol, -6, 6) AS strres, substr(vccol, -6, 6) AS vcres FROM substrtest ORDER BY vcres
  195. ----
  196. strres vcres
  197. (empty) (empty)
  198. (empty) (empty)
  199. (empty) (empty)
  200. (empty) (empty)
  201. (empty) (empty)
  202. NULL NULL
  203. query TT colnames
  204. SELECT substr(strcol, -5, 4) AS strres, substr(vccol, -5, 4) AS vcres FROM substrtest ORDER BY vcres
  205. ----
  206. strres vcres
  207. (empty) (empty)
  208. (empty) (empty)
  209. (empty) (empty)
  210. (empty) (empty)
  211. (empty) (empty)
  212. NULL NULL
  213. # for or start is zero
  214. query T colnames
  215. SELECT substr(vccol, 0) AS vcres FROM substrtest ORDER BY vcres
  216. ----
  217. vcres
  218. (empty)
  219. 54.94
  220. Mn
  221. manganese
  222. 爱不释手
  223. NULL
  224. query T colnames
  225. SELECT substr(vccol, 0, 3) AS vcres FROM substrtest ORDER BY vcres
  226. ----
  227. vcres
  228. (empty)
  229. 54
  230. Mn
  231. ma
  232. 爱不
  233. NULL
  234. query TT colnames
  235. SELECT substr(strcol, 0, 0) AS strres, substr(vccol, 0, 0) AS vcres FROM substrtest ORDER BY vcres
  236. ----
  237. strres vcres
  238. (empty) (empty)
  239. (empty) (empty)
  240. (empty) (empty)
  241. (empty) (empty)
  242. (empty) (empty)
  243. NULL NULL
  244. query TT colnames
  245. SELECT substr(strcol, 3, 0) AS strres, substr(vccol, 3, 0) AS vcres FROM substrtest ORDER BY vcres
  246. ----
  247. strres vcres
  248. (empty) (empty)
  249. (empty) (empty)
  250. (empty) (empty)
  251. (empty) (empty)
  252. (empty) (empty)
  253. NULL NULL
  254. # NULL inputs
  255. query T
  256. SELECT substr(NULL, 1)
  257. ----
  258. NULL
  259. query T
  260. SELECT substr(NULL, 1, 3)
  261. ----
  262. NULL
  263. query T
  264. SELECT substr('text string', NULL)
  265. ----
  266. NULL
  267. query T
  268. SELECT substr(NULL, NULL)
  269. ----
  270. NULL
  271. query T
  272. SELECT substr('foo', NULL, 3)
  273. ----
  274. NULL
  275. query T
  276. SELECT substr('bar', NULL, NULL)
  277. ----
  278. NULL
  279. query T
  280. SELECT substr('baz', 2, NULL)
  281. ----
  282. NULL
  283. query T
  284. SELECT substr(NULL, NULL, NULL)
  285. ----
  286. NULL
  287. # alternative syntax
  288. query T colnames
  289. SELECT substring(vccol, 1, 3) AS vcres FROM substrtest ORDER BY vcres
  290. ----
  291. vcres
  292. (empty)
  293. 54.
  294. Mn
  295. man
  296. 爱不释
  297. NULL
  298. # testing different kinds of int columns and NULL content in columns
  299. query T
  300. SELECT substr(vccol, smicol, smicol) AS vcres FROM substrtest WHERE smicol > -1 ORDER BY vcres
  301. ----
  302. 4.
  303. M
  304. nga
  305. NULL
  306. query error negative substring length not allowed
  307. SELECT substr(vccol, smicol, smicol) AS vcres FROM substrtest ORDER BY vcres
  308. query T
  309. SELECT substr(vccol, intcol, intcol) AS vcres FROM substrtest ORDER BY vcres
  310. ----
  311. (empty)
  312. .94
  313. M
  314. 不释
  315. NULL
  316. NULL
  317. query T
  318. SELECT substr(vccol, smicol, intcol) AS vcres FROM substrtest ORDER BY vcres
  319. ----
  320. (empty)
  321. 4.9
  322. M
  323. NULL
  324. NULL
  325. NULL
  326. query T
  327. SELECT substr(vccol, intcol, smicol) AS vcres FROM substrtest WHERE smicol > -1 ORDER BY vcres
  328. ----
  329. .9
  330. M
  331. NULL
  332. NULL
  333. query T
  334. SELECT substr('subexpression test', ascii(''), 3)
  335. ----
  336. su
  337. # testing large numbers
  338. query T
  339. SELECT substr('abcdef', 2, 2147483647);
  340. ----
  341. bcdef
  342. query T
  343. SELECT substr('abcdef', 2147483647, 2);
  344. ----
  345. (empty)
  346. query T
  347. SELECT substr('abcdef', 2147483647, 2147483647);
  348. ----
  349. (empty)
  350. # substring alternate syntax
  351. query T
  352. SELECT substring('abcdef' from 2)
  353. ----
  354. bcdef
  355. query T
  356. SELECT substring('abcdef', 0, 3)
  357. ----
  358. ab
  359. query T
  360. SELECT substring('abcdef', 1, 3)
  361. ----
  362. abc
  363. query T
  364. SELECT substring('abcdef' for 3)
  365. ----
  366. abc
  367. query T
  368. SELECT substring('abcdef', 3, 3);
  369. ----
  370. cde
  371. query T
  372. SELECT substring('abcdef' from 3 for 3);
  373. ----
  374. cde
  375. # alternate syntax does not apply to substr
  376. statement error
  377. SELECT substr('abcdef' from 2)
  378. statement error
  379. SELECT substr('abcdef' for 3)
  380. statement error
  381. SELECT substr('abcdef' from 3 for 3)
  382. # alternate syntax edge cases
  383. query T
  384. SELECT substring('abcdef' from -1);
  385. ----
  386. abcdef
  387. query T
  388. SELECT substring('abcdef' from 2 for 2147483647);
  389. ----
  390. bcdef
  391. query T
  392. SELECT substring('abcdef' from 2147483647 for 2);
  393. ----
  394. (empty)
  395. query T
  396. SELECT substring('abcdef' from 2147483647 for 2147483647);
  397. ----
  398. (empty)
  399. query T
  400. SELECT substring('abcdef' for 2147483647);
  401. ----
  402. abcdef
  403. statement error
  404. SELECT substring('abcdef' for -1)
  405. query T
  406. SELECT substring('abcdef' from -1);
  407. ----
  408. abcdef
  409. query T
  410. SELECT substring('abcdef' from -1 for 3);
  411. ----
  412. a
  413. ### length ###
  414. statement ok
  415. CREATE TABLE lengthtest(strcol char(15), vccol varchar(15))
  416. statement ok
  417. INSERT INTO lengthtest VALUES
  418. ('str', 'str'), (' str', ' str'), ('str ', 'str '), ('你好', '你好'),
  419. ('今日は', '今日は'), ('हेलो', 'हेलो'),
  420. (NULL, NULL), ('', '')
  421. # invalid input
  422. statement error
  423. SELECT length(99)
  424. statement error
  425. SELECT length('str', 99)
  426. # standard tests
  427. query I rowsort
  428. SELECT octet_length(strcol) FROM lengthtest
  429. ----
  430. 15
  431. 15
  432. 15
  433. 15
  434. 19
  435. 21
  436. 23
  437. NULL
  438. query I rowsort
  439. SELECT length(vccol) FROM lengthtest
  440. ----
  441. 0
  442. 2
  443. 3
  444. 3
  445. 4
  446. 4
  447. 4
  448. NULL
  449. query I
  450. SELECT length('你好', 'big5')
  451. ----
  452. 3
  453. query I
  454. SELECT length('你好', 'iso-8859-5')
  455. ----
  456. 6
  457. query I
  458. SELECT octet_length('你好');
  459. ----
  460. 6
  461. query I
  462. SELECT bit_length('你好');
  463. ----
  464. 48
  465. # encoding name conversion FROM pg to WHATWG
  466. query I
  467. SELECT length('你好', 'ISO_8859_5')
  468. ----
  469. 6
  470. query error invalid encoding name 'iso-123'
  471. SELECT length('你好', 'iso-123')
  472. # NULL inputs
  473. query I
  474. SELECT length(NULL)
  475. ----
  476. NULL
  477. query I
  478. SELECT length('str', NULL)
  479. ----
  480. NULL
  481. query T
  482. SELECT replace('one', 'one', 'two')
  483. ----
  484. two
  485. query T
  486. SELECT replace('in a longer string', 'longer', 'shorter')
  487. ----
  488. in a shorter string
  489. query T
  490. SELECT 'hello'::bytea::text
  491. ----
  492. \x68656c6c6f
  493. ### concat ###
  494. query T
  495. SELECT concat('CONCAT', 'function')
  496. ----
  497. CONCATfunction
  498. query T
  499. SELECT concat('CONCAT', ' ', 'function')
  500. ----
  501. CONCAT function
  502. query T
  503. SELECT concat('CONCAT', NULL , 'function')
  504. ----
  505. CONCATfunction
  506. query I
  507. SELECT length(concat(''))
  508. ----
  509. 0
  510. query I
  511. SELECT length(concat(NULL))
  512. ----
  513. 0
  514. query I
  515. SELECT length(concat(' '))
  516. ----
  517. 1
  518. query T
  519. SELECT concat('CONCAT', 3 , 'function')
  520. ----
  521. CONCAT3function
  522. query T
  523. SELECT concat('CONCAT', length('abc') , 'function')
  524. ----
  525. CONCAT3function
  526. query T
  527. SELECT concat(3.32::float)
  528. ----
  529. 3.32
  530. query T
  531. SELECT concat(3.32::double precision)
  532. ----
  533. 3.32
  534. query T
  535. SELECT concat(3.32::int)
  536. ----
  537. 3
  538. query T
  539. SELECT concat(3.32)
  540. ----
  541. 3.32
  542. query T
  543. SELECT concat(3.32::decimal, 3)
  544. ----
  545. 3.323
  546. query T
  547. SELECT concat(3.32::float, 3)
  548. ----
  549. 3.323
  550. query T
  551. SELECT concat(3.32::float, '3')
  552. ----
  553. 3.323
  554. query T
  555. SELECT concat(true, false, 'function')
  556. ----
  557. tffunction
  558. query T
  559. SELECT concat('你好')
  560. ----
  561. 你好
  562. query T
  563. SELECT 'CONCAT' || 'operator'
  564. ----
  565. CONCAToperator
  566. query T
  567. SELECT 'CONCAT' || ' ' || 'operator'
  568. ----
  569. CONCAT operator
  570. query T
  571. SELECT 'CONCAT' || NULL
  572. ----
  573. NULL
  574. query T
  575. SELECT NULL || 'CONCAT'
  576. ----
  577. NULL
  578. query I
  579. SELECT length('' || '')
  580. ----
  581. 0
  582. query I
  583. SELECT length(NULL || NULL)
  584. ----
  585. NULL
  586. query I
  587. SELECT length(' ' || ' ')
  588. ----
  589. 2
  590. query T
  591. SELECT 'CONCAT' || 3 || 'operator'
  592. ----
  593. CONCAT3operator
  594. query T
  595. SELECT 'CONCAT' || length('abc') || 'operator'
  596. ----
  597. CONCAT3operator
  598. query T
  599. SELECT '' || true || false
  600. ----
  601. truefalse
  602. query T
  603. SELECT '你' || '好'
  604. ----
  605. 你好
  606. query error db error: ERROR: operator does not exist: boolean \|\| boolean
  607. SELECT true || false
  608. # concat_ws
  609. query error db error: ERROR: function concat_ws\(\) does not exist
  610. SELECT concat_ws();
  611. query error db error: ERROR: function concat_ws\(unknown\) does not exist
  612. SELECT concat_ws('a');
  613. query T
  614. SELECT concat_ws('', 'a', 'b') AS word;
  615. ----
  616. ab
  617. query T
  618. SELECT concat_ws(E'\t', 'S', 'M', 'T');
  619. ----
  620. S M T
  621. query T
  622. SELECT concat_ws(', ', interval '1d', 1.23::numeric, 4.56::float);
  623. ----
  624. 1 day, 1.23, 4.56
  625. query T
  626. SELECT concat_ws(', ', interval '1d', null, 1.23::numeric, null, 4.57::float);
  627. ----
  628. 1 day, 1.23, 4.57
  629. query T
  630. SELECT concat_ws(', ', interval '1d', null, 1.23::numeric, null, 4.57::float, null);
  631. ----
  632. 1 day, 1.23, 4.57
  633. query T
  634. SELECT concat_ws(null, interval '1d', null, 1.23::numeric, null, 4.57::float, null);
  635. ----
  636. NULL
  637. query T
  638. SELECT concat_ws(null, null);
  639. ----
  640. NULL
  641. query T
  642. SELECT concat_ws('x', null);
  643. ----
  644. (empty)
  645. query T
  646. SELECT split_part('abc~@~def~@~ghi', '~@~', 2)
  647. ----
  648. def
  649. query T
  650. SELECT split_part('abc~@~def~@~ghi', '', 1)
  651. ----
  652. abc~@~def~@~ghi
  653. query T
  654. SELECT split_part('abc~@~def~@~ghi', '~@~', 4)
  655. ----
  656. (empty)
  657. query T
  658. SELECT split_part('hello there', '', 1)
  659. ----
  660. hello there
  661. query T
  662. SELECT split_part('', 'not', 1)
  663. ----
  664. (empty)
  665. query error field position must be greater than zero
  666. SELECT split_part('abc~@~def~@~ghi', '~@~', 0)
  667. query error db error: ERROR: function split_part\(\) does not exist
  668. SELECT split_part()
  669. query error db error: ERROR: function split_part\(unknown, unknown\) does not exist
  670. SELECT split_part('one', 'two')
  671. query error db error: ERROR: function split_part\(integer, integer, integer\) does not exist
  672. SELECT split_part(1, 2, 3)
  673. ### lpad ###
  674. query T
  675. SELECT lpad('str', 42, 'pad')
  676. ----
  677. padpadpadpadpadpadpadpadpadpadpadpadpadstr
  678. query T
  679. SELECT lpad('str', 4, 'pad')
  680. ----
  681. pstr
  682. query T
  683. SELECT lpad('str', 5, 'pad')
  684. ----
  685. pastr
  686. query T
  687. SELECT REPLACE(lpad('str', 5), ' ', '_')
  688. ----
  689. __str
  690. query T
  691. SELECT lpad('str', 7, 'pad')
  692. ----
  693. padpstr
  694. query T
  695. SELECT lpad('str', 3, 'pad')
  696. ----
  697. str
  698. query T
  699. SELECT lpad('str', 2, 'pad')
  700. ----
  701. st
  702. query T
  703. SELECT lpad('str', 1, 'pad')
  704. ----
  705. s
  706. statement error
  707. SELECT lpad('str', -1, 'pad')
  708. query T
  709. SELECT lpad('str', 0, 'pad')
  710. ----
  711. (empty)
  712. query T
  713. SELECT lpad('str', NULL, 'pad')
  714. ----
  715. NULL
  716. query T
  717. SELECT lpad(NULL, 10, 'pad')
  718. ----
  719. NULL
  720. query T
  721. SELECT lpad(NULL, 10, NULL)
  722. ----
  723. NULL
  724. query T
  725. SELECT lpad('str', 10, NULL)
  726. ----
  727. NULL
  728. query T
  729. SELECT lpad('str', 10, '')
  730. ----
  731. str
  732. query T
  733. SELECT lpad('', 10, '')
  734. ----
  735. (empty)
  736. query T
  737. SELECT lpad('', 10, 'pad')
  738. ----
  739. padpadpadp
  740. query T
  741. SELECT lpad('đẹp', 1, 'pad')
  742. ----
  743. đ
  744. query T
  745. SELECT lpad('str', 5, 'đẹp')
  746. ----
  747. đẹstr
  748. query error requested length too large
  749. SELECT lpad('', 2147483647)
  750. ### ilike ###
  751. # ILIKE tests lifted from Cockroach
  752. query B
  753. SELECT 'TEST' ILIKE 'TEST'
  754. ----
  755. true
  756. query B
  757. SELECT 'TEST' ILIKE 'test'
  758. ----
  759. true
  760. query B
  761. SELECT 'TEST' ILIKE 'TE%'
  762. ----
  763. true
  764. query B
  765. SELECT 'TEST' ILIKE '%E%'
  766. ----
  767. true
  768. query B
  769. SELECT 'TEST' ILIKE '%e%'
  770. ----
  771. true
  772. query B
  773. SELECT 'TEST' ILIKE 'TES_'
  774. ----
  775. true
  776. query B
  777. SELECT 'TEST' ILIKE 'TE_%'
  778. ----
  779. true
  780. query B
  781. SELECT 'TEST' ILIKE 'TE_'
  782. ----
  783. false
  784. query B
  785. SELECT 'TEST' ILIKE '%'
  786. ----
  787. true
  788. query B
  789. SELECT 'TEST' ILIKE '%R'
  790. ----
  791. false
  792. query B
  793. SELECT 'TEST' ILIKE 'TESTER'
  794. ----
  795. false
  796. query B
  797. SELECT 'TEST' ILIKE 'tester'
  798. ----
  799. false
  800. query B
  801. SELECT 'TEST' ILIKE ''
  802. ----
  803. false
  804. query B
  805. SELECT '' ILIKE ''
  806. ----
  807. true
  808. query B
  809. SELECT 'T' ILIKE '_'
  810. ----
  811. true
  812. query B
  813. SELECT 'TE' ILIKE '_'
  814. ----
  815. false
  816. query B
  817. SELECT 'TEST' NOT ILIKE '%E%'
  818. ----
  819. false
  820. query B
  821. SELECT 'TEST' NOT ILIKE 'TES_'
  822. ----
  823. false
  824. query B
  825. SELECT 'TEST' NOT ILIKE 'TeS_'
  826. ----
  827. false
  828. query B
  829. SELECT 'TEST' NOT ILIKE 'TE_'
  830. ----
  831. true
  832. # Invalid type mods
  833. query error length for type character varying must be between 1 and 10485760
  834. SELECT ''::VARCHAR(0)
  835. query error length for type character varying must be between 1 and 10485760
  836. SELECT ''::VARCHAR(10485761)
  837. query error length for type character must be between 1 and 10485760
  838. SELECT ''::CHAR(0)
  839. query error length for type character must be between 1 and 10485760
  840. SELECT ''::CHAR(10485761)
  841. query error length for type character varying must be between 1 and 10485760
  842. SELECT ''::pg_catalog.VARCHAR(0)
  843. query error length for type character varying must be between 1 and 10485760
  844. SELECT ''::pg_catalog.VARCHAR(10485761)
  845. query error length for type character must be between 1 and 10485760
  846. SELECT ''::pg_catalog.bpchar(0)
  847. query error length for type character must be between 1 and 10485760
  848. SELECT ''::pg_catalog.bpchar(10485761)
  849. ### position ###
  850. statement ok
  851. CREATE TABLE positiontest (strcol1 char(15), strcol2 char(15), vccol1 varchar(15), vccol2 varchar(15))
  852. statement ok
  853. INSERT INTO positiontest VALUES ('om', 'Thomas', 'om', 'Thomas'), ('foo', 'barbar', 'foo', 'barbar'),
  854. (NULL, 'str', NULL, 'str'), ('str', NULL, 'str', NULL), ('释手', '爱不释手', '释手', '爱不释手'),
  855. ('', 'str', '', 'str'), ('str', '', 'str', '')
  856. # invalid input
  857. statement error Expected IN, found right parenthesis
  858. SELECT position(42)
  859. statement error Expected IN, found right parenthesis
  860. SELECT position('str')
  861. statement error db error: ERROR: function position\(integer, unknown\) does not exist
  862. SELECT position(42 IN 'str')
  863. statement error db error: ERROR: function position\(unknown, integer\) does not exist
  864. SELECT position('str' IN 42)
  865. statement error Expected right parenthesis, found comma
  866. SELECT position('str' IN 42, 172)
  867. # standard tests
  868. query I rowsort
  869. select position(strcol1 IN strcol2) from positiontest;
  870. ----
  871. 0
  872. 0
  873. 1
  874. 3
  875. 3
  876. NULL
  877. NULL
  878. query I rowsort
  879. SELECT position(vccol1 IN vccol2) FROM positiontest
  880. ----
  881. 3
  882. 0
  883. NULL
  884. NULL
  885. 3
  886. 1
  887. 0
  888. # NULL inputs
  889. query I
  890. SELECT position(NULL IN 'str')
  891. ----
  892. NULL
  893. query I
  894. SELECT position('str' IN NULL)
  895. ----
  896. NULL
  897. # combining characters
  898. query I
  899. SELECT position('ः॑' IN 'रः॑')
  900. ----
  901. 2
  902. # this is exactly the same as above, but using unicode escapes
  903. query I
  904. SELECT position(e'\u0903\u0951' IN e'\u0930\u0903\u0951')
  905. ----
  906. 2
  907. ### left ###
  908. statement ok
  909. CREATE TABLE lefttest (strcol char(15), vccol varchar(15), smicol smallint, intcol int)
  910. statement ok
  911. INSERT INTO lefttest VALUES ('Mg', 'Mn', 1, -1), ('magnesium', 'manganese', 3, NULL),
  912. (NULL, NULL, 0, 0), ('24.31', '54.94', 3, -3), ('长久不见', '爱不释手', NULL, 3),
  913. ('', '', -1, 2)
  914. # invalid input
  915. statement error
  916. SELECT left(42)
  917. statement error
  918. SELECT left('str')
  919. statement error
  920. SELECT left(42, 'str')
  921. statement error
  922. SELECT left('str', 42, 17)
  923. # standard tests
  924. query T rowsort
  925. select left(strcol, 3) from lefttest
  926. ----
  927. (empty)
  928. 24.
  929. Mg
  930. NULL
  931. mag
  932. 长久不
  933. # edge case
  934. query T rowsort
  935. SELECT left(vccol, 0) FROM lefttest
  936. ----
  937. (empty)
  938. (empty)
  939. NULL
  940. (empty)
  941. (empty)
  942. (empty)
  943. # from the front
  944. query T rowsort
  945. SELECT left(vccol, 2) FROM lefttest
  946. ----
  947. Mn
  948. ma
  949. NULL
  950. 54
  951. 爱不
  952. (empty)
  953. # from the back
  954. query T rowsort
  955. SELECT left(vccol, -2) FROM lefttest
  956. ----
  957. (empty)
  958. mangane
  959. NULL
  960. 54.
  961. 爱不
  962. (empty)
  963. query TT rowsort
  964. SELECT left(vccol, smicol), left(vccol, intcol) FROM lefttest
  965. ----
  966. M M
  967. man NULL
  968. NULL NULL
  969. 54. 54
  970. NULL 爱不释
  971. (empty) (empty)
  972. # NULL inputs
  973. query T
  974. SELECT left(NULL, 99)
  975. ----
  976. NULL
  977. query T
  978. SELECT left('str', NULL)
  979. ----
  980. NULL
  981. # combining characters
  982. query T
  983. SELECT left('रः॑', 0)
  984. ----
  985. (empty)
  986. query T
  987. SELECT left('रः॑', 1)
  988. ----
  989. query T
  990. SELECT left('रः॑', -1)
  991. ----
  992. रः
  993. # this is exactly the same as above, but using unicode escapes
  994. query T
  995. SELECT left(e'\u0930\u0903\u0951', -1)
  996. ----
  997. रः
  998. # integer edge cases
  999. # i32:MIN
  1000. query T
  1001. SELECT left('hello', -2147483648)
  1002. ----
  1003. (empty)
  1004. # i32:MIN + 1
  1005. query T
  1006. SELECT left('hello', -2147483647)
  1007. ----
  1008. (empty)
  1009. # i64
  1010. query error db error: ERROR: function left\(unknown, bigint\) does not exist
  1011. SELECT left('hello', 2147483648)
  1012. ### right ###
  1013. statement ok
  1014. CREATE TABLE righttest (strcol char(15), vccol varchar(15), smicol smallint, intcol int)
  1015. statement ok
  1016. INSERT INTO righttest VALUES ('Mg', 'Mn', 1, -1), ('magnesium', 'manganese', 3, NULL),
  1017. (NULL, NULL, 0, 0), ('24.31', '54.94', 3, -3), ('长久不见', '爱不释手', NULL, 3),
  1018. ('', '', -1, 2)
  1019. # invalid input
  1020. statement error
  1021. SELECT right(42)
  1022. statement error
  1023. SELECT right('str')
  1024. statement error
  1025. SELECT right(42, 'str')
  1026. statement error
  1027. SELECT right('str', 42, 17)
  1028. # standard tests
  1029. query T rowsort
  1030. select right(strcol, 3) from righttest
  1031. ----
  1032. (empty)
  1033. .31
  1034. Mg
  1035. NULL
  1036. ium
  1037. 久不见
  1038. # edge case
  1039. query T rowsort
  1040. SELECT right(vccol, 0) FROM righttest
  1041. ----
  1042. (empty)
  1043. (empty)
  1044. NULL
  1045. (empty)
  1046. (empty)
  1047. (empty)
  1048. # from the back
  1049. query T rowsort
  1050. SELECT right(vccol, 2) FROM righttest
  1051. ----
  1052. Mn
  1053. se
  1054. NULL
  1055. 94
  1056. 释手
  1057. (empty)
  1058. # from the front
  1059. query T rowsort
  1060. SELECT right(vccol, -2) FROM righttest
  1061. ----
  1062. (empty)
  1063. nganese
  1064. NULL
  1065. .94
  1066. 释手
  1067. (empty)
  1068. query TT rowsort
  1069. SELECT right(vccol, smicol), right(vccol, intcol) FROM righttest
  1070. ----
  1071. n n
  1072. ese NULL
  1073. NULL NULL
  1074. .94 94
  1075. NULL 不释手
  1076. (empty) (empty)
  1077. # NULL inputs
  1078. query T
  1079. SELECT right(NULL, 99)
  1080. ----
  1081. NULL
  1082. query T
  1083. SELECT right('str', NULL)
  1084. ----
  1085. NULL
  1086. # combining characters
  1087. query T
  1088. SELECT right('रः॑', 0)
  1089. ----
  1090. (empty)
  1091. query T
  1092. SELECT right('रः॑', 1)
  1093. ----
  1094. query T
  1095. SELECT right('रः॑', -1)
  1096. ----
  1097. ः॑
  1098. # this is exactly the same as above, but using unicode escapes
  1099. query T
  1100. SELECT right(e'\u0930\u0903\u0951', -1)
  1101. ----
  1102. ः॑
  1103. # integer edge cases
  1104. # i32:MIN, this seems strange, but it's what Postgres does
  1105. query T
  1106. SELECT right('hello', -2147483648)
  1107. ----
  1108. hello
  1109. # i32:MIN + 1
  1110. query T
  1111. SELECT right('hello', -2147483647)
  1112. ----
  1113. (empty)
  1114. # i64
  1115. query error db error: ERROR: function right\(unknown, bigint\) does not exist
  1116. SELECT right('hello', 2147483648)
  1117. query T
  1118. SELECT repeat('hi', 5)
  1119. ----
  1120. hihihihihi
  1121. query T
  1122. SELECT repeat('a', 0)
  1123. ----
  1124. (empty)
  1125. query T
  1126. SELECT repeat('a', -1)
  1127. ----
  1128. (empty)
  1129. query error requested length too large
  1130. SELECT repeat('a', 2147483647)
  1131. # Check for char cmp validity, which ignores white space
  1132. # ...at datum level
  1133. statement ok
  1134. CREATE TABLE bpchar_t (a char(5));
  1135. statement ok
  1136. INSERT INTO bpchar_t VALUES ('a');
  1137. query TTTTTT
  1138. SELECT a = 'a ', a != 'a ', 'a ' < a, 'a ' <= a, a > 'a ', a >= 'a ' FROM bpchar_t;
  1139. ----
  1140. true false false true false true
  1141. # ...at row level
  1142. statement ok
  1143. INSERT INTO bpchar_t VALUES ('a ');
  1144. query T
  1145. SELECT DISTINCT octet_length(a) FROM bpchar_t;
  1146. ----
  1147. 5
  1148. # LIKE comparisons using char retains lhs padding, but rhs is cast to string, so
  1149. # trimmed.
  1150. query B
  1151. SELECT 'abc'::char(3) ~~ 'abc';
  1152. ----
  1153. true
  1154. query B
  1155. SELECT 'abc'::char(3) ~~ 'abc ';
  1156. ----
  1157. false
  1158. query B
  1159. SELECT 'abc'::char(3) ~~ 'abc'::char(4);
  1160. ----
  1161. true
  1162. query B
  1163. SELECT 'abc'::char(4) ~~ 'abc';
  1164. ----
  1165. false
  1166. query B
  1167. SELECT 'abc'::char(4) ~~ 'abc ';
  1168. ----
  1169. true
  1170. query B
  1171. SELECT 'abc'::char(4) ~~ 'abc'::char(3);
  1172. ----
  1173. false
  1174. query B
  1175. SELECT 'abc'::char(4) ~~ 'abc'::char(4);
  1176. ----
  1177. false
  1178. query B
  1179. SELECT 'abc'::char(3) ~~ 'abc'::char(4);
  1180. ----
  1181. true
  1182. query B
  1183. SELECT 'abc'::char(3) !~~* 'Abc'::char(4);
  1184. ----
  1185. false
  1186. query B
  1187. SELECT 'abc'::char(3) NOT ILIKE 'Abc'::char(4);
  1188. ----
  1189. false
  1190. query B
  1191. SELECT 'abc'::char(3) !~ 'Abc'::char(4);
  1192. ----
  1193. true
  1194. # Regression for https://github.com/MaterializeInc/materialize/pull/7522#issuecomment-893343138
  1195. query T
  1196. SELECT 'a'::char(3) = 'a '::varchar(3);
  1197. ----
  1198. true
  1199. # Regression for https://github.com/MaterializeInc/materialize/pull/7522#issuecomment-895061714
  1200. statement ok
  1201. CREATE TABLE char_col (a char(10));
  1202. statement ok
  1203. INSERT INTO char_col VALUES ('a'), ('bc'), ('def');
  1204. query T
  1205. SELECT max(a)::text FROM char_col
  1206. ----
  1207. def
  1208. query I
  1209. SELECT octet_length(max(a)) FROM char_col
  1210. ----
  1211. 10
  1212. # Ensure calls to Any param'ed funcs pad char values
  1213. query T
  1214. SELECT to_jsonb('a'::char(10))
  1215. ----
  1216. "a "
  1217. # Regression for https://github.com/MaterializeInc/materialize/pull/7522#issuecomment-895057022
  1218. query T
  1219. SELECT CONCAT('a'::char(3), 'b'::text, 'c');
  1220. ----
  1221. a bc
  1222. query T
  1223. SELECT CONCAT('a'::text, 'b'::char(3), 'c');
  1224. ----
  1225. ab c
  1226. # Regression for https://github.com/MaterializeInc/database-issues/issues/5304
  1227. statement ok
  1228. CREATE TABLE gh18095_0(c0 VARCHAR(55))
  1229. statement ok
  1230. CREATE TABLE gh18095_1(c0 CHAR(96));
  1231. statement ok
  1232. INSERT INTO gh18095_1 VALUES('''%ꆔA?')
  1233. query T
  1234. SELECT FROM gh18095_1 JOIN gh18095_0 ON (gh18095_1.c0)LIKE((gh18095_1.c0)::VARCHAR(4));
  1235. ----
  1236. ### translate ###
  1237. # NULL inputs
  1238. query I
  1239. SELECT translate(NULL, 'one', 'two')
  1240. ----
  1241. NULL
  1242. query I
  1243. SELECT translate('one', NULL, 'two')
  1244. ----
  1245. NULL
  1246. query I
  1247. SELECT translate('one', 'two', NULL)
  1248. ----
  1249. NULL
  1250. query I
  1251. SELECT translate('one', NULL, NULL)
  1252. ----
  1253. NULL
  1254. query I
  1255. SELECT translate(NULL, 'one', NULL)
  1256. ----
  1257. NULL
  1258. query I
  1259. SELECT translate(NULL, NULL, 'one')
  1260. ----
  1261. NULL
  1262. query I
  1263. SELECT translate(NULL, NULL, NULL)
  1264. ----
  1265. NULL
  1266. # replace single occurrence of a single char
  1267. query T
  1268. SELECT translate('foe', 'f', 't')
  1269. ----
  1270. toe
  1271. # replace multiple occurrences of a single char
  1272. query T
  1273. SELECT translate('hello', 'l', 'x')
  1274. ----
  1275. hexxo
  1276. # remove extra occurrences when len(from) > len(to)
  1277. query T
  1278. SELECT translate('ffl', 'fl', 't')
  1279. ----
  1280. tt
  1281. query I
  1282. SELECT translate('[1]', '[]', '')::numeric
  1283. ----
  1284. 1
  1285. # ignore extra occurences when len(to) > len(from)
  1286. query T
  1287. SELECT translate('something', 'sth', 'xfvlg')
  1288. ----
  1289. xomefving
  1290. # ignore non-matching extra occurrences
  1291. query T
  1292. SELECT translate('ffl', 'fx', 't')
  1293. ----
  1294. ttl
  1295. query T
  1296. SELECT translate('hello', 'fl', 'tx')
  1297. ----
  1298. hexxo
  1299. query T
  1300. SELECT translate('12345', '143', 'ax')
  1301. ----
  1302. a2x5
  1303. query T
  1304. SELECT translate('a', '👋a', E'xy')
  1305. ----
  1306. y
  1307. # constant_time_eq for string
  1308. statement ok
  1309. CREATE TABLE test_constant_time_eq (ord integer, str1 text, str2 text);
  1310. statement ok
  1311. INSERT INTO test_constant_time_eq VALUES
  1312. (1, NULL, NULL),
  1313. (2, NULL, ''),
  1314. (3, '', ''),
  1315. (4, '', ' '),
  1316. (5, NULL, 'abc'),
  1317. (6, 'abc', 'abc'),
  1318. (7, 'abc', 'abcd'),
  1319. (8, 'abcd', 'abc'),
  1320. (9, 'ABC', 'abc'),
  1321. (10, ' abc', 'abc'),
  1322. (11, '\t\n3@\u0930\u0930', '\t\n3@\u0930\u0930'),
  1323. (12, '.*', 'aa');
  1324. query B
  1325. SELECT constant_time_eq(str1, str2) FROM test_constant_time_eq ORDER BY ord;
  1326. ----
  1327. NULL
  1328. NULL
  1329. true
  1330. false
  1331. NULL
  1332. true
  1333. false
  1334. false
  1335. false
  1336. false
  1337. true
  1338. false
  1339. query I
  1340. SELECT count(*) FROM test_constant_time_eq WHERE constant_time_eq(str1, str2) <> (str1 = str2);
  1341. ----
  1342. 0
  1343. ## initcap
  1344. query T
  1345. SELECT initcap('hi THOMAS')
  1346. ----
  1347. Hi Thomas
  1348. query I
  1349. SELECT length(initcap(''))
  1350. ----
  1351. 0
  1352. query T
  1353. SELECT initcap('a')
  1354. ----
  1355. A
  1356. query T
  1357. SELECT initcap('a,b,c')
  1358. ----
  1359. A,B,C
  1360. query T
  1361. SELECT initcap('a18z')
  1362. ----
  1363. A18z
  1364. query T
  1365. SELECT initcap('ABC')
  1366. ----
  1367. Abc
  1368. query T
  1369. SELECT initcap('Let''s go')
  1370. ----
  1371. Let'S Go
  1372. query T
  1373. SELECT starts_with('abc', 'ab')
  1374. ----
  1375. true
  1376. query T
  1377. SELECT starts_with('abc', 'ba')
  1378. ----
  1379. false
  1380. query T
  1381. SELECT starts_with('abc', '')
  1382. ----
  1383. true
  1384. query T
  1385. SELECT starts_with('abc', NULL)
  1386. ----
  1387. NULL
  1388. query T
  1389. SELECT starts_with('abc', '%')
  1390. ----
  1391. false
  1392. query T
  1393. SELECT starts_with(NULL, NULL)
  1394. ----
  1395. NULL
  1396. query T
  1397. SELECT starts_with(NULL, 'ab')
  1398. ----
  1399. NULL
  1400. # reverse for string
  1401. statement ok
  1402. create table words (word text);
  1403. statement ok
  1404. insert into words values ('hello'), ('world'), ('!');
  1405. query T
  1406. select reverse(word) from words;
  1407. ----
  1408. !
  1409. dlrow
  1410. olleh
  1411. # string_to_array - begin.
  1412. statement ok
  1413. create table string_to_array_words (word text);
  1414. statement ok
  1415. insert into string_to_array_words values ('hello world');
  1416. # string_to_array - NULL delimiter and null_string not set.
  1417. query T
  1418. select string_to_array(word, NULL) from string_to_array_words;
  1419. ----
  1420. {h,e,l,l,o," ",w,o,r,l,d}
  1421. # string_to_array - empty string delimiter and null_string not set.
  1422. query T
  1423. select string_to_array(word, '') from string_to_array_words;
  1424. ----
  1425. {"hello world"}
  1426. # string_to_array - white space delimiter and null_string not set.
  1427. query T
  1428. select string_to_array(word, ' ') from string_to_array_words;
  1429. ----
  1430. {hello,world}
  1431. # string_to_array - white space delimiter and null_string set to first word in results.
  1432. query T
  1433. select string_to_array(word, ' ', 'hello') from string_to_array_words;
  1434. ----
  1435. {NULL,world}
  1436. # string_to_array - empty string delimiter and null_string set to whole word.
  1437. # expectation: null_string is ignored if no delimiter is passed.
  1438. query T
  1439. select string_to_array(word, '', 'hello world') from string_to_array_words;
  1440. ----
  1441. {"hello world"}
  1442. # string_to_array - white space delimiter and null_string set to NULL.
  1443. query T
  1444. select string_to_array(word, ' ', NULL) from string_to_array_words;
  1445. ----
  1446. {hello,world}
  1447. # string_to_array - first word delimiter and null_string not set.
  1448. # expectation: delimiter should convert a full match to empty string.
  1449. query T
  1450. select string_to_array(word, 'hello') from string_to_array_words;
  1451. ----
  1452. {""," world"}
  1453. # string_to_array - empty string must return an empty array.
  1454. query T
  1455. select string_to_array('', 'hello') from string_to_array_words;
  1456. ----
  1457. {}
  1458. query T
  1459. select string_to_array('', '') from string_to_array_words;
  1460. ----
  1461. {}
  1462. # string_to_array - whitespace.
  1463. query T
  1464. select string_to_array(' ', '') from string_to_array_words;
  1465. ----
  1466. {" "}
  1467. # string_to_array - null input results in null.
  1468. query T
  1469. select string_to_array(null, '') from string_to_array_words;
  1470. ----
  1471. NULL
  1472. # string_to_array - non string input results in error.
  1473. query error
  1474. select string_to_array('hello world', 0) from string_to_array_words;
  1475. # string_to_array - end.