aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_func.c
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1998-08-25 21:25:46 +0000
committerMarc G. Fournier <scrappy@hub.org>1998-08-25 21:25:46 +0000
commit8e9d69d6ac76001458f0c190a35990b23abf81de (patch)
treef1b2ec4d5991f2963169b8964efcadc21d41bfd0 /src/backend/parser/parse_func.c
parent88b17d9c56bfd0b6d35b824e9edbce29ae241c33 (diff)
downloadpostgresql-8e9d69d6ac76001458f0c190a35990b23abf81de.tar.gz
postgresql-8e9d69d6ac76001458f0c190a35990b23abf81de.zip
From: Massimo Dal Zotto <dz@cs.unitn.it>
> sequence.patch > > adds the missing setval command to sequences. Owner of sequences > can now set the last value to any value between min and max > without recreating the sequence. This is useful after loading > data from external files.
Diffstat (limited to 'src/backend/parser/parse_func.c')
-rw-r--r--src/backend/parser/parse_func.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index 4b02a1f344f..88871fa3eef 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.25 1998/08/19 02:02:20 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.26 1998/08/25 21:25:42 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -427,7 +427,8 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
* Sequence handling.
*/
if (funcid == F_NEXTVAL ||
- funcid == F_CURRVAL)
+ funcid == F_CURRVAL ||
+ funcid == F_SETVAL)
{
Const *seq;
char *seqrel;
@@ -435,7 +436,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
int32 aclcheck_result = -1;
extern text *lower(text *string);
- Assert(length(fargs) == 1);
+ Assert(length(fargs) == ((funcid == F_SETVAL) ? 2 : 1));
seq = (Const *) lfirst(fargs);
if (!IsA((Node *) seq, Const))
elog(ERROR, "Only constant sequence names are acceptable for function '%s'", funcname);
@@ -445,7 +446,8 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
seqrel = textout(seqname);
if ((aclcheck_result = pg_aclcheck(seqrel, GetPgUserName(),
- ((funcid == F_NEXTVAL) ? ACL_WR : ACL_RD)))
+ (((funcid == F_NEXTVAL) || (funcid == F_SETVAL)) ?
+ ACL_WR : ACL_RD)))
!= ACLCHECK_OK)
elog(ERROR, "%s.%s: %s",
seqrel, funcname, aclcheck_error_strings[aclcheck_result]);
@@ -454,6 +456,8 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
if (funcid == F_NEXTVAL && pstate->p_in_where_clause)
elog(ERROR, "Sequence function nextval is not allowed in WHERE clauses");
+ if (funcid == F_SETVAL && pstate->p_in_where_clause)
+ elog(ERROR, "Sequence function setval is not allowed in WHERE clauses");
}
expr = makeNode(Expr);