1
1
CREATE EXTENSION pg_variables;
2
+ -- Test packages - sanity checks
3
+ SELECT pgv_free();
4
+ pgv_free
5
+ ----------
6
+
7
+ (1 row)
8
+
9
+ SELECT pgv_exists(NULL); -- fail
10
+ ERROR: package name can not be NULL
11
+ SELECT pgv_remove(NULL); -- fail
12
+ ERROR: package name can not be NULL
13
+ SELECT pgv_remove('vars'); -- fail
14
+ ERROR: unrecognized package "vars"
15
+ SELECT pgv_exists('vars111111111111111111111111111111111111111111111111111111111111'); -- fail
16
+ ERROR: name "vars111111111111111111111111111111111111111111111111111111111111" is too long
2
17
-- Integer variables
3
18
SELECT pgv_get_int('vars', 'int1');
4
19
ERROR: unrecognized package "vars"
@@ -553,20 +568,44 @@ SELECT pgv_insert('vars3', 'r1', row(1, 1));
553
568
ERROR: new record structure differs from variable "r1" structure
554
569
SELECT pgv_insert('vars3', 'r1', row('str1', 'str1'));
555
570
ERROR: new record structure differs from variable "r1" structure
556
- SELECT pgv_select('vars3', 'r1') LIMIT 2;
557
- pgv_select
571
+ SELECT pgv_select('vars3', 'r1', ARRAY[[1,2]]); -- fail
572
+ ERROR: searching for elements in multidimensional arrays is not supported
573
+ -- Test variables caching
574
+ SELECT pgv_insert('vars3', 'r2', row(1, 'str1', 'str2'));
575
+ pgv_insert
558
576
------------
559
- (,strNULL)
560
- (1,str11)
561
- (2 rows)
577
+
578
+ (1 row)
562
579
563
- SELECT pgv_select ('vars3', 'r1') LIMIT 2 OFFSET 2 ;
564
- pgv_select
580
+ SELECT pgv_update ('vars3', 'r1', row(3, 'str22'::varchar)) ;
581
+ pgv_update
565
582
------------
566
- (2,)
567
- (0,str00)
568
- (2 rows)
583
+ f
584
+ (1 row)
569
585
586
+ SELECT pgv_update('vars4', 'r1', row(3, 'str22'::varchar)); -- fail
587
+ ERROR: unrecognized package "vars4"
588
+ select pgv_delete('vars3', 'r2', NULL::int);
589
+ pgv_delete
590
+ ------------
591
+ f
592
+ (1 row)
593
+
594
+ select pgv_delete('vars4', 'r2', NULL::int); -- fail
595
+ ERROR: unrecognized package "vars4"
596
+ -- Test NULL values
597
+ SELECT pgv_insert('vars3', 'r2', NULL); -- fail
598
+ ERROR: record argument can not be NULL
599
+ SELECT pgv_update('vars3', 'r2', NULL); -- fail
600
+ ERROR: record argument can not be NULL
601
+ select pgv_delete('vars3', 'r2', NULL::int);
602
+ pgv_delete
603
+ ------------
604
+ f
605
+ (1 row)
606
+
607
+ SELECT pgv_select('vars3', 'r1', NULL::int[]); -- fail
608
+ ERROR: array argument can not be NULL
570
609
SELECT pgv_select('vars3', 'r1');
571
610
pgv_select
572
611
------------
@@ -582,6 +621,8 @@ SELECT pgv_select('vars3', 'r1', 1);
582
621
(1,str11)
583
622
(1 row)
584
623
624
+ SELECT pgv_select('vars3', 'r1', 1::float); -- fail
625
+ ERROR: requested value type differs from variable "r1" key type
585
626
SELECT pgv_select('vars3', 'r1', 0);
586
627
pgv_select
587
628
------------
@@ -612,6 +653,12 @@ SELECT pgv_update('vars3', 'r1', tab) FROM tab;
612
653
t
613
654
(4 rows)
614
655
656
+ SELECT pgv_update('vars3', 'r1', row(4, 'str44'::varchar));
657
+ pgv_update
658
+ ------------
659
+ f
660
+ (1 row)
661
+
615
662
SELECT pgv_select('vars3', 'r1');
616
663
pgv_select
617
664
------------
@@ -657,6 +704,119 @@ SELECT pgv_exists('vars3', 'r1');
657
704
658
705
SELECT pgv_select('vars2', 'j1');
659
706
ERROR: variable "j1" requires "jsonb" value
707
+ -- PGPRO-2601 - Test pgv_select() on TupleDesc of dropped table
708
+ DROP TABLE tab;
709
+ SELECT pgv_select('vars3', 'r1');
710
+ pgv_select
711
+ ------------
712
+ (,strNULL)
713
+ (2,)
714
+ (0,str00)
715
+ (3 rows)
716
+
717
+ -- Tests for SRF's sequential scan of an internal hash table
718
+ DO
719
+ $$BEGIN
720
+ PERFORM pgv_select('vars3', 'r1') LIMIT 2 OFFSET 2;
721
+ PERFORM pgv_select('vars3', 'r3');
722
+ END$$;
723
+ ERROR: unrecognized variable "r3"
724
+ CONTEXT: SQL statement "SELECT pgv_select('vars3', 'r3')"
725
+ PL/pgSQL function inline_code_block line 3 at PERFORM
726
+ -- Check that the hash table was cleaned up after rollback
727
+ SET client_min_messages to 'ERROR';
728
+ SELECT pgv_select('vars3', 'r1', 1);
729
+ pgv_select
730
+ ------------
731
+
732
+ (1 row)
733
+
734
+ SELECT pgv_select('vars3', 'r1') LIMIT 2; -- warning
735
+ pgv_select
736
+ ------------
737
+ (,strNULL)
738
+ (2,)
739
+ (2 rows)
740
+
741
+ SELECT pgv_select('vars3', 'r1') LIMIT 2 OFFSET 2;
742
+ pgv_select
743
+ ------------
744
+ (0,str00)
745
+ (1 row)
746
+
747
+ -- PGPRO-2601 - Test a cursor with the hash table
748
+ BEGIN;
749
+ DECLARE r1_cur CURSOR FOR SELECT pgv_select('vars3', 'r1');
750
+ FETCH 1 in r1_cur;
751
+ pgv_select
752
+ ------------
753
+ (,strNULL)
754
+ (1 row)
755
+
756
+ SELECT pgv_select('vars3', 'r1');
757
+ pgv_select
758
+ ------------
759
+ (,strNULL)
760
+ (2,)
761
+ (0,str00)
762
+ (3 rows)
763
+
764
+ FETCH 1 in r1_cur;
765
+ pgv_select
766
+ ------------
767
+ (2,)
768
+ (1 row)
769
+
770
+ CLOSE r1_cur;
771
+ COMMIT; -- warning
772
+ RESET client_min_messages;
773
+ -- Clean memory after unsuccessful creation of a variable
774
+ SELECT pgv_insert('vars4', 'r1', row('str1', 'str1')); -- fail
775
+ ERROR: could not identify a hash function for type unknown
776
+ SELECT package FROM pgv_stats() WHERE package = 'vars4';
777
+ package
778
+ ---------
779
+ (0 rows)
780
+
781
+ -- Remove package if it is empty
782
+ SELECT pgv_insert('vars4', 'r2', row(1, 'str1', 'str2'));
783
+ pgv_insert
784
+ ------------
785
+
786
+ (1 row)
787
+
788
+ SELECT pgv_remove('vars4', 'r2');
789
+ pgv_remove
790
+ ------------
791
+
792
+ (1 row)
793
+
794
+ SELECT package FROM pgv_stats() WHERE package = 'vars4';
795
+ package
796
+ ---------
797
+ (0 rows)
798
+
799
+ -- Record variables as scalar
800
+ SELECT pgv_set('vars5', 'r1', row(1, 'str11'));
801
+ pgv_set
802
+ ---------
803
+
804
+ (1 row)
805
+
806
+ SELECT pgv_get('vars5', 'r1', NULL::record);
807
+ pgv_get
808
+ -----------
809
+ (1,str11)
810
+ (1 row)
811
+
812
+ SELECT pgv_set('vars5', 'r1', row(1, 'str11'), true); -- fail
813
+ ERROR: variable "r1" already created as NOT TRANSACTIONAL
814
+ SELECT pgv_insert('vars5', 'r1', row(1, 'str11')); -- fail
815
+ ERROR: "r1" isn't a record variable
816
+ SELECT pgv_select('vars5', 'r1'); -- fail
817
+ ERROR: "r1" isn't a record variable
818
+ SELECT pgv_get('vars3', 'r1', NULL::record); -- fail
819
+ ERROR: "r1" isn't a scalar variable
660
820
-- Manipulate variables
661
821
SELECT * FROM pgv_list() order by package, name;
662
822
package | name | is_transactional
@@ -683,15 +843,18 @@ SELECT * FROM pgv_list() order by package, name;
683
843
vars2 | j1 | f
684
844
vars2 | j2 | f
685
845
vars3 | r1 | f
686
- (22 rows)
846
+ vars3 | r2 | f
847
+ vars5 | r1 | f
848
+ (24 rows)
687
849
688
850
SELECT package FROM pgv_stats() order by package;
689
851
package
690
852
---------
691
853
vars
692
854
vars2
693
855
vars3
694
- (3 rows)
856
+ vars5
857
+ (4 rows)
695
858
696
859
SELECT pgv_remove('vars', 'int3');
697
860
ERROR: unrecognized variable "int3"
@@ -745,7 +908,9 @@ SELECT * FROM pgv_list() order by package, name;
745
908
vars | tstz2 | f
746
909
vars | tstzNULL | f
747
910
vars3 | r1 | f
748
- (19 rows)
911
+ vars3 | r2 | f
912
+ vars5 | r1 | f
913
+ (21 rows)
749
914
750
915
SELECT pgv_free();
751
916
pgv_free
0 commit comments