aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorNeil Conway <neilc@samurai.com>2005-06-07 07:08:35 +0000
committerNeil Conway <neilc@samurai.com>2005-06-07 07:08:35 +0000
commit657c098e41b0bb29d30d13d9aa1ac858a07f3493 (patch)
tree6d55885d0e4fd2dbeec8edde846fc33dcebdcebe /src/test
parentc59887f91618b95f42a33d4c62dac35165a7910a (diff)
downloadpostgresql-657c098e41b0bb29d30d13d9aa1ac858a07f3493.tar.gz
postgresql-657c098e41b0bb29d30d13d9aa1ac858a07f3493.zip
Add a function lastval(), which returns the value returned by the
last nextval() or setval() performed by the current session. Update the docs, add regression tests, and bump the catalog version. Patch from Dennis Björklund, various improvements by Neil Conway.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/sequence.out59
-rw-r--r--src/test/regress/sql/sequence.sql27
2 files changed, 86 insertions, 0 deletions
diff --git a/src/test/regress/expected/sequence.out b/src/test/regress/expected/sequence.out
index 040506d4deb..6e919d1f1de 100644
--- a/src/test/regress/expected/sequence.out
+++ b/src/test/regress/expected/sequence.out
@@ -76,3 +76,62 @@ COMMENT ON SEQUENCE asdf IS 'won''t work';
ERROR: relation "asdf" does not exist
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
COMMENT ON SEQUENCE sequence_test2 IS NULL;
+-- Test lastval()
+CREATE SEQUENCE seq;
+SELECT nextval('seq');
+ nextval
+---------
+ 1
+(1 row)
+
+SELECT lastval();
+ lastval
+---------
+ 1
+(1 row)
+
+SELECT setval('seq', 99);
+ setval
+--------
+ 99
+(1 row)
+
+SELECT lastval();
+ lastval
+---------
+ 99
+(1 row)
+
+CREATE SEQUENCE seq2;
+SELECT nextval('seq2');
+ nextval
+---------
+ 1
+(1 row)
+
+SELECT lastval();
+ lastval
+---------
+ 1
+(1 row)
+
+DROP SEQUENCE seq2;
+-- should fail
+SELECT lastval();
+ERROR: lastval is not yet defined in this session
+CREATE USER seq_user;
+BEGIN;
+SET LOCAL SESSION AUTHORIZATION seq_user;
+CREATE SEQUENCE seq3;
+SELECT nextval('seq3');
+ nextval
+---------
+ 1
+(1 row)
+
+REVOKE ALL ON seq3 FROM seq_user;
+SELECT lastval();
+ERROR: permission denied for sequence seq3
+ROLLBACK;
+DROP USER seq_user;
+DROP SEQUENCE seq;
diff --git a/src/test/regress/sql/sequence.sql b/src/test/regress/sql/sequence.sql
index 07f5765faf2..a8b73c02bf8 100644
--- a/src/test/regress/sql/sequence.sql
+++ b/src/test/regress/sql/sequence.sql
@@ -42,3 +42,30 @@ COMMENT ON SEQUENCE asdf IS 'won''t work';
COMMENT ON SEQUENCE sequence_test2 IS 'will work';
COMMENT ON SEQUENCE sequence_test2 IS NULL;
+-- Test lastval()
+CREATE SEQUENCE seq;
+SELECT nextval('seq');
+SELECT lastval();
+SELECT setval('seq', 99);
+SELECT lastval();
+
+CREATE SEQUENCE seq2;
+SELECT nextval('seq2');
+SELECT lastval();
+
+DROP SEQUENCE seq2;
+-- should fail
+SELECT lastval();
+
+CREATE USER seq_user;
+
+BEGIN;
+SET LOCAL SESSION AUTHORIZATION seq_user;
+CREATE SEQUENCE seq3;
+SELECT nextval('seq3');
+REVOKE ALL ON seq3 FROM seq_user;
+SELECT lastval();
+ROLLBACK;
+
+DROP USER seq_user;
+DROP SEQUENCE seq; \ No newline at end of file