diff options
author | Philip Warner <pjw@rhyme.com.au> | 2000-10-11 15:31:34 +0000 |
---|---|---|
committer | Philip Warner <pjw@rhyme.com.au> | 2000-10-11 15:31:34 +0000 |
commit | 6fec21609b814210cee4f22813e524893b85b6b0 (patch) | |
tree | 290edb9522012a8d16d89edc90668f37dc79db1c /src/backend/commands/sequence.c | |
parent | 8e72a8782c8c6952285010030a8d96efdd529082 (diff) | |
download | postgresql-6fec21609b814210cee4f22813e524893b85b6b0.tar.gz postgresql-6fec21609b814210cee4f22813e524893b85b6b0.zip |
Added new SQL function setval(seq,val,bool) to restore is_called as well as value
(will be used in a future pg_dump).
Diffstat (limited to 'src/backend/commands/sequence.c')
-rw-r--r-- | src/backend/commands/sequence.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index d623c0630e0..56763a35a17 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); } |