Commit 6fec2160 authored by Philip Warner's avatar Philip Warner

Added new SQL function setval(seq,val,bool) to restore is_called as well as value

(will be used in a future pg_dump).
parent 8e72a878
...@@ -61,6 +61,7 @@ static SeqTable init_sequence(char *caller, char *name); ...@@ -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 Form_pg_sequence read_info(char *caller, SeqTable elm, Buffer *buf);
static void init_params(CreateSeqStmt *seq, Form_pg_sequence new); static void init_params(CreateSeqStmt *seq, Form_pg_sequence new);
static int get_param(DefElem *def); static int get_param(DefElem *def);
static void do_setval(char *seqname, int32 next, char iscalled);
/* /*
* DefineSequence * DefineSequence
...@@ -317,12 +318,9 @@ currval(PG_FUNCTION_ARGS) ...@@ -317,12 +318,9 @@ currval(PG_FUNCTION_ARGS)
PG_RETURN_INT32(result); PG_RETURN_INT32(result);
} }
Datum static void
setval(PG_FUNCTION_ARGS) 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; SeqTable elm;
Buffer buf; Buffer buf;
Form_pg_sequence seq; Form_pg_sequence seq;
...@@ -356,7 +354,7 @@ setval(PG_FUNCTION_ARGS) ...@@ -356,7 +354,7 @@ setval(PG_FUNCTION_ARGS)
/* save info in sequence relation */ /* save info in sequence relation */
seq->last_value = next; /* last fetched number */ seq->last_value = next; /* last fetched number */
seq->is_called = 't'; seq->is_called = iscalled ? 't' : 'f';
LockBuffer(buf, BUFFER_LOCK_UNLOCK); LockBuffer(buf, BUFFER_LOCK_UNLOCK);
...@@ -365,6 +363,30 @@ setval(PG_FUNCTION_ARGS) ...@@ -365,6 +363,30 @@ setval(PG_FUNCTION_ARGS)
pfree(seqname); 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); PG_RETURN_INT32(next);
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * 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 ...@@ -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"); 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 - )); 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"); 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 - )); DATA(insert OID = 1579 ( varbit_in PGUID 12 f t t t 1 f 1562 "0" 100 0 0 100 varbit_in - ));
DESCR("(internal)"); DESCR("(internal)");
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
extern Datum nextval(PG_FUNCTION_ARGS); extern Datum nextval(PG_FUNCTION_ARGS);
extern Datum currval(PG_FUNCTION_ARGS); extern Datum currval(PG_FUNCTION_ARGS);
extern Datum setval(PG_FUNCTION_ARGS); extern Datum setval(PG_FUNCTION_ARGS);
extern Datum setval_and_iscalled(PG_FUNCTION_ARGS);
extern void DefineSequence(CreateSeqStmt *stmt); extern void DefineSequence(CreateSeqStmt *stmt);
extern void CloseSequences(void); extern void CloseSequences(void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment