aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/sequence.c
diff options
context:
space:
mode:
authorPhilip Warner <pjw@rhyme.com.au>2000-10-11 15:31:34 +0000
committerPhilip Warner <pjw@rhyme.com.au>2000-10-11 15:31:34 +0000
commit6fec21609b814210cee4f22813e524893b85b6b0 (patch)
tree290edb9522012a8d16d89edc90668f37dc79db1c /src/backend/commands/sequence.c
parent8e72a8782c8c6952285010030a8d96efdd529082 (diff)
downloadpostgresql-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.c34
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);
}