json_builtins.slt 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/json_builtins
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. mode cockroach
  20. ## json_typeof and jsonb_typeof
  21. query T
  22. SELECT json_typeof('-123.4'::JSON)
  23. ----
  24. number
  25. query T
  26. SELECT jsonb_typeof('-123.4'::JSON)
  27. ----
  28. number
  29. query T
  30. SELECT json_typeof('"-123.4"'::JSON)
  31. ----
  32. string
  33. query T
  34. SELECT jsonb_typeof('"-123.4"'::JSON)
  35. ----
  36. string
  37. query T
  38. SELECT json_typeof('{"1":{"2":3}}'::JSON)
  39. ----
  40. object
  41. query T
  42. SELECT jsonb_typeof('{"1":{"2":3}}'::JSON)
  43. ----
  44. object
  45. query T
  46. SELECT json_typeof('[1, 2, [3]]'::JSON)
  47. ----
  48. array
  49. query T
  50. SELECT jsonb_typeof('[1, 2, [3]]'::JSON)
  51. ----
  52. array
  53. query T
  54. SELECT json_typeof('true'::JSON)
  55. ----
  56. boolean
  57. query T
  58. SELECT jsonb_typeof('true'::JSON)
  59. ----
  60. boolean
  61. query T
  62. SELECT json_typeof('false'::JSON)
  63. ----
  64. boolean
  65. query T
  66. SELECT jsonb_typeof('false'::JSON)
  67. ----
  68. boolean
  69. query T
  70. SELECT json_typeof('null'::JSON)
  71. ----
  72. null
  73. query T
  74. SELECT jsonb_typeof('null'::JSON)
  75. ----
  76. null
  77. ## array_to_json
  78. query T
  79. SELECT array_to_json(ARRAY[[1,2],[3,4]])
  80. ----
  81. [[1,2],[3,4]]
  82. query T
  83. SELECT array_to_json('{1,2,3}'::INT[])
  84. ----
  85. [1,2,3]
  86. query T
  87. SELECT array_to_json('{"a","b","c"}'::STRING[])
  88. ----
  89. ["a","b","c"]
  90. query T
  91. SELECT array_to_json('{1.0,2.0,3.0}'::DECIMAL[])
  92. ----
  93. [1.0,2.0,3.0]
  94. query T
  95. SELECT array_to_json(NULL)
  96. ----
  97. NULL
  98. query T
  99. SELECT array_to_json(ARRAY[1,2,3],NULL)
  100. ----
  101. NULL
  102. query T
  103. SELECT array_to_json(ARRAY[1,2,3],false)
  104. ----
  105. [1,2,3]
  106. query error pq:array_to_json\(\):pretty printing is not supported
  107. SELECT array_to_json(ARRAY[1,2,3],true)
  108. query error pq:unknown signature:array_to_json\(string\)
  109. SELECT array_to_json('hello world')
  110. ## to_json and to_jsonb
  111. query T
  112. SELECT to_json(123::INT)
  113. ----
  114. 123
  115. query T
  116. SELECT to_json('\a'::TEXT)
  117. ----
  118. "\\a"
  119. query T
  120. SELECT to_json('\a'::TEXT COLLATE "fr_FR")
  121. ----
  122. "\\a"
  123. query T
  124. SELECT to_json(3::OID::INT::OID)
  125. ----
  126. "3"
  127. query T
  128. SELECT to_json('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::UUID);
  129. ----
  130. "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"
  131. query T
  132. SELECT to_json('\x0001'::BYTEA)
  133. ----
  134. "\\x0001"
  135. query T
  136. SELECT to_json(true::BOOL)
  137. ----
  138. true
  139. query T
  140. SELECT to_json(false::BOOL)
  141. ----
  142. false
  143. query T
  144. SELECT to_json('"a"'::JSON)
  145. ----
  146. "a"
  147. query T
  148. SELECT to_json(1.234::FLOAT)
  149. ----
  150. 1.234
  151. query T
  152. SELECT to_json(1.234::DECIMAL)
  153. ----
  154. 1.234
  155. query T
  156. SELECT to_json('10.1.0.0/16'::INET)
  157. ----
  158. "10.1.0.0/16"
  159. query T
  160. SELECT to_json(ARRAY[[1,2],[3,4]])
  161. ----
  162. [[1,2],[3,4]]
  163. query T
  164. SELECT to_json('2014-05-28 12:22:35.614298'::TIMESTAMP)
  165. ----
  166. "2014-05-28T12:22:35.614298"
  167. query T
  168. SELECT to_json('2014-05-28 12:22:35.614298-04'::TIMESTAMPTZ)
  169. ----
  170. "2014-05-28T12:22:35.614298-04:00"
  171. query T
  172. SELECT to_json('2014-05-28 12:22:35.614298-04'::TIMESTAMP)
  173. ----
  174. "2014-05-28T12:22:35.614298"
  175. query T
  176. SELECT to_json('2014-05-28'::DATE)
  177. ----
  178. "2014-05-28"
  179. query T
  180. SELECT to_json('00:00:00'::TIME)
  181. ----
  182. "00:00:00"
  183. query T
  184. SELECT to_json('2h45m2s234ms'::INTERVAL)
  185. ----
  186. "02:45:02.234"
  187. query T
  188. SELECT to_json((1,2,'hello',NULL,NULL))
  189. ----
  190. {"f1":1,"f2":2,"f3":"hello","f4":null,"f5":null}
  191. query T
  192. SELECT to_jsonb(123::INT)
  193. ----
  194. 123
  195. query T
  196. SELECT to_jsonb('\a'::TEXT)
  197. ----
  198. "\\a"
  199. query T
  200. SELECT to_jsonb('\a'::TEXT COLLATE "fr_FR")
  201. ----
  202. "\\a"
  203. query T
  204. SELECT to_jsonb(3::OID::INT::OID)
  205. ----
  206. "3"
  207. query T
  208. SELECT to_jsonb('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::UUID);
  209. ----
  210. "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"
  211. query T
  212. SELECT to_jsonb('\x0001'::BYTEA)
  213. ----
  214. "\\x0001"
  215. query T
  216. SELECT to_jsonb(true::BOOL)
  217. ----
  218. true
  219. query T
  220. SELECT to_jsonb(false::BOOL)
  221. ----
  222. false
  223. query T
  224. SELECT to_jsonb('"a"'::JSON)
  225. ----
  226. "a"
  227. query T
  228. SELECT to_jsonb(1.234::FLOAT)
  229. ----
  230. 1.234
  231. query T
  232. SELECT to_jsonb(1.234::DECIMAL)
  233. ----
  234. 1.234
  235. query T
  236. SELECT to_jsonb('10.1.0.0/16'::INET)
  237. ----
  238. "10.1.0.0/16"
  239. query T
  240. SELECT to_jsonb(ARRAY[[1,2],[3,4]])
  241. ----
  242. [[1,2],[3,4]]
  243. query T
  244. SELECT to_jsonb('2014-05-28 12:22:35.614298'::TIMESTAMP)
  245. ----
  246. "2014-05-28T12:22:35.614298"
  247. query T
  248. SELECT to_jsonb('2014-05-28 12:22:35.614298-04'::TIMESTAMPTZ)
  249. ----
  250. "2014-05-28T12:22:35.614298-04:00"
  251. query T
  252. SELECT to_jsonb('2014-05-28 12:22:35.614298-04'::TIMESTAMP)
  253. ----
  254. "2014-05-28T12:22:35.614298"
  255. query T
  256. SELECT to_jsonb('2014-05-28'::DATE)
  257. ----
  258. "2014-05-28"
  259. query T
  260. SELECT to_jsonb('00:00:00'::TIME)
  261. ----
  262. "00:00:00"
  263. query T
  264. SELECT to_jsonb('2h45m2s234ms'::INTERVAL)
  265. ----
  266. "02:45:02.234"
  267. query T
  268. SELECT to_jsonb((1,2,'hello',NULL,NULL))
  269. ----
  270. {"f1":1,"f2":2,"f3":"hello","f4":null,"f5":null}
  271. ## json_array_elements and jsonb_array_elements
  272. query T
  273. SELECT json_array_elements('[1,2,3]'::JSON)
  274. ----
  275. 1
  276. 2
  277. 3
  278. query T
  279. SELECT jsonb_array_elements('[1,2,3]'::JSON)
  280. ----
  281. 1
  282. 2
  283. 3
  284. query T
  285. SELECT json_array_elements('[1,true,null,"text",-1.234,{"2":3,"4":"5"},[1,2,3]]'::JSON)
  286. ----
  287. 1
  288. true
  289. null
  290. "text"
  291. -1.234
  292. {"2":3,"4":"5"}
  293. [1,2,3]
  294. query T
  295. SELECT json_array_elements('[]'::JSON)
  296. ----
  297. query error pq:cannot be called on a non-array
  298. SELECT json_array_elements('{"1":2}'::JSON)
  299. query error pq:cannot be called on a non-array
  300. SELECT jsonb_array_elements('{"1":2}'::JSON)
  301. ## json_array_elements_text and jsonb_array_elements_text
  302. query T
  303. SELECT json_array_elements_text('[1,2,3]'::JSON)
  304. ----
  305. 1
  306. 2
  307. 3
  308. query T
  309. SELECT json_array_elements_text('[1,2,3]'::JSON)
  310. ----
  311. 1
  312. 2
  313. 3
  314. query T
  315. SELECT json_array_elements_text('[1,true,null,"text",-1.234,{"2":3,"4":"5"},[1,2,3]]'::JSON)
  316. ----
  317. 1
  318. true
  319. NULL
  320. text
  321. -1.234
  322. {"2":3,"4":"5"}
  323. [1,2,3]
  324. query T
  325. SELECT json_array_elements('[]'::JSON)
  326. ----
  327. query error pq:cannot be called on a non-array
  328. SELECT json_array_elements_text('{"1":2}'::JSON)
  329. query error pq:cannot be called on a non-array
  330. SELECT jsonb_array_elements_text('{"1":2}'::JSON)
  331. ## json_object_keys and jsonb_object_keys
  332. query T
  333. SELECT json_object_keys('{"1":2,"3":4}'::JSON)
  334. ----
  335. 1
  336. 3
  337. query T
  338. SELECT jsonb_object_keys('{"1":2,"3":4}'::JSON)
  339. ----
  340. 1
  341. 3
  342. query T
  343. SELECT json_object_keys('{}'::JSON)
  344. ----
  345. query T
  346. SELECT json_object_keys('{"\"1\"":2}'::JSON)
  347. ----
  348. "1"
  349. # Keys are sorted.
  350. query T
  351. SELECT json_object_keys('{"a":1,"1":2,"3":{"4":5,"6":7}}'::JSON)
  352. ----
  353. 1
  354. 3
  355. a
  356. query error pq:cannot call json_object_keys on a scalar
  357. SELECT json_object_keys('null'::JSON)
  358. query error pq:cannot call json_object_keys on an array
  359. SELECT json_object_keys('[1,2,3]'::JSON)
  360. ## json_build_object
  361. query T
  362. SELECT json_build_object()
  363. ----
  364. {}
  365. query T
  366. SELECT json_build_object('a',2,'b',4)
  367. ----
  368. {"a":2,"b":4}
  369. query T
  370. SELECT jsonb_build_object(true,'val',1,0,1.3,2,date '2019-02-03' - date '2019-01-01',4)
  371. ----
  372. {"1":0,"1.3":2,"33":4,"true":"val"}
  373. query T
  374. SELECT json_build_object('a',1,'b',1.2,'c',true,'d',null,'e','{"x":3,"y":[1,2,3]}'::JSON)
  375. ----
  376. {"a":1,"b":1.2,"c":true,"d":null,"e":{"x":3,"y":[1,2,3]}}
  377. query T
  378. SELECT json_build_object(
  379. 'a',json_build_object('b',false,'c',99),
  380. 'd',json_build_object('e',ARRAY[9,8,7]::int[])
  381. )
  382. ----
  383. {"a":{"b":false,"c":99},"d":{"e":[9,8,7]}}
  384. query T
  385. SELECT json_build_object(a,3) FROM (SELECT 1 AS a,2 AS b) r
  386. ----
  387. {"1":3}
  388. query T
  389. SELECT json_build_object('\a'::TEXT COLLATE "fr_FR",1)
  390. ----
  391. {"\\a":1}
  392. query T
  393. SELECT json_build_object('\a',1)
  394. ----
  395. {"\\a":1}
  396. query T
  397. SELECT json_build_object(json_object_keys('{"x":3,"y":4}'::JSON),2)
  398. ----
  399. {"x":2}
  400. {"y":2}
  401. # Regression for panic when bit array is passed as argument.
  402. query T
  403. SELECT json_build_object('a','0100110'::varbit)
  404. ----
  405. {"a":"0100110"}
  406. # even number of arguments
  407. query error pq:json_build_object\(\):argument list must have even number of elements
  408. SELECT json_build_object(1,2,3)
  409. # keys must be scalar and not null
  410. query error pq:json_build_object\(\):argument 1 cannot be null
  411. SELECT json_build_object(null,2)
  412. query error pq:json_build_object\(\):key value must be scalar,not array,tuple,or json
  413. SELECT json_build_object((1,2),3)
  414. query error pq:json_build_object\(\):key value must be scalar,not array,tuple,or json
  415. SELECT json_build_object('{"a":1,"b":2}'::JSON,3)
  416. query error pq:json_build_object\(\):key value must be scalar,not array,tuple,or json
  417. SELECT json_build_object('{1,2,3}'::int[],3)
  418. query T
  419. SELECT json_extract_path('{"a":1}','a')
  420. ----
  421. 1
  422. query T
  423. SELECT json_extract_path('{"a":1}','a',NULL)
  424. ----
  425. NULL
  426. query T
  427. SELECT json_extract_path('{"a":1}')
  428. ----
  429. {"a":1}
  430. query T
  431. SELECT json_extract_path('{"a":{"b":2}}','a')
  432. ----
  433. {"b":2}
  434. query T
  435. SELECT json_extract_path('{"a":{"b":2}}','a','b')
  436. ----
  437. 2
  438. query T
  439. SELECT jsonb_extract_path('{"a":{"b":2}}','a','b')
  440. ----
  441. 2
  442. query T
  443. SELECT json_extract_path('{"a":{"b":2}}','a','b','c')
  444. ----
  445. NULL
  446. query T
  447. SELECT jsonb_pretty('{"a":1}')
  448. ----
  449. {
  450. "a":1
  451. }
  452. query T
  453. SELECT '[1,2,3]'::JSON || '[4,5,6]'::JSON
  454. ----
  455. [1,2,3,4,5,6]
  456. query T
  457. SELECT '{"a":1,"b":2}'::JSON || '{"b":3,"c":4}'
  458. ----
  459. {"a":1,"b":3,"c":4}
  460. query error pgcode 22023 invalid concatenation of jsonb objects
  461. SELECT '{"a":1,"b":2}'::JSON || '"c"'
  462. query T
  463. SELECT json_build_array()
  464. ----
  465. []
  466. query T
  467. SELECT json_build_array('\x0001'::BYTEA)
  468. ----
  469. ["\\x0001"]
  470. query T
  471. SELECT json_build_array(1,'1'::JSON,1.2,NULL,ARRAY['x','y'])
  472. ----
  473. [1,1,1.2,null,["x","y"]]
  474. query T
  475. SELECT jsonb_build_array()
  476. ----
  477. []
  478. query T
  479. SELECT jsonb_build_array('\x0001'::BYTEA)
  480. ----
  481. ["\\x0001"]
  482. query T
  483. SELECT jsonb_build_array(1,'1'::JSON,1.2,NULL,ARRAY['x','y'])
  484. ----
  485. [1,1,1.2,null,["x","y"]]
  486. # Regression for cockroach#37318
  487. query T
  488. SELECT jsonb_build_array('+Inf'::FLOAT8,'NaN'::FLOAT8)::STRING::JSONB
  489. ----
  490. ["Infinity","NaN"]
  491. query error pq:json_object\(\):array must have even number of elements
  492. SELECT json_object('{a,b,c}'::TEXT[])
  493. query error pq:json_object\(\):null value not allowed for object key
  494. SELECT json_object('{NULL,a}'::TEXT[])
  495. query error pq:json_object\(\):null value not allowed for object key
  496. SELECT json_object('{a,b,NULL,"d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  497. query error pq:json_object\(\):mismatched array dimensions
  498. SELECT json_object('{a,b,c,"d e f",g}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  499. query error pq:json_object\(\):mismatched array dimensions
  500. SELECT json_object('{a,b,c,"d e f"}'::TEXT[],'{1,2,3,"a b c",g}'::TEXT[])
  501. query error pq:unknown signature:json_object\(collatedstring\{fr_FR\}\[\]\)
  502. SELECT json_object(ARRAY['a'::TEXT COLLATE "fr_FR"])
  503. query T
  504. SELECT json_object('{}'::TEXT[])
  505. ----
  506. {}
  507. query T
  508. SELECT json_object('{}'::TEXT[],'{}'::TEXT[])
  509. ----
  510. {}
  511. query T
  512. SELECT json_object('{b,3,a,1,b,4,a,2}'::TEXT[])
  513. ----
  514. {"a":"2","b":"4"}
  515. query T
  516. SELECT json_object('{b,b,a,a}'::TEXT[],'{1,2,3,4}'::TEXT[])
  517. ----
  518. {"a":"4","b":"2"}
  519. query T
  520. SELECT json_object('{a,1,b,2,3,NULL,"d e f","a b c"}'::TEXT[])
  521. ----
  522. {"3":null,"a":"1","b":"2","d e f":"a b c"}
  523. query T
  524. SELECT json_object('{a,b,"","d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  525. ----
  526. {"":"3","a":"1","b":"2","d e f":"a b c"}
  527. query T
  528. SELECT json_object('{a,b,c,"d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  529. ----
  530. {"a":"1","b":"2","c":"3","d e f":"a b c"}
  531. query error pq:jsonb_object\(\):array must have even number of elements
  532. SELECT jsonb_object('{a,b,c}'::TEXT[])
  533. query error pq:jsonb_object\(\):null value not allowed for object key
  534. SELECT jsonb_object('{NULL,a}'::TEXT[])
  535. query error pq:jsonb_object\(\):null value not allowed for object key
  536. SELECT jsonb_object('{a,b,NULL,"d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  537. query error pq:jsonb_object\(\):mismatched array dimensions
  538. SELECT jsonb_object('{a,b,c,"d e f",g}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  539. query error pq:jsonb_object\(\):mismatched array dimensions
  540. SELECT jsonb_object('{a,b,c,"d e f"}'::TEXT[],'{1,2,3,"a b c",g}'::TEXT[])
  541. query error pq:unknown signature:jsonb_object\(collatedstring\{fr_FR\}\[\]\)
  542. SELECT jsonb_object(ARRAY['a'::TEXT COLLATE "fr_FR"])
  543. query T
  544. SELECT jsonb_object('{}'::TEXT[])
  545. ----
  546. {}
  547. query T
  548. SELECT jsonb_object('{}'::TEXT[],'{}'::TEXT[])
  549. ----
  550. {}
  551. query T
  552. SELECT jsonb_object('{b,3,a,1,b,4,a,2}'::TEXT[])
  553. ----
  554. {"a":"2","b":"4"}
  555. query T
  556. SELECT jsonb_object('{b,b,a,a}'::TEXT[],'{1,2,3,4}'::TEXT[])
  557. ----
  558. {"a":"4","b":"2"}
  559. query T
  560. SELECT jsonb_object('{a,1,b,2,3,NULL,"d e f","a b c"}'::TEXT[])
  561. ----
  562. {"3":null,"a":"1","b":"2","d e f":"a b c"}
  563. query T
  564. SELECT jsonb_object('{a,b,"","d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  565. ----
  566. {"":"3","a":"1","b":"2","d e f":"a b c"}
  567. query T
  568. SELECT jsonb_object('{a,b,c,"d e f"}'::TEXT[],'{1,2,3,"a b c"}'::TEXT[])
  569. ----
  570. {"a":"1","b":"2","c":"3","d e f":"a b c"}
  571. query error pq:cannot deconstruct an array as an object
  572. SELECT json_each('[1]'::JSON)
  573. query error pq:cannot deconstruct a scalar
  574. SELECT json_each('null'::JSON)
  575. query TT
  576. SELECT * from json_each('{}') q
  577. ----
  578. query TT colnames
  579. SELECT * from json_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q
  580. ----
  581. key value
  582. f1 [1,2,3]
  583. f2 {"f3":1}
  584. f4 null
  585. f5 99
  586. f6 "stringy"
  587. query error pq:cannot deconstruct an array as an object
  588. SELECT jsonb_each('[1]'::JSON)
  589. query error pq:cannot deconstruct a scalar
  590. SELECT jsonb_each('null'::JSON)
  591. query TT
  592. SELECT * from jsonb_each('{}') q
  593. ----
  594. query TT colnames
  595. SELECT * from jsonb_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q
  596. ----
  597. key value
  598. f1 [1,2,3]
  599. f2 {"f3":1}
  600. f4 null
  601. f5 99
  602. f6 "stringy"
  603. query error pq:cannot deconstruct an array as an object
  604. SELECT jsonb_each_text('[1]'::JSON)
  605. query error pq:cannot deconstruct a scalar
  606. SELECT jsonb_each_text('null'::JSON)
  607. query TT
  608. SELECT * from jsonb_each_text('{}') q
  609. ----
  610. query TT
  611. SELECT * from jsonb_each_text('{}') q
  612. ----
  613. query TT colnames
  614. SELECT * from jsonb_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q
  615. ----
  616. key value
  617. f1 [1,2,3]
  618. f2 {"f3":1}
  619. f4 NULL
  620. f5 99
  621. f6 stringy
  622. query error pq:cannot deconstruct an array as an object
  623. SELECT json_each_text('[1]'::JSON)
  624. query error pq:cannot deconstruct a scalar
  625. SELECT json_each_text('null'::JSON)
  626. query TT
  627. SELECT * from json_each_text('{}') q
  628. ----
  629. query TT
  630. SELECT * from json_each_text('{}') q
  631. ----
  632. query TT colnames
  633. SELECT * from json_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null,"f5":99,"f6":"stringy"}') q
  634. ----
  635. key value
  636. f1 [1,2,3]
  637. f2 {"f3":1}
  638. f4 NULL
  639. f5 99
  640. f6 stringy
  641. query T
  642. SELECT json_set('{"a":1}','{a}'::STRING[],'2')
  643. ----
  644. {"a":2}
  645. query T
  646. SELECT jsonb_set('{"a":1}','{b}'::STRING[],'2')
  647. ----
  648. {"a":1,"b":2}
  649. statement error path element at position 1 is null
  650. SELECT jsonb_set('{"a":1}',ARRAY[null,'foo']::STRING[],'2')
  651. statement error path element at position 1 is null
  652. SELECT jsonb_set('{"a":1}','{null,foo}'::STRING[],'2',true)
  653. statement error path element at position 2 is null
  654. SELECT jsonb_set('{"a":1}','{foo,null}'::STRING[],'2',true)
  655. query T
  656. SELECT jsonb_set('{"a":1}','{b}'::STRING[],'2',true)
  657. ----
  658. {"a":1,"b":2}
  659. query T
  660. SELECT jsonb_set('{"a":1}','{b}'::STRING[],'2',false)
  661. ----
  662. {"a":1}
  663. query T
  664. SELECT jsonb_set('[{"f1":1,"f2":null},2,null,3]','{0,f1}'::STRING[],'[2,3,4]',false)
  665. ----
  666. [{"f1":[2,3,4],"f2":null},2,null,3]
  667. query T
  668. SELECT jsonb_set('[{"f1":1,"f2":null},2]','{0,f3}'::STRING[],'[2,3,4]')
  669. ----
  670. [{"f1":1,"f2":null,"f3":[2,3,4]},2]
  671. query T
  672. SELECT jsonb_insert('{"a":[0,1,2]}','{a,1}'::STRING[],'"new_value"');
  673. ----
  674. {"a":[0,"new_value",1,2]}
  675. query T
  676. SELECT jsonb_insert('[0,1,2,{"a":["a","b","d"]},4]','{3,a,2}'::STRING[],'"c"')
  677. ----
  678. [0,1,2,{"a":["a","b","c","d"]},4]
  679. query T
  680. SELECT jsonb_insert('{"a":"foo"}','{b}'::STRING[],'"bar"')
  681. ----
  682. {"a":"foo","b":"bar"}
  683. query T
  684. SELECT jsonb_insert(NULL,'{a}',NULL,false)
  685. ----
  686. NULL
  687. query T
  688. SELECT jsonb_insert('{"a":[0,1,2]}','{a,1}'::STRING[],'"new_value"',true)
  689. ----
  690. {"a":[0,1,"new_value",2]}
  691. query T
  692. SELECT jsonb_insert('{"a":[0,1,2]}','{a,-1}'::STRING[],'"new_value"',true)
  693. ----
  694. {"a":[0,1,2,"new_value"]}
  695. query error pq:jsonb_insert\(\):cannot replace existing key
  696. SELECT jsonb_insert('{"a":"foo"}','{a}'::STRING[],'"new_value"',false)
  697. query T
  698. SELECT jsonb_insert('{"a":"foo"}','{a,0}'::STRING[],'"new_value"',false)
  699. ----
  700. {"a":"foo"}
  701. query T
  702. SELECT jsonb_insert('[0,1,2,3]','{3}'::STRING[],'10',true)
  703. ----
  704. [0,1,2,3,10]
  705. statement error cannot set path in scalar
  706. SELECT jsonb_insert('1','{a}'::STRING[],'10',true)
  707. query T
  708. SELECT jsonb_insert('1',NULL,'10')
  709. ----
  710. NULL
  711. statement error path element at position 1 is null
  712. SELECT jsonb_insert('{"a":[0,1,2],"b":"hello","c":"world"}','{NULL,a,0}'::STRING[],'"new_val"')
  713. statement error path element at position 2 is null
  714. SELECT jsonb_insert('{"a":[0,1,2],"b":"hello","c":"world"}','{a,NULL,0}'::STRING[],'"new_val"')
  715. query T
  716. SELECT jsonb_strip_nulls(NULL)
  717. ----
  718. NULL
  719. query T
  720. SELECT json_strip_nulls('1')
  721. ----
  722. 1
  723. query T
  724. SELECT json_strip_nulls('"a string"')
  725. ----
  726. "a string"
  727. query T
  728. SELECT json_strip_nulls('null')
  729. ----
  730. null
  731. query T
  732. SELECT json_strip_nulls('[1,2,null,3,4]')
  733. ----
  734. [1,2,null,3,4]
  735. query T
  736. SELECT json_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}')
  737. ----
  738. {"a":1,"c":[2,null,3],"d":{"e":4}}
  739. query T
  740. SELECT json_strip_nulls('[1,{"a":1,"b":null,"c":2},3]')
  741. ----
  742. [1,{"a":1,"c":2},3]
  743. query T
  744. SELECT jsonb_strip_nulls('{"a":{"b":null,"c":null},"d":{}}')
  745. ----
  746. {"a":{},"d":{}}
  747. query T
  748. SELECT jsonb_strip_nulls(NULL)
  749. ----
  750. NULL
  751. query T
  752. SELECT jsonb_strip_nulls('1')
  753. ----
  754. 1
  755. query T
  756. SELECT jsonb_strip_nulls('"a string"')
  757. ----
  758. "a string"
  759. query T
  760. SELECT jsonb_strip_nulls('null')
  761. ----
  762. null
  763. query T
  764. SELECT jsonb_strip_nulls('[1,2,null,3,4]')
  765. ----
  766. [1,2,null,3,4]
  767. query T
  768. SELECT jsonb_strip_nulls('{"a":1,"b":null,"c":[2,null,3],"d":{"e":4,"f":null}}')
  769. ----
  770. {"a":1,"c":[2,null,3],"d":{"e":4}}
  771. query T
  772. SELECT jsonb_strip_nulls('[1,{"a":1,"b":null,"c":2},3]')
  773. ----
  774. [1,{"a":1,"c":2},3]
  775. query T
  776. SELECT jsonb_strip_nulls('{"a":{"b":null,"c":null},"d":{}}')
  777. ----
  778. {"a":{},"d":{}}
  779. query error pq:json_array_length\(\):cannot get array length of a non-array
  780. SELECT json_array_length('{"f1":1,"f2":[5,6]}')
  781. query error pq:json_array_length\(\):cannot get array length of a scalar
  782. SELECT json_array_length('4')
  783. query I
  784. SELECT json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]')
  785. ----
  786. 5
  787. query I
  788. SELECT json_array_length('[]')
  789. ----
  790. 0
  791. query error pq:jsonb_array_length\(\):cannot get array length of a non-array
  792. SELECT jsonb_array_length('{"f1":1,"f2":[5,6]}')
  793. query error pq:jsonb_array_length\(\):cannot get array length of a scalar
  794. SELECT jsonb_array_length('4')
  795. query I
  796. SELECT jsonb_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]')
  797. ----
  798. 5
  799. query I
  800. SELECT jsonb_array_length('[]')
  801. ----
  802. 0