diff options
author | Marc G. Fournier <scrappy@hub.org> | 1998-08-25 21:25:46 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1998-08-25 21:25:46 +0000 |
commit | 8e9d69d6ac76001458f0c190a35990b23abf81de (patch) | |
tree | f1b2ec4d5991f2963169b8964efcadc21d41bfd0 /src/backend/parser/parse_func.c | |
parent | 88b17d9c56bfd0b6d35b824e9edbce29ae241c33 (diff) | |
download | postgresql-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.c | 12 |
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); |