mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Added new SQL function setval(seq,val,bool) to restore is_called as well as value
(will be used in a future pg_dump).
This commit is contained in:
@ -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)
|
|||||||
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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
* 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
|
|||||||
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 @@
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user