diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index d623c0630e..56763a35a1 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -61,6 +61,7 @@ static SeqTable init_sequence(char *caller, char *name); static Form_pg_sequence read_info(char *caller, SeqTable elm, Buffer *buf); static void init_params(CreateSeqStmt *seq, Form_pg_sequence new); static int get_param(DefElem *def); +static void do_setval(char *seqname, int32 next, char iscalled); /* * DefineSequence @@ -317,12 +318,9 @@ currval(PG_FUNCTION_ARGS) PG_RETURN_INT32(result); } -Datum -setval(PG_FUNCTION_ARGS) +static void +do_setval(char *seqname, int32 next, bool iscalled) { - text *seqin = PG_GETARG_TEXT_P(0); - int32 next = PG_GETARG_INT32(1); - char *seqname = get_seq_name(seqin); SeqTable elm; Buffer buf; Form_pg_sequence seq; @@ -356,7 +354,7 @@ setval(PG_FUNCTION_ARGS) /* save info in sequence relation */ seq->last_value = next; /* last fetched number */ - seq->is_called = 't'; + seq->is_called = iscalled ? 't' : 'f'; LockBuffer(buf, BUFFER_LOCK_UNLOCK); @@ -365,6 +363,30 @@ setval(PG_FUNCTION_ARGS) pfree(seqname); +} + +Datum +setval(PG_FUNCTION_ARGS) +{ + text *seqin = PG_GETARG_TEXT_P(0); + int32 next = PG_GETARG_INT32(1); + char *seqname = get_seq_name(seqin); + + do_setval(seqname, next, true); + + PG_RETURN_INT32(next); +} + +Datum +setval_and_iscalled(PG_FUNCTION_ARGS) +{ + text *seqin = PG_GETARG_TEXT_P(0); + int32 next = PG_GETARG_INT32(1); + bool iscalled = PG_GETARG_BOOL(2); + char *seqname = get_seq_name(seqin); + + do_setval(seqname, next, iscalled); + PG_RETURN_INT32(next); } diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 920aaa442d..66ffa87e47 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.168 2000/09/25 12:58:47 momjian Exp $ + * $Id: pg_proc.h,v 1.169 2000/10/11 15:31:13 pjw Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -1978,6 +1978,8 @@ DATA(insert OID = 1575 ( currval PGUID 12 f t f t 1 f 23 "25" 100 0 0 100 cur DESCR("sequence current value"); DATA(insert OID = 1576 ( setval PGUID 12 f t f t 2 f 23 "25 23" 100 0 0 100 setval - )); DESCR("set sequence value"); +DATA(insert OID = 1765 ( setval PGUID 12 f t f t 3 f 23 "25 23 16" 100 0 0 100 setval_and_iscalled - )); +DESCR("set sequence value and iscalled status"); DATA(insert OID = 1579 ( varbit_in PGUID 12 f t t t 1 f 1562 "0" 100 0 0 100 varbit_in - )); DESCR("(internal)"); diff --git a/src/include/commands/sequence.h b/src/include/commands/sequence.h index 4d1f846fa9..0429d22953 100644 --- a/src/include/commands/sequence.h +++ b/src/include/commands/sequence.h @@ -30,6 +30,7 @@ extern Datum nextval(PG_FUNCTION_ARGS); extern Datum currval(PG_FUNCTION_ARGS); extern Datum setval(PG_FUNCTION_ARGS); +extern Datum setval_and_iscalled(PG_FUNCTION_ARGS); extern void DefineSequence(CreateSeqStmt *stmt); extern void CloseSequences(void);