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
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;
/* 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);
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);
}
* 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
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)");
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);