@@ -4645,15 +4645,16 @@ CREATE FUNCTION execq(text, integer) RETURNS int8
4645
4645
=> INSERT INTO a VALUES (execq('INSERT INTO a VALUES (0)', 0));
4646
4646
INSERT 0 1
4647
4647
=> SELECT execq('SELECT * FROM a', 0);
4648
- INFO: EXECQ: 0 -- inserted by execq
4649
- INFO: EXECQ: 1 -- returned by execq and inserted by upper INSERT
4648
+ INFO: EXECQ: 0 <lineannotation> -- inserted by execq</lineannotation>
4649
+ INFO: EXECQ: 1 <lineannotation> -- returned by execq and inserted by upper INSERT</lineannotation>
4650
4650
4651
4651
execq
4652
4652
-------
4653
4653
2
4654
4654
(1 row)
4655
4655
4656
- => SELECT execq('INSERT INTO a SELECT x + 2 FROM a', 1);
4656
+ => SELECT execq('INSERT INTO a SELECT x + 2 FROM a RETURNING *', 1);
4657
+ INFO: EXECQ: 2 <lineannotation>-- 0 + 2, then execution was stopped by count</lineannotation>
4657
4658
execq
4658
4659
-------
4659
4660
1
@@ -4662,21 +4663,38 @@ INFO: EXECQ: 1 -- returned by execq and inserted by upper INSERT
4662
4663
=> SELECT execq('SELECT * FROM a', 10);
4663
4664
INFO: EXECQ: 0
4664
4665
INFO: EXECQ: 1
4665
- INFO: EXECQ: 2 -- 0 + 2, only one row inserted - as specified
4666
+ INFO: EXECQ: 2
4667
+
4668
+ execq
4669
+ -------
4670
+ 3 <lineannotation>-- 10 is the max value only, 3 is the real number of rows</lineannotation>
4671
+ (1 row)
4666
4672
4673
+ => SELECT execq('INSERT INTO a SELECT x + 10 FROM a', 1);
4667
4674
execq
4668
4675
-------
4669
- 3 -- 10 is the max value only, 3 is the real number of rows
4676
+ 3 <lineannotation> -- all rows processed; count does not stop it, because nothing is returned</lineannotation>
4670
4677
(1 row)
4671
4678
4679
+ => SELECT * FROM a;
4680
+ x
4681
+ ----
4682
+ 0
4683
+ 1
4684
+ 2
4685
+ 10
4686
+ 11
4687
+ 12
4688
+ (6 rows)
4689
+
4672
4690
=> DELETE FROM a;
4673
- DELETE 3
4691
+ DELETE 6
4674
4692
=> INSERT INTO a VALUES (execq('SELECT * FROM a', 0) + 1);
4675
4693
INSERT 0 1
4676
4694
=> SELECT * FROM a;
4677
4695
x
4678
4696
---
4679
- 1 -- no rows in a (0 ) + 1
4697
+ 1 <lineannotation> -- 0 ( no rows in a) + 1</lineannotation>
4680
4698
(1 row)
4681
4699
4682
4700
=> INSERT INTO a VALUES (execq('SELECT * FROM a', 0) + 1);
@@ -4686,15 +4704,16 @@ INSERT 0 1
4686
4704
x
4687
4705
---
4688
4706
1
4689
- 2 -- there was one row in a + 1
4707
+ 2 <lineannotation> -- 1 ( there was one row in a) + 1</lineannotation>
4690
4708
(2 rows)
4691
4709
4692
- -- This demonstrates the data changes visibility rule:
4710
+ <lineannotation>-- This demonstrates the data changes visibility rule.</lineannotation>
4711
+ <lineannotation>-- execq is called twice and sees different numbers of rows each time:</lineannotation>
4693
4712
4694
4713
=> INSERT INTO a SELECT execq('SELECT * FROM a', 0) * x FROM a;
4695
- INFO: EXECQ: 1
4714
+ INFO: EXECQ: 1 <lineannotation>-- results from first execq</lineannotation>
4696
4715
INFO: EXECQ: 2
4697
- INFO: EXECQ: 1
4716
+ INFO: EXECQ: 1 <lineannotation>-- results from second execq</lineannotation>
4698
4717
INFO: EXECQ: 2
4699
4718
INFO: EXECQ: 2
4700
4719
INSERT 0 2
@@ -4703,10 +4722,9 @@ INSERT 0 2
4703
4722
---
4704
4723
1
4705
4724
2
4706
- 2 -- 2 rows * 1 (x in first row)
4707
- 6 -- 3 rows (2 + 1 just inserted) * 2 (x in second row)
4708
- (4 rows) ^^^^^^
4709
- rows visible to execq() in different invocations
4725
+ 2 <lineannotation>-- 2 rows * 1 (x in first row)</lineannotation>
4726
+ 6 <lineannotation>-- 3 rows (2 + 1 just inserted) * 2 (x in second row)</lineannotation>
4727
+ (4 rows)
4710
4728
</programlisting>
4711
4729
</para>
4712
4730
</sect1>
0 commit comments