nested hstore
[hstore.git] / expected / nested.out
1 SELECT 'ff => {a=>12, b=>16}'::hstore;
2           hstore          
3 --------------------------
4  "ff"=>{"a"=>12, "b"=>16}
5 (1 row)
6
7 SELECT 'ff => {a=>12, b=>16}, qq=> 123'::hstore;
8                hstore                
9 -------------------------------------
10  "ff"=>{"a"=>12, "b"=>16}, "qq"=>123
11 (1 row)
12
13 SELECT 'aa => {a,aaa}, qq=>{ a=>12, b=>16 , c=> { c1, c2}, d=>{d1=>d1, d2=>d2, d1=>d3} }'::hstore;
14                                              hstore                                             
15 ------------------------------------------------------------------------------------------------
16  "aa"=>["a", "aaa"], "qq"=>{"a"=>12, "b"=>16, "c"=>["c1", "c2"], "d"=>{"d1"=>"d3", "d2"=>"d2"}}
17 (1 row)
18
19 SELECT '"aa"=>{a,aaa}, "qq"=>{"a"=>"12", "b"=>"16", "c"=>{c1,c2}, "d"=>{"d1"=>"d1", "d2"=>"d2"}}'::hstore;
20                                                hstore                                               
21 ----------------------------------------------------------------------------------------------------
22  "aa"=>["a", "aaa"], "qq"=>{"a"=>"12", "b"=>"16", "c"=>["c1", "c2"], "d"=>{"d1"=>"d1", "d2"=>"d2"}}
23 (1 row)
24
25 SELECT '"aa"=>{a,aaa}, "qq"=>{"a"=>"12", "b"=>"16", "c"=>{c1,c2,{c3},{c4=>4}}, "d"=>{"d1"=>"d1", "d2"=>"d2"}}'::hstore;
26                                                         hstore                                                         
27 -----------------------------------------------------------------------------------------------------------------------
28  "aa"=>["a", "aaa"], "qq"=>{"a"=>"12", "b"=>"16", "c"=>["c1", "c2", ["c3"], {"c4"=>4}], "d"=>{"d1"=>"d1", "d2"=>"d2"}}
29 (1 row)
30
31 SELECT 'ff => {a,aaa}'::hstore;
32        hstore       
33 --------------------
34  "ff"=>["a", "aaa"]
35 (1 row)
36
37 select 'null'::hstore;
38  hstore 
39 --------
40  NULL
41 (1 row)
42
43 select '{null}'::hstore;
44  hstore 
45 --------
46  [NULL]
47 (1 row)
48
49 select ''::hstore;
50  hstore 
51 --------
52  
53 (1 row)
54
55 select '{}'::hstore;
56  hstore 
57 --------
58  
59 (1 row)
60
61 --test optional outer braces
62 SELECT  'a=>1'::hstore;
63  hstore 
64 --------
65  "a"=>1
66 (1 row)
67
68 SELECT  '{a=>1}'::hstore;
69  hstore 
70 --------
71  "a"=>1
72 (1 row)
73
74 SELECT  '{a,b}'::hstore;
75    hstore   
76 ------------
77  ["a", "b"]
78 (1 row)
79
80 SELECT  '{a,{b}}'::hstore;
81     hstore    
82 --------------
83  ["a", ["b"]]
84 (1 row)
85
86 SELECT  '{{a},b}'::hstore;
87     hstore    
88 --------------
89  [["a"], "b"]
90 (1 row)
91
92 SELECT  '{a,{b},{c}}'::hstore;
93        hstore        
94 ---------------------
95  ["a", ["b"], ["c"]]
96 (1 row)
97
98 SELECT  '{{a},{b},c}'::hstore;
99        hstore        
100 ---------------------
101  [["a"], ["b"], "c"]
102 (1 row)
103
104 SELECT  '{{a},b,{c}}'::hstore;
105        hstore        
106 ---------------------
107  [["a"], "b", ["c"]]
108 (1 row)
109
110 SELECT  '{a,{b=>1}}'::hstore;
111      hstore      
112 -----------------
113  ["a", {"b"=>1}]
114 (1 row)
115
116 SELECT  '{{a},{b=>1}}'::hstore;
117       hstore       
118 -------------------
119  [["a"], {"b"=>1}]
120 (1 row)
121
122 SELECT  'a'::hstore;
123  hstore 
124 --------
125  "a"
126 (1 row)
127
128 SELECT  '{a}'::hstore;
129  hstore 
130 --------
131  ["a"]
132 (1 row)
133
134 SELECT  ''::hstore;
135  hstore 
136 --------
137  
138 (1 row)
139
140 SELECT  '{}'::hstore;
141  hstore 
142 --------
143  
144 (1 row)
145
146 --nested json
147 SELECT  hstore_to_json('a=>1');
148  hstore_to_json 
149 ----------------
150  {"a": 1}
151 (1 row)
152
153 SELECT  hstore_to_json('{a=>1}');
154  hstore_to_json 
155 ----------------
156  {"a": 1}
157 (1 row)
158
159 SELECT  hstore_to_json('{a,b}');
160  hstore_to_json 
161 ----------------
162  ["a", "b"]
163 (1 row)
164
165 SELECT  hstore_to_json('{a,{b}}');
166  hstore_to_json 
167 ----------------
168  ["a", ["b"]]
169 (1 row)
170
171 SELECT  hstore_to_json('{{a},b}');
172  hstore_to_json 
173 ----------------
174  [["a"], "b"]
175 (1 row)
176
177 SELECT  hstore_to_json('{a,{b},{c}}');
178    hstore_to_json    
179 ---------------------
180  ["a", ["b"], ["c"]]
181 (1 row)
182
183 SELECT  hstore_to_json('{{a},{b},c}');
184    hstore_to_json    
185 ---------------------
186  [["a"], ["b"], "c"]
187 (1 row)
188
189 SELECT  hstore_to_json('{{a},b,{c}}');
190    hstore_to_json    
191 ---------------------
192  [["a"], "b", ["c"]]
193 (1 row)
194
195 SELECT  hstore_to_json('{a,{b=>1}}');
196  hstore_to_json  
197 -----------------
198  ["a", {"b": 1}]
199 (1 row)
200
201 SELECT  hstore_to_json('{{a},{b=>1}}');
202   hstore_to_json   
203 -------------------
204  [["a"], {"b": 1}]
205 (1 row)
206
207 SELECT  hstore_to_json('{{a},{b=>1},{c}}');
208       hstore_to_json      
209 --------------------------
210  [["a"], {"b": 1}, ["c"]]
211 (1 row)
212
213 SELECT  hstore_to_json('a');
214  hstore_to_json 
215 ----------------
216  "a"
217 (1 row)
218
219 SELECT  hstore_to_json('{a}');
220  hstore_to_json 
221 ----------------
222  ["a"]
223 (1 row)
224
225 SELECT  hstore_to_json('');
226  hstore_to_json 
227 ----------------
228  {}
229 (1 row)
230
231 SELECT  hstore_to_json('{}');
232  hstore_to_json 
233 ----------------
234  {}
235 (1 row)
236
237 SELECT hstore_to_json('"aa"=>{a,aaa}, "qq"=>{"a"=>"12", "b"=>"16", "c"=>{c1,c2,{c3},{c4=>4}}, "d"=>{"d1"=>"d1", "d2"=>"d2"}}'::hstore);
238                                                      hstore_to_json                                                      
239 -------------------------------------------------------------------------------------------------------------------------
240  {"aa": ["a", "aaa"], "qq": {"a": "12", "b": "16", "c": ["c1", "c2", ["c3"], {"c4": 4}], "d": {"d1": "d1", "d2": "d2"}}}
241 (1 row)
242
243 --
244 SELECT 'ff => {a=>12, b=>16}, qq=> 123, x=>{1,2}, Y=>NULL'::hstore -> 'ff', 
245            'ff => {a=>12, b=>16}, qq=> 123, x=>{1,2}, Y=>NULL'::hstore -> 'qq', 
246            ('ff => {a=>12, b=>16}, qq=> 123, x=>{1,2}, Y=>NULL'::hstore -> 'Y') IS NULL AS t, 
247            'ff => {a=>12, b=>16}, qq=> 123, x=>{1,2}, Y=>NULL'::hstore -> 'x'; 
248      ?column?     | ?column? | t | ?column? 
249 ------------------+----------+---+----------
250  "a"=>12, "b"=>16 | 123      | t | [1, 2]
251 (1 row)
252
253 SELECT '[ a, b, c, d]'::hstore -> 'a';
254  ?column? 
255 ----------
256  a
257 (1 row)
258
259 --
260 CREATE TABLE testtype (i int, h hstore, a int[], j json);
261 INSERT INTO testtype VALUES (1, 'a=>1', '{1,2,3}', '{"x": 2}');
262 SELECT populate_record(v, 'i=>2'::hstore) FROM testtype v;
263             populate_record            
264 ---------------------------------------
265  (2,"""a""=>1","{1,2,3}","{""x"": 2}")
266 (1 row)
267
268 SELECT populate_record(v, 'i=>2, a=>{7,8,9}'::hstore) FROM testtype v;
269             populate_record            
270 ---------------------------------------
271  (2,"""a""=>1","{7,8,9}","{""x"": 2}")
272 (1 row)
273
274 SELECT populate_record(v, 'i=>2, h=>{b=>3}, a=>{7,8,9}'::hstore) FROM testtype v;
275             populate_record            
276 ---------------------------------------
277  (2,"""b""=>3","{7,8,9}","{""x"": 2}")
278 (1 row)
279
280 SELECT populate_record(v, 'i=>2, h=>{b=>3}, a=>{7,8,9}, j=>{a=>{1,2,3}}'::hstore) FROM testtype v;
281                 populate_record                
282 -----------------------------------------------
283  (2,"""b""=>3","{7,8,9}","{""a"": [1, 2, 3]}")
284 (1 row)
285
286 --complex delete
287 SELECT 'b=>{a,c}'::hstore - 'a'::text;
288     ?column?     
289 -----------------
290  "b"=>["a", "c"]
291 (1 row)
292
293 SELECT 'b=>{a,c}, a=>1'::hstore - 'a'::text;
294     ?column?     
295 -----------------
296  "b"=>["a", "c"]
297 (1 row)
298
299 SELECT 'b=>{a,c}, a=>[2,3]'::hstore - 'a'::text;
300     ?column?     
301 -----------------
302  "b"=>["a", "c"]
303 (1 row)
304
305 SELECT 'b=>{a,c}, a=>[2,3]'::hstore - 'a'::text;
306     ?column?     
307 -----------------
308  "b"=>["a", "c"]
309 (1 row)
310
311 SELECT '[2,3,a]'::hstore - 'a'::text;
312  ?column? 
313 ----------
314  [2, 3]
315 (1 row)
316
317 SELECT '[a,2,3,a]'::hstore - 'a'::text;
318  ?column? 
319 ----------
320  [2, 3]
321 (1 row)
322
323 SELECT '[a,a]'::hstore - 'a'::text;
324  ?column? 
325 ----------
326  
327 (1 row)
328
329 SELECT '[a]'::hstore - 'a'::text;
330  ?column? 
331 ----------
332  
333 (1 row)
334
335 SELECT 'a=>1'::hstore - 'a'::text;
336  ?column? 
337 ----------
338  
339 (1 row)
340
341 SELECT ''::hstore - 'a'::text;
342  ?column? 
343 ----------
344  
345 (1 row)
346
347 SELECT '{a, 1 , b,2, c,3}'::hstore - ARRAY['d','b'];
348       ?column?       
349 ---------------------
350  ["a", 1, 2, "c", 3]
351 (1 row)
352
353 SELECT '{a=>{1,2}, v=>23, b=>c}'::hstore - 'v'::hstore;
354        ?column?        
355 -----------------------
356  "a"=>[1, 2], "b"=>"c"
357 (1 row)
358
359 SELECT '{a=>{1,2}, v=>23, b=>c}'::hstore - 'v=>23'::hstore;
360        ?column?        
361 -----------------------
362  "a"=>[1, 2], "b"=>"c"
363 (1 row)
364
365 SELECT '{a=>{1,2}, v=>23, b=>c}'::hstore - 'v=>{1,2}'::hstore;
366             ?column?            
367 --------------------------------
368  "a"=>[1, 2], "b"=>"c", "v"=>23
369 (1 row)
370
371 SELECT '{a=>{1,2}, v=>23, b=>c}'::hstore - 'a=>{1,2}'::hstore;
372      ?column?      
373 -------------------
374  "b"=>"c", "v"=>23
375 (1 row)
376
377 SELECT '{a, {1,2}, v, 23, b, c}'::hstore - 'v'::hstore;
378           ?column?           
379 -----------------------------
380  ["a", [1, 2], 23, "b", "c"]
381 (1 row)
382
383 SELECT '{a, {1,2}, v, 23, b, c}'::hstore - 'v=>23'::hstore;
384         ?column?         
385 -------------------------
386  ["a", [1, 2], "b", "c"]
387 (1 row)
388
389 SELECT '{a, {1,2}, v, 23, b, c}'::hstore - '[v,23]'::hstore;
390         ?column?         
391 -------------------------
392  ["a", [1, 2], "b", "c"]
393 (1 row)
394
395 SELECT '{a, {1,2}, v, 23, b, c}'::hstore - '[v,{1,2}]'::hstore;
396       ?column?       
397 ---------------------
398  ["a", 23, "b", "c"]
399 (1 row)
400
401 --joining
402 SELECT 'aa=>1 , b=>2, cq=>3'::hstore || '{cq,l, b,g, fg,f, 1,2}'::hstore;
403                    ?column?                    
404 -----------------------------------------------
405  "1"=>2, "b"=>"g", "aa"=>1, "cq"=>"l", "fg"=>f
406 (1 row)
407
408 SELECT '{aa,1 , b,2, cq,3}'::hstore || '{cq,l, b,g, fg,f, 1,2}'::hstore;
409                             ?column?                            
410 ----------------------------------------------------------------
411  ["aa", 1, "b", 2, "cq", 3, "cq", "l", "b", "g", "fg", f, 1, 2]
412 (1 row)
413
414 SELECT  'x'::hstore || 'a=>"1"':: hstore;
415     ?column?     
416 -----------------
417  ["x", "a", "1"]
418 (1 row)
419
420 --slice
421 SELECT slice_array(hstore 'aa=>1, b=>2, c=>3', ARRAY['g','h','i']);
422    slice_array    
423 ------------------
424  {NULL,NULL,NULL}
425 (1 row)
426
427 SELECT slice_array(hstore '{aa,1, b,2, c,3}', ARRAY['g','h','i']);
428    slice_array    
429 ------------------
430  {NULL,NULL,NULL}
431 (1 row)
432
433 SELECT slice_array(hstore 'aa=>1, b=>2, c=>3', ARRAY['b','c']);
434  slice_array 
435 -------------
436  {2,3}
437 (1 row)
438
439 SELECT slice_array(hstore '{aa,1, b,2, c,3}', ARRAY['b','c']);
440  slice_array 
441 -------------
442  {b,c}
443 (1 row)
444
445 SELECT slice_array(hstore 'aa=>1, b=>{2=>1}, c=>{1,2}', ARRAY['b','c']);
446       slice_array      
447 -----------------------
448  {"\"2\"=>1","[1, 2]"}
449 (1 row)
450
451 SELECT slice(hstore '{aa=>1, b=>2, c=>3}', ARRAY['g','h','i']);
452  slice 
453 -------
454  
455 (1 row)
456
457 SELECT slice(hstore '{aa,1, b,2, c,3}', ARRAY['g','h','i']);
458  slice 
459 -------
460  
461 (1 row)
462
463 SELECT slice(hstore '{aa=>1, b=>2, c=>3}', ARRAY['b','c']);
464      slice      
465 ----------------
466  "b"=>2, "c"=>3
467 (1 row)
468
469 SELECT slice(hstore '{aa,1, b,2, c,3}', ARRAY['b','c']);
470    slice    
471 ------------
472  ["b", "c"]
473 (1 row)
474
475 SELECT slice(hstore '{aa=>1, b=>{2=>1}, c=>{1,2}}', ARRAY['b','c']);
476            slice            
477 ----------------------------
478  "b"=>{"2"=>1}, "c"=>[1, 2]
479 (1 row)
480
481 --to array
482 SELECT %% 'aa=>1, cq=>l, b=>{a,n}, fg=>NULL';
483                 ?column?                
484 ----------------------------------------
485  {b,"[\"a\", \"n\"]",aa,1,cq,l,fg,NULL}
486 (1 row)
487
488 SELECT %% '{aa,1, cq,l, b,g, fg,NULL}';
489         ?column?         
490 -------------------------
491  {aa,1,cq,l,b,g,fg,NULL}
492 (1 row)
493
494 SELECT hstore_to_matrix( 'aa=>1, cq=>l, b=>{a,n}, fg=>NULL');
495                 hstore_to_matrix                
496 ------------------------------------------------
497  {{b,"[\"a\", \"n\"]"},{aa,1},{cq,l},{fg,NULL}}
498 (1 row)
499
500 SELECT hstore_to_matrix( '{aa,1, cq,l, b,g, fg,NULL}');
501         hstore_to_matrix         
502 ---------------------------------
503  {{aa,1},{cq,l},{b,g},{fg,NULL}}
504 (1 row)
505
506 --contains
507 SELECT 'a=>b'::hstore @> 'a=>b, c=>b';
508  ?column? 
509 ----------
510  f
511 (1 row)
512
513 SELECT 'a=>b, c=>b'::hstore @> 'a=>b';
514  ?column? 
515 ----------
516  t
517 (1 row)
518
519 SELECT 'a=>{1,2}, c=>b'::hstore @> 'a=>{1,2}';
520  ?column? 
521 ----------
522  t
523 (1 row)
524
525 SELECT 'a=>{2,1}, c=>b'::hstore @> 'a=>{1,2}';
526  ?column? 
527 ----------
528  t
529 (1 row)
530
531 SELECT 'a=>{1=>2}, c=>b'::hstore @> 'a=>{1,2}';
532  ?column? 
533 ----------
534  f
535 (1 row)
536
537 SELECT 'a=>{2=>1}, c=>b'::hstore @> 'a=>{1,2}';
538  ?column? 
539 ----------
540  f
541 (1 row)
542
543 SELECT 'a=>{1=>2}, c=>b'::hstore @> 'a=>{1=>2}';
544  ?column? 
545 ----------
546  t
547 (1 row)
548
549 SELECT 'a=>{2=>1}, c=>b'::hstore @> 'a=>{1=>2}';
550  ?column? 
551 ----------
552  f
553 (1 row)
554
555 SELECT '{a,b}'::hstore @> '{a,b, c,b}';
556  ?column? 
557 ----------
558  f
559 (1 row)
560
561 SELECT '{a,b, c,b}'::hstore @> '{a,b}';
562  ?column? 
563 ----------
564  t
565 (1 row)
566
567 SELECT '{a,b, c,{1,2}}'::hstore @> '{a,{1,2}}';
568  ?column? 
569 ----------
570  t
571 (1 row)
572
573 SELECT '{a,b, c,{1,2}}'::hstore @> '{b,{1,2}}';
574  ?column? 
575 ----------
576  t
577 (1 row)
578
579 SELECT 'a=>{1,2}, c=>b'::hstore @> 'a=>{1}';
580  ?column? 
581 ----------
582  t
583 (1 row)
584
585 SELECT 'a=>{1,2}, c=>b'::hstore @> 'a=>{2}';
586  ?column? 
587 ----------
588  t
589 (1 row)
590
591 SELECT 'a=>{1,2}, c=>b'::hstore @> 'a=>{3}';
592  ?column? 
593 ----------
594  f
595 (1 row)
596
597 SELECT 'a=>{1,2,{c=>3, x=>4}}, c=>b'::hstore @> 'a=>{{c=>3}}';
598  ?column? 
599 ----------
600  t
601 (1 row)
602
603 SELECT 'a=>{1,2,{c=>3, x=>4}}, c=>b'::hstore @> 'a=>{{x=>4}}';
604  ?column? 
605 ----------
606  t
607 (1 row)
608
609 SELECT 'a=>{1,2,{c=>3, x=>4}}, c=>b'::hstore @> 'a=>{{x=>4},3}';
610  ?column? 
611 ----------
612  f
613 (1 row)
614
615 SELECT 'a=>{1,2,{c=>3, x=>4}}, c=>b'::hstore @> 'a=>{{x=>4},1}';
616  ?column? 
617 ----------
618  t
619 (1 row)
620
621 -- %>
622 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'n';
623  ?column? 
624 ----------
625  
626 (1 row)
627
628 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'a';
629  ?column? 
630 ----------
631  1
632 (1 row)
633
634 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'b';
635  ?column? 
636 ----------
637  [1, 2]
638 (1 row)
639
640 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'c';
641  ?column? 
642 ----------
643  "1"=>2
644 (1 row)
645
646 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'd';
647   ?column?   
648 -------------
649  "1"=>[2, 3]
650 (1 row)
651
652 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 'd' %> '1';
653  ?column? 
654 ----------
655  [2, 3]
656 (1 row)
657
658 SELECT '[1,2,3,{a,b}]'::hstore %> '1';
659  ?column? 
660 ----------
661  
662 (1 row)
663
664 SELECT '["1",2,3,{a,b}]'::hstore %> '1';
665  ?column? 
666 ----------
667  "1"
668 (1 row)
669
670 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 5;
671  ?column? 
672 ----------
673  
674 (1 row)
675
676 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 4;
677  ?column? 
678 ----------
679  
680 (1 row)
681
682 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 3;
683   ?column?   
684 -------------
685  "1"=>[2, 3]
686 (1 row)
687
688 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 2;
689  ?column? 
690 ----------
691  "1"=>2
692 (1 row)
693
694 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 1;
695  ?column? 
696 ----------
697  [1, 2]
698 (1 row)
699
700 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore %> 0;
701  ?column? 
702 ----------
703  1
704 (1 row)
705
706 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 5;
707  ?column? 
708 ----------
709  
710 (1 row)
711
712 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 4;
713  ?column? 
714 ----------
715  
716 (1 row)
717
718 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 3;
719  ?column? 
720 ----------
721  [1, 2]
722 (1 row)
723
724 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 2;
725  ?column? 
726 ----------
727  "c"
728 (1 row)
729
730 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 1;
731  ?column? 
732 ----------
733  "b"
734 (1 row)
735
736 SELECT '[a,b, c,{1,2}, NULL]'::hstore %> 0;
737  ?column? 
738 ----------
739  "a"
740 (1 row)
741
742 -- ->
743 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 5;
744  ?column? 
745 ----------
746  
747 (1 row)
748
749 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 4;
750  ?column? 
751 ----------
752  
753 (1 row)
754
755 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 3;
756   ?column?   
757 -------------
758  "1"=>[2, 3]
759 (1 row)
760
761 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 2;
762  ?column? 
763 ----------
764  "1"=>2
765 (1 row)
766
767 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 1;
768  ?column? 
769 ----------
770  [1, 2]
771 (1 row)
772
773 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> 0;
774  ?column? 
775 ----------
776  1
777 (1 row)
778
779 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 5;
780  ?column? 
781 ----------
782  
783 (1 row)
784
785 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 4;
786  ?column? 
787 ----------
788  
789 (1 row)
790
791 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 3;
792  ?column? 
793 ----------
794  [1, 2]
795 (1 row)
796
797 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 2;
798  ?column? 
799 ----------
800  c
801 (1 row)
802
803 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 1;
804  ?column? 
805 ----------
806  b
807 (1 row)
808
809 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> 0;
810  ?column? 
811 ----------
812  a
813 (1 row)
814
815 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -6;
816  ?column? 
817 ----------
818  
819 (1 row)
820
821 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -5;
822  ?column? 
823 ----------
824  1
825 (1 row)
826
827 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -4;
828  ?column? 
829 ----------
830  [1, 2]
831 (1 row)
832
833 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -3;
834  ?column? 
835 ----------
836  "1"=>2
837 (1 row)
838
839 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -2;
840   ?column?   
841 -------------
842  "1"=>[2, 3]
843 (1 row)
844
845 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore -> -1;
846  ?column? 
847 ----------
848  
849 (1 row)
850
851 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -6;
852  ?column? 
853 ----------
854  
855 (1 row)
856
857 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -5;
858  ?column? 
859 ----------
860  a
861 (1 row)
862
863 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -4;
864  ?column? 
865 ----------
866  b
867 (1 row)
868
869 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -3;
870  ?column? 
871 ----------
872  c
873 (1 row)
874
875 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -2;
876  ?column? 
877 ----------
878  [1, 2]
879 (1 row)
880
881 SELECT '[a,b, c,{1,2}, NULL]'::hstore -> -1;
882  ?column? 
883 ----------
884  
885 (1 row)
886
887 -- #>
888 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{0}';
889  ?column? 
890 ----------
891  
892 (1 row)
893
894 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{a}';
895  ?column? 
896 ----------
897  b
898 (1 row)
899
900 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c}';
901  ?column?  
902 -----------
903  [1, 2, 3]
904 (1 row)
905
906 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, 0}';
907  ?column? 
908 ----------
909  1
910 (1 row)
911
912 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, 1}';
913  ?column? 
914 ----------
915  2
916 (1 row)
917
918 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, 2}';
919  ?column? 
920 ----------
921  3
922 (1 row)
923
924 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, 3}';
925  ?column? 
926 ----------
927  
928 (1 row)
929
930 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, -1}';
931  ?column? 
932 ----------
933  3
934 (1 row)
935
936 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, -2}';
937  ?column? 
938 ----------
939  2
940 (1 row)
941
942 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, -3}';
943  ?column? 
944 ----------
945  1
946 (1 row)
947
948 SELECT 'a=>b, c=>{1,2,3}'::hstore #> '{c, -4}';
949  ?column? 
950 ----------
951  
952 (1 row)
953
954 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #> '{0}';
955  ?column? 
956 ----------
957  0
958 (1 row)
959
960 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #> '{3}';
961  ?column? 
962 ----------
963  [3, 4]
964 (1 row)
965
966 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #> '{4}';
967   ?column?   
968 -------------
969  "5"=>"five"
970 (1 row)
971
972 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #> '{4,5}';
973  ?column? 
974 ----------
975  five
976 (1 row)
977
978 -- #%>
979 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{0}';
980  ?column? 
981 ----------
982  
983 (1 row)
984
985 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{a}';
986  ?column? 
987 ----------
988  "b"
989 (1 row)
990
991 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c}';
992  ?column?  
993 -----------
994  [1, 2, 3]
995 (1 row)
996
997 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, 0}';
998  ?column? 
999 ----------
1000  1
1001 (1 row)
1002
1003 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, 1}';
1004  ?column? 
1005 ----------
1006  2
1007 (1 row)
1008
1009 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, 2}';
1010  ?column? 
1011 ----------
1012  3
1013 (1 row)
1014
1015 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, 3}';
1016  ?column? 
1017 ----------
1018  
1019 (1 row)
1020
1021 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, -1}';
1022  ?column? 
1023 ----------
1024  3
1025 (1 row)
1026
1027 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, -2}';
1028  ?column? 
1029 ----------
1030  2
1031 (1 row)
1032
1033 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, -3}';
1034  ?column? 
1035 ----------
1036  1
1037 (1 row)
1038
1039 SELECT 'a=>b, c=>{1,2,3}'::hstore #%> '{c, -4}';
1040  ?column? 
1041 ----------
1042  
1043 (1 row)
1044
1045 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #%> '{0}';
1046  ?column? 
1047 ----------
1048  0
1049 (1 row)
1050
1051 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #%> '{3}';
1052  ?column? 
1053 ----------
1054  [3, 4]
1055 (1 row)
1056
1057 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #%> '{4}';
1058   ?column?   
1059 -------------
1060  "5"=>"five"
1061 (1 row)
1062
1063 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #%> '{4,5}';
1064  ?column? 
1065 ----------
1066  "five"
1067 (1 row)
1068
1069 -- ?
1070 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 5;
1071  ?column? 
1072 ----------
1073  f
1074 (1 row)
1075
1076 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 4;
1077  ?column? 
1078 ----------
1079  t
1080 (1 row)
1081
1082 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 3;
1083  ?column? 
1084 ----------
1085  t
1086 (1 row)
1087
1088 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 2;
1089  ?column? 
1090 ----------
1091  t
1092 (1 row)
1093
1094 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 1;
1095  ?column? 
1096 ----------
1097  t
1098 (1 row)
1099
1100 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? 0;
1101  ?column? 
1102 ----------
1103  t
1104 (1 row)
1105
1106 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 5;
1107  ?column? 
1108 ----------
1109  f
1110 (1 row)
1111
1112 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 4;
1113  ?column? 
1114 ----------
1115  t
1116 (1 row)
1117
1118 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 3;
1119  ?column? 
1120 ----------
1121  t
1122 (1 row)
1123
1124 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 2;
1125  ?column? 
1126 ----------
1127  t
1128 (1 row)
1129
1130 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 1;
1131  ?column? 
1132 ----------
1133  t
1134 (1 row)
1135
1136 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? 0;
1137  ?column? 
1138 ----------
1139  t
1140 (1 row)
1141
1142 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -6;
1143  ?column? 
1144 ----------
1145  f
1146 (1 row)
1147
1148 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -5;
1149  ?column? 
1150 ----------
1151  t
1152 (1 row)
1153
1154 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -4;
1155  ?column? 
1156 ----------
1157  t
1158 (1 row)
1159
1160 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -3;
1161  ?column? 
1162 ----------
1163  t
1164 (1 row)
1165
1166 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -2;
1167  ?column? 
1168 ----------
1169  t
1170 (1 row)
1171
1172 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore ? -1;
1173  ?column? 
1174 ----------
1175  t
1176 (1 row)
1177
1178 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -6;
1179  ?column? 
1180 ----------
1181  f
1182 (1 row)
1183
1184 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -5;
1185  ?column? 
1186 ----------
1187  t
1188 (1 row)
1189
1190 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -4;
1191  ?column? 
1192 ----------
1193  t
1194 (1 row)
1195
1196 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -3;
1197  ?column? 
1198 ----------
1199  t
1200 (1 row)
1201
1202 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -2;
1203  ?column? 
1204 ----------
1205  t
1206 (1 row)
1207
1208 SELECT '[a,b, c,{1,2}, NULL]'::hstore ? -1;
1209  ?column? 
1210 ----------
1211  t
1212 (1 row)
1213
1214 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{0}'::text[];
1215  ?column? 
1216 ----------
1217  f
1218 (1 row)
1219
1220 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{a}'::text[];
1221  ?column? 
1222 ----------
1223  t
1224 (1 row)
1225
1226 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c}'::text[];
1227  ?column? 
1228 ----------
1229  t
1230 (1 row)
1231
1232 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{b}'::text[];
1233  ?column? 
1234 ----------
1235  f
1236 (1 row)
1237
1238 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, 0}'::text[];
1239  ?column? 
1240 ----------
1241  t
1242 (1 row)
1243
1244 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, 1}'::text[];
1245  ?column? 
1246 ----------
1247  t
1248 (1 row)
1249
1250 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, 2}'::text[];
1251  ?column? 
1252 ----------
1253  t
1254 (1 row)
1255
1256 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, 3}'::text[];
1257  ?column? 
1258 ----------
1259  f
1260 (1 row)
1261
1262 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, -1}'::text[];
1263  ?column? 
1264 ----------
1265  t
1266 (1 row)
1267
1268 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, -2}'::text[];
1269  ?column? 
1270 ----------
1271  t
1272 (1 row)
1273
1274 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, -3}'::text[];
1275  ?column? 
1276 ----------
1277  t
1278 (1 row)
1279
1280 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, -4}'::text[];
1281  ?column? 
1282 ----------
1283  f
1284 (1 row)
1285
1286 SELECT 'a=>b, c=>{1,2,3}'::hstore #? '{c, -5}'::text[];
1287  ?column? 
1288 ----------
1289  f
1290 (1 row)
1291
1292 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #? '{0}'::text[];
1293  ?column? 
1294 ----------
1295  t
1296 (1 row)
1297
1298 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #? '{3}'::text[];
1299  ?column? 
1300 ----------
1301  t
1302 (1 row)
1303
1304 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #? '{4}'::text[];
1305  ?column? 
1306 ----------
1307  t
1308 (1 row)
1309
1310 SELECT '[0, 1, 2, {3,4}, {5=>five}]'::hstore #? '{4,5}'::text[];
1311  ?column? 
1312 ----------
1313  t
1314 (1 row)
1315
1316 --deep delete
1317 SELECT 'a=>1'::hstore #- '{x}';
1318  ?column? 
1319 ----------
1320  "a"=>1
1321 (1 row)
1322
1323 SELECT 'a=>1'::hstore #- '{a}';
1324  ?column? 
1325 ----------
1326  
1327 (1 row)
1328
1329 SELECT 'a=>1'::hstore #- '{NULL}';
1330  ?column? 
1331 ----------
1332  "a"=>1
1333 (1 row)
1334
1335 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{x}';
1336         ?column?        
1337 ------------------------
1338  "a"=>1, "b"=>2, "c"=>3
1339 (1 row)
1340
1341 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{a}';
1342     ?column?    
1343 ----------------
1344  "b"=>2, "c"=>3
1345 (1 row)
1346
1347 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{b}';
1348     ?column?    
1349 ----------------
1350  "a"=>1, "c"=>3
1351 (1 row)
1352
1353 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{c}';
1354     ?column?    
1355 ----------------
1356  "a"=>1, "b"=>2
1357 (1 row)
1358
1359 SELECT 'a=>1'::hstore #- '{x,1}';
1360  ?column? 
1361 ----------
1362  "a"=>1
1363 (1 row)
1364
1365 SELECT 'a=>1'::hstore #- '{a,1}';
1366  ?column? 
1367 ----------
1368  "a"=>1
1369 (1 row)
1370
1371 SELECT 'a=>1'::hstore #- '{NULL,1}';
1372  ?column? 
1373 ----------
1374  "a"=>1
1375 (1 row)
1376
1377 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{x,1}';
1378         ?column?        
1379 ------------------------
1380  "a"=>1, "b"=>2, "c"=>3
1381 (1 row)
1382
1383 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{a,1}';
1384         ?column?        
1385 ------------------------
1386  "a"=>1, "b"=>2, "c"=>3
1387 (1 row)
1388
1389 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{b,1}';
1390         ?column?        
1391 ------------------------
1392  "a"=>1, "b"=>2, "c"=>3
1393 (1 row)
1394
1395 SELECT 'a=>1, b=>2, c=>3'::hstore #- '{c,1}';
1396         ?column?        
1397 ------------------------
1398  "a"=>1, "b"=>2, "c"=>3
1399 (1 row)
1400
1401 SELECT '[a]'::hstore #- '{2}';
1402  ?column? 
1403 ----------
1404  ["a"]
1405 (1 row)
1406
1407 SELECT '[a]'::hstore #- '{1}';
1408  ?column? 
1409 ----------
1410  ["a"]
1411 (1 row)
1412
1413 SELECT '[a]'::hstore #- '{0}';
1414  ?column? 
1415 ----------
1416  
1417 (1 row)
1418
1419 SELECT '[a]'::hstore #- '{-1}';
1420  ?column? 
1421 ----------
1422  
1423 (1 row)
1424
1425 SELECT '[a]'::hstore #- '{-2}';
1426  ?column? 
1427 ----------
1428  ["a"]
1429 (1 row)
1430
1431 SELECT '[a,b,c]'::hstore #- '{3}';
1432     ?column?     
1433 -----------------
1434  ["a", "b", "c"]
1435 (1 row)
1436
1437 SELECT '[a,b,c]'::hstore #- '{2}';
1438   ?column?  
1439 ------------
1440  ["a", "b"]
1441 (1 row)
1442
1443 SELECT '[a,b,c]'::hstore #- '{1}';
1444   ?column?  
1445 ------------
1446  ["a", "c"]
1447 (1 row)
1448
1449 SELECT '[a,b,c]'::hstore #- '{0}';
1450   ?column?  
1451 ------------
1452  ["b", "c"]
1453 (1 row)
1454
1455 SELECT '[a,b,c]'::hstore #- '{-1}';
1456   ?column?  
1457 ------------
1458  ["a", "b"]
1459 (1 row)
1460
1461 SELECT '[a,b,c]'::hstore #- '{-2}';
1462   ?column?  
1463 ------------
1464  ["a", "c"]
1465 (1 row)
1466
1467 SELECT '[a,b,c]'::hstore #- '{-3}';
1468   ?column?  
1469 ------------
1470  ["b", "c"]
1471 (1 row)
1472
1473 SELECT '[a,b,c]'::hstore #- '{-4}';
1474     ?column?     
1475 -----------------
1476  ["a", "b", "c"]
1477 (1 row)
1478
1479 SELECT '[a,b,c]'::hstore #- '{0,0}';
1480     ?column?     
1481 -----------------
1482  ["a", "b", "c"]
1483 (1 row)
1484
1485 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{x}';
1486                              ?column?                              
1487 -------------------------------------------------------------------
1488  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1489 (1 row)
1490
1491 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{a}';
1492                          ?column?                          
1493 -----------------------------------------------------------
1494  "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1495 (1 row)
1496
1497 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{b}';
1498                        ?column?                       
1499 ------------------------------------------------------
1500  "a"=>1, "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1501 (1 row)
1502
1503 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{c}';
1504                       ?column?                      
1505 ----------------------------------------------------
1506  "a"=>1, "b"=>[1, 2], "d"=>{"1"=>[2, 3]}, "n"=>NULL
1507 (1 row)
1508
1509 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d}';
1510                    ?column?                    
1511 -----------------------------------------------
1512  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "n"=>NULL
1513 (1 row)
1514
1515 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{b, 0}';
1516                             ?column?                            
1517 ----------------------------------------------------------------
1518  "a"=>1, "b"=>[2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1519 (1 row)
1520
1521 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{b, -1}';
1522                             ?column?                            
1523 ----------------------------------------------------------------
1524  "a"=>1, "b"=>[1], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1525 (1 row)
1526
1527 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{b, -1}' #- '{b, -1}';
1528                             ?column?                             
1529 -----------------------------------------------------------------
1530  "a"=>1, "b"=>NULL, "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1531 (1 row)
1532
1533 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{c, 1}';
1534                            ?column?                            
1535 ---------------------------------------------------------------
1536  "a"=>1, "b"=>[1, 2], "c"=>NULL, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1537 (1 row)
1538
1539 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{c, 2}';
1540                              ?column?                              
1541 -------------------------------------------------------------------
1542  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1543 (1 row)
1544
1545 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d, 1, -2}';
1546                             ?column?                            
1547 ----------------------------------------------------------------
1548  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[3]}, "n"=>NULL
1549 (1 row)
1550
1551 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d, 1, 1}';
1552                             ?column?                            
1553 ----------------------------------------------------------------
1554  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2]}, "n"=>NULL
1555 (1 row)
1556
1557 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d, 1, 0}';
1558                             ?column?                            
1559 ----------------------------------------------------------------
1560  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[3]}, "n"=>NULL
1561 (1 row)
1562
1563 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d, 1, 0}' #- '{d, 1, 0}';
1564                             ?column?                             
1565 -----------------------------------------------------------------
1566  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>NULL}, "n"=>NULL
1567 (1 row)
1568
1569 SELECT 'n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore #- '{d, 1, 0}' #- '{d, 1, 0}' #- '{d, 1, 0}';
1570                             ?column?                             
1571 -----------------------------------------------------------------
1572  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>NULL}, "n"=>NULL
1573 (1 row)
1574
1575 -- delete(int)
1576 SELECT '[a,b,c]'::hstore - 3;
1577     ?column?     
1578 -----------------
1579  ["a", "b", "c"]
1580 (1 row)
1581
1582 SELECT '[a,b,c]'::hstore - 2;
1583   ?column?  
1584 ------------
1585  ["a", "b"]
1586 (1 row)
1587
1588 SELECT '[a,b,c]'::hstore - 1;
1589   ?column?  
1590 ------------
1591  ["a", "c"]
1592 (1 row)
1593
1594 SELECT '[a,b,c]'::hstore - 0;
1595   ?column?  
1596 ------------
1597  ["b", "c"]
1598 (1 row)
1599
1600 SELECT '[a,b,c]'::hstore - -1;
1601   ?column?  
1602 ------------
1603  ["a", "b"]
1604 (1 row)
1605
1606 SELECT '[a,b,c]'::hstore - -2;
1607   ?column?  
1608 ------------
1609  ["a", "c"]
1610 (1 row)
1611
1612 SELECT '[a,b,c]'::hstore - -3;
1613   ?column?  
1614 ------------
1615  ["b", "c"]
1616 (1 row)
1617
1618 SELECT '[a,b,c]'::hstore - -4;
1619     ?column?     
1620 -----------------
1621  ["a", "b", "c"]
1622 (1 row)
1623
1624 SELECT 'a=>1, b=>2, c=>3'::hstore - 3;
1625         ?column?        
1626 ------------------------
1627  "a"=>1, "b"=>2, "c"=>3
1628 (1 row)
1629
1630 SELECT 'a=>1, b=>2, c=>3'::hstore - 2;
1631     ?column?    
1632 ----------------
1633  "a"=>1, "b"=>2
1634 (1 row)
1635
1636 SELECT 'a=>1, b=>2, c=>3'::hstore - 1;
1637     ?column?    
1638 ----------------
1639  "a"=>1, "c"=>3
1640 (1 row)
1641
1642 SELECT 'a=>1, b=>2, c=>3'::hstore - 0;
1643     ?column?    
1644 ----------------
1645  "b"=>2, "c"=>3
1646 (1 row)
1647
1648 SELECT 'a=>1, b=>2, c=>3'::hstore - -1;
1649     ?column?    
1650 ----------------
1651  "a"=>1, "b"=>2
1652 (1 row)
1653
1654 SELECT 'a=>1, b=>2, c=>3'::hstore - -2;
1655     ?column?    
1656 ----------------
1657  "a"=>1, "c"=>3
1658 (1 row)
1659
1660 SELECT 'a=>1, b=>2, c=>3'::hstore - -3;
1661     ?column?    
1662 ----------------
1663  "b"=>2, "c"=>3
1664 (1 row)
1665
1666 SELECT 'a=>1, b=>2, c=>3'::hstore - -4;
1667         ?column?        
1668 ------------------------
1669  "a"=>1, "b"=>2, "c"=>3
1670 (1 row)
1671
1672 --replace
1673 SELECT replace('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{n}', '{1,2,3}');
1674                                 replace                                 
1675 ------------------------------------------------------------------------
1676  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>[1, 2, 3]
1677 (1 row)
1678
1679 SELECT replace('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{b,-1}', '{1,2,3}');
1680                                   replace                                  
1681 ---------------------------------------------------------------------------
1682  "a"=>1, "b"=>[1, [1, 2, 3]], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1683 (1 row)
1684
1685 SELECT replace('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{d,1,0}', '{1,2,3}');
1686                                   replace                                  
1687 ---------------------------------------------------------------------------
1688  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[[1, 2, 3], 3]}, "n"=>NULL
1689 (1 row)
1690
1691 SELECT replace('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{d,NULL,0}', '{1,2,3}');
1692                               replace                              
1693 -------------------------------------------------------------------
1694  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1695 (1 row)
1696
1697 --deep concat
1698 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{}', 'n=>not_null');
1699                                concat_path                               
1700 -------------------------------------------------------------------------
1701  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>"not_null"
1702 (1 row)
1703
1704 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{n}', 'n=>not_null');
1705                                   concat_path                                   
1706 --------------------------------------------------------------------------------
1707  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>{"n"=>"not_null"}
1708 (1 row)
1709
1710 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{n}', 'not_null');
1711                                concat_path                               
1712 -------------------------------------------------------------------------
1713  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>"not_null"
1714 (1 row)
1715
1716 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{n}', '{not_null}');
1717                                 concat_path                                
1718 ---------------------------------------------------------------------------
1719  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>["not_null"]
1720 (1 row)
1721
1722 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{}', 'b=>{3,4}');
1723                             concat_path                            
1724 -------------------------------------------------------------------
1725  "a"=>1, "b"=>[3, 4], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1726 (1 row)
1727
1728 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{b}', '{3,4}');
1729                                concat_path                               
1730 -------------------------------------------------------------------------
1731  "a"=>1, "b"=>[1, 2, 3, 4], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1732 (1 row)
1733
1734 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{d,1}', '{4,5}');
1735                                concat_path                               
1736 -------------------------------------------------------------------------
1737  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3, 4, 5]}, "n"=>NULL
1738 (1 row)
1739
1740 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{d,1}', '4=>5');
1741                                 concat_path                                
1742 ---------------------------------------------------------------------------
1743  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3, "4", 5]}, "n"=>NULL
1744 (1 row)
1745
1746 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{d}', '2=>{4,5}');
1747                                   concat_path                                   
1748 --------------------------------------------------------------------------------
1749  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3], "2"=>[4, 5]}, "n"=>NULL
1750 (1 row)
1751
1752 SELECT concat_path('n=>NULL, a=>1, b=>{1,2}, c=>{1=>2}, d=>{1=>{2,3}}'::hstore, '{NULL,1}', '4=>5');
1753                             concat_path                            
1754 -------------------------------------------------------------------
1755  "a"=>1, "b"=>[1, 2], "c"=>{"1"=>2}, "d"=>{"1"=>[2, 3]}, "n"=>NULL
1756 (1 row)
1757
1758 SELECT concat_path('x'::hstore, '{}'::text[], 'a=>"1"':: hstore);
1759    concat_path   
1760 -----------------
1761  ["x", "a", "1"]
1762 (1 row)
1763
1764 --cast 
1765 SELECT ('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::text)::hstore AS err;
1766 ERROR:  bad hstore representation
1767 DETAIL:  syntax error, unexpected STRING_P, expecting '}' or ',' at end of input
1768 SELECT ('{"f2":{"f3":1},"f4":{"f5":99,"f6":"stringy"}}'::json)::hstore AS ok;
1769                          ok                         
1770 ----------------------------------------------------
1771  "f2"=>{"f3"=>1}, "f4"=>{"f5"=>99, "f6"=>"stringy"}
1772 (1 row)
1773
1774 --hvals
1775 SELECT q->'tags' FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore) AS q;
1776  ?column? 
1777 ----------
1778  1
1779  3
1780 (2 rows)
1781
1782 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{}') AS q;
1783                       q                       
1784 ----------------------------------------------
1785  [{"sh"=>2, "tags"=>1}, {"sh"=>4, "tags"=>3}]
1786 (1 row)
1787
1788 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-3}') AS q;
1789  q 
1790 ---
1791 (0 rows)
1792
1793 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-2}') AS q;
1794          q          
1795 --------------------
1796  "sh"=>2, "tags"=>1
1797 (1 row)
1798
1799 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-1}') AS q;
1800          q          
1801 --------------------
1802  "sh"=>4, "tags"=>3
1803 (1 row)
1804
1805 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{0}') AS q;
1806          q          
1807 --------------------
1808  "sh"=>2, "tags"=>1
1809 (1 row)
1810
1811 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{1}') AS q;
1812          q          
1813 --------------------
1814  "sh"=>4, "tags"=>3
1815 (1 row)
1816
1817 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{2}') AS q;
1818  q 
1819 ---
1820 (0 rows)
1821
1822 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{NULL}') AS q;
1823          q          
1824 --------------------
1825  "sh"=>2, "tags"=>1
1826  "sh"=>4, "tags"=>3
1827 (2 rows)
1828
1829 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-3,tags}') AS q;
1830  q 
1831 ---
1832 (0 rows)
1833
1834 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-2,tags}') AS q;
1835  q 
1836 ---
1837  1
1838 (1 row)
1839
1840 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-1,tags}') AS q;
1841  q 
1842 ---
1843  3
1844 (1 row)
1845
1846 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{0,tags}') AS q;
1847  q 
1848 ---
1849  1
1850 (1 row)
1851
1852 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{1,tags}') AS q;
1853  q 
1854 ---
1855  3
1856 (1 row)
1857
1858 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{2,tags}') AS q;
1859  q 
1860 ---
1861 (0 rows)
1862
1863 SELECT q FROM hvals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{NULL,tags}') AS q;
1864  q 
1865 ---
1866  1
1867  3
1868 (2 rows)
1869
1870 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{}') AS q;
1871                                 q                                
1872 -----------------------------------------------------------------
1873  "1"=>"first", "a"=>{"b"=>"c", "c"=>"b"}, "b"=>[1, 2], "c"=>"cc"
1874 (1 row)
1875
1876 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{1}') AS q;
1877     q    
1878 ---------
1879  "first"
1880 (1 row)
1881
1882 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{a}') AS q;
1883          q          
1884 --------------------
1885  "b"=>"c", "c"=>"b"
1886 (1 row)
1887
1888 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{b}') AS q;
1889    q    
1890 --------
1891  [1, 2]
1892 (1 row)
1893
1894 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{c}') AS q;
1895   q   
1896 ------
1897  "cc"
1898 (1 row)
1899
1900 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL}') AS q;
1901          q          
1902 --------------------
1903  "first"
1904  "b"=>"c", "c"=>"b"
1905  [1, 2]
1906  "cc"
1907 (4 rows)
1908
1909 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{a,c}') AS q;
1910   q  
1911 -----
1912  "b"
1913 (1 row)
1914
1915 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,c}') AS q;
1916   q  
1917 -----
1918  "b"
1919 (1 row)
1920
1921 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{b,NULL}') AS q;
1922  q 
1923 ---
1924  1
1925  2
1926 (2 rows)
1927
1928 SELECT q FROM hvals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,1}') AS q;
1929  q 
1930 ---
1931  2
1932 (1 row)
1933
1934 SELECT q FROM hvals('a=>{b=>c, c=>b, 1=>first}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,1}') AS q;
1935     q    
1936 ---------
1937  "first"
1938  2
1939 (2 rows)
1940
1941 --svals path
1942 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{}') AS q;
1943                       q                       
1944 ----------------------------------------------
1945  [{"sh"=>2, "tags"=>1}, {"sh"=>4, "tags"=>3}]
1946 (1 row)
1947
1948 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-3}') AS q;
1949  q 
1950 ---
1951 (0 rows)
1952
1953 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-2}') AS q;
1954          q          
1955 --------------------
1956  "sh"=>2, "tags"=>1
1957 (1 row)
1958
1959 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-1}') AS q;
1960          q          
1961 --------------------
1962  "sh"=>4, "tags"=>3
1963 (1 row)
1964
1965 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{0}') AS q;
1966          q          
1967 --------------------
1968  "sh"=>2, "tags"=>1
1969 (1 row)
1970
1971 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{1}') AS q;
1972          q          
1973 --------------------
1974  "sh"=>4, "tags"=>3
1975 (1 row)
1976
1977 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{2}') AS q;
1978  q 
1979 ---
1980 (0 rows)
1981
1982 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{NULL}') AS q;
1983          q          
1984 --------------------
1985  "sh"=>2, "tags"=>1
1986  "sh"=>4, "tags"=>3
1987 (2 rows)
1988
1989 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-3,tags}') AS q;
1990  q 
1991 ---
1992 (0 rows)
1993
1994 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-2,tags}') AS q;
1995  q 
1996 ---
1997  1
1998 (1 row)
1999
2000 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{-1,tags}') AS q;
2001  q 
2002 ---
2003  3
2004 (1 row)
2005
2006 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{0,tags}') AS q;
2007  q 
2008 ---
2009  1
2010 (1 row)
2011
2012 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{1,tags}') AS q;
2013  q 
2014 ---
2015  3
2016 (1 row)
2017
2018 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{2,tags}') AS q;
2019  q 
2020 ---
2021 (0 rows)
2022
2023 SELECT q FROM svals('{{tags=>1, sh=>2}, {tags=>3, sh=>4}}'::hstore, '{NULL,tags}') AS q;
2024  q 
2025 ---
2026  1
2027  3
2028 (2 rows)
2029
2030 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{}') AS q;
2031                                 q                                
2032 -----------------------------------------------------------------
2033  "1"=>"first", "a"=>{"b"=>"c", "c"=>"b"}, "b"=>[1, 2], "c"=>"cc"
2034 (1 row)
2035
2036 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{1}') AS q;
2037    q   
2038 -------
2039  first
2040 (1 row)
2041
2042 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{a}') AS q;
2043          q          
2044 --------------------
2045  "b"=>"c", "c"=>"b"
2046 (1 row)
2047
2048 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{b}') AS q;
2049    q    
2050 --------
2051  [1, 2]
2052 (1 row)
2053
2054 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{c}') AS q;
2055  q  
2056 ----
2057  cc
2058 (1 row)
2059
2060 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL}') AS q;
2061          q          
2062 --------------------
2063  first
2064  "b"=>"c", "c"=>"b"
2065  [1, 2]
2066  cc
2067 (4 rows)
2068
2069 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{a,c}') AS q;
2070  q 
2071 ---
2072  b
2073 (1 row)
2074
2075 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,c}') AS q;
2076  q 
2077 ---
2078  b
2079 (1 row)
2080
2081 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{b,NULL}') AS q;
2082  q 
2083 ---
2084  1
2085  2
2086 (2 rows)
2087
2088 SELECT q FROM svals('a=>{b=>c, c=>b}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,1}') AS q;
2089  q 
2090 ---
2091  2
2092 (1 row)
2093
2094 SELECT q FROM svals('a=>{b=>c, c=>b, 1=>first}, b=>{1,2}, c=>cc, 1=>first'::hstore, '{NULL,1}') AS q;
2095    q   
2096 -------
2097  first
2098  2
2099 (2 rows)
2100
2101 --each
2102 SELECT * FROM each('a=>b, c=>cc'::hstore) AS q;
2103  key | value 
2104 -----+-------
2105  a   | b
2106  c   | cc
2107 (2 rows)
2108
2109 SELECT * FROM each('[a, b, c, cc]'::hstore) AS q;
2110  key | value 
2111 -----+-------
2112      | a
2113      | b
2114      | c
2115      | cc
2116 (4 rows)
2117
2118 SELECT * FROM each('a=>{b=>c, c=>b, 1=>first}, b=>{1,2}, c=>cc, 1=>first, n=>null'::hstore) AS q;
2119  key |              value               
2120 -----+----------------------------------
2121  1   | first
2122  a   | "1"=>"first", "b"=>"c", "c"=>"b"
2123  b   | [1, 2]
2124  c   | cc
2125  n   | 
2126 (5 rows)
2127
2128 SELECT * FROM each_hstore('a=>b, c=>cc'::hstore) AS q;
2129  key | value 
2130 -----+-------
2131  a   | "b"
2132  c   | "cc"
2133 (2 rows)
2134
2135 SELECT * FROM each_hstore('[a, b, c, cc]'::hstore) AS q;
2136  key | value 
2137 -----+-------
2138      | "a"
2139      | "b"
2140      | "c"
2141      | "cc"
2142 (4 rows)
2143
2144 SELECT * FROM each_hstore('a=>{b=>c, c=>b, 1=>first}, b=>{1,2}, c=>cc, 1=>first, n=>null'::hstore) AS q;
2145  key |              value               
2146 -----+----------------------------------
2147  1   | "first"
2148  a   | "1"=>"first", "b"=>"c", "c"=>"b"
2149  b   | [1, 2]
2150  c   | "cc"
2151  n   | 
2152 (5 rows)
2153
2154 --decoration
2155 SELECT 'a=>1, b=>{c=>3}, d=>[4,[5]]'::hstore AS h, '[a, {b=>c}, [c, d, e]]'::hstore AS a;
2156                   h                   |                 a                  
2157 --------------------------------------+------------------------------------
2158  "a"=>1, "b"=>{"c"=>3}, "d"=>[4, [5]] | ["a", {"b"=>"c"}, ["c", "d", "e"]]
2159 (1 row)
2160
2161 SET hstore.pretty_print = true;
2162 SELECT 'a=>1, b=>{c=>3}, d=>[4,[5]], e=>[1,2,3,4], f=>g, g=>j'::hstore AS h, 
2163            '[a, {b=>c, c=>d}, [c, d, e, [1,2], h, {f=>g, g=>f}]]'::hstore AS a;
2164      h      |           a            
2165 ------------+------------------------
2166  "a"=>1,   +| [                     +
2167  "b"=>     +|     "a",              +
2168  {         +|     {                 +
2169      "c"=>3+|         "b"=>"c",     +
2170  },        +|         "c"=>"d"      +
2171  "d"=>     +|     },                +
2172  [         +|     [                 +
2173      4,    +|         "c",          +
2174      [     +|         "d",          +
2175          5 +|         "e",          +
2176      ]     +|         [             +
2177  ],        +|             1,        +
2178  "e"=>     +|             2         +
2179  [         +|         ],            +
2180      1,    +|         "h",          +
2181      2,    +|         {             +
2182      3,    +|             "f"=>"g", +
2183      4     +|             "g"=>f    +
2184  ],        +|         }             +
2185  "f"=>"g", +|     ]                 +
2186  "g"=>"j"   | ]
2187 (1 row)
2188
2189 RESET hstore.pretty_print;
2190 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore);
2191                              hstore_print                              
2192 -----------------------------------------------------------------------
2193  "a"=>t, "f"=>t, "t"=>"f", "123"=>"string", "arr"=>[1, 2, 3, "3", "x"]
2194 (1 row)
2195
2196 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, loose := true );
2197                            hstore_print                            
2198 -------------------------------------------------------------------
2199  "a"=>t, "f"=>t, "t"=>f, "123"=>"string", "arr"=>[1, 2, 3, 3, "x"]
2200 (1 row)
2201
2202 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, root_hash_decorated := true );
2203                               hstore_print                               
2204 -------------------------------------------------------------------------
2205  {"a"=>t, "f"=>t, "t"=>"f", "123"=>"string", "arr"=>[1, 2, 3, "3", "x"]}
2206 (1 row)
2207
2208 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, array_curly_braces := true );
2209                              hstore_print                              
2210 -----------------------------------------------------------------------
2211  "a"=>t, "f"=>t, "t"=>"f", "123"=>"string", "arr"=>{1, 2, 3, "3", "x"}
2212 (1 row)
2213
2214 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, json := true );
2215                                 hstore_print                                 
2216 -----------------------------------------------------------------------------
2217  "a": true, "f": true, "t": "f", "123": "string", "arr": [1, 2, 3, "3", "x"]
2218 (1 row)
2219
2220 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, json := true, loose := true );
2221                                 hstore_print                                 
2222 -----------------------------------------------------------------------------
2223  "a": true, "f": true, "t": false, "123": "string", "arr": [1, 2, 3, 3, "x"]
2224 (1 row)
2225
2226 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, json := true, root_hash_decorated := true );
2227                                  hstore_print                                  
2228 -------------------------------------------------------------------------------
2229  {"a": true, "f": true, "t": "f", "123": "string", "arr": [1, 2, 3, "3", "x"]}
2230 (1 row)
2231
2232 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, json := true, array_curly_braces := true );
2233                                 hstore_print                                 
2234 -----------------------------------------------------------------------------
2235  "a": true, "f": true, "t": "f", "123": "string", "arr": {1, 2, 3, "3", "x"}
2236 (1 row)
2237
2238 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, loose := true, root_hash_decorated := true );
2239                             hstore_print                             
2240 ---------------------------------------------------------------------
2241  {"a"=>t, "f"=>t, "t"=>f, "123"=>"string", "arr"=>[1, 2, 3, 3, "x"]}
2242 (1 row)
2243
2244 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, loose := true, array_curly_braces := true );
2245                            hstore_print                            
2246 -------------------------------------------------------------------
2247  "a"=>t, "f"=>t, "t"=>f, "123"=>"string", "arr"=>{1, 2, 3, 3, "x"}
2248 (1 row)
2249
2250 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, root_hash_decorated := true, array_curly_braces := true );
2251                               hstore_print                               
2252 -------------------------------------------------------------------------
2253  {"a"=>t, "f"=>t, "t"=>"f", "123"=>"string", "arr"=>{1, 2, 3, "3", "x"}}
2254 (1 row)
2255
2256 SELECT hstore_print('a=>t, f=>t, t=>"f", arr=>[1,2,3,"3",x], 123=>string'::hstore, root_hash_decorated := true, array_curly_braces := true, loose := true);
2257                             hstore_print                             
2258 ---------------------------------------------------------------------
2259  {"a"=>t, "f"=>t, "t"=>f, "123"=>"string", "arr"=>{1, 2, 3, 3, "x"}}
2260 (1 row)
2261