]> granicus.if.org Git - postgresql/commitdiff
Added new SQL function setval(seq,val,bool) to restore is_called as well as value
authorPhilip Warner <pjw@rhyme.com.au>
Wed, 11 Oct 2000 15:31:34 +0000 (15:31 +0000)
committerPhilip Warner <pjw@rhyme.com.au>
Wed, 11 Oct 2000 15:31:34 +0000 (15:31 +0000)
(will be used in a future pg_dump).

src/backend/commands/sequence.c
src/include/catalog/pg_proc.h
src/include/commands/sequence.h

index d623c0630e048d97fd673ce6cdc72d475791cfeb..56763a35a17636dbbb823856ddb2689f9912f28d 100644 (file)
@@ -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);
 }
 
index 920aaa442d0467ffb3010e6ba1c673322b5fe9ff..66ffa87e47308a29c86bc5da4fe0fc2e1eef4e8e 100644 (file)
@@ -7,7 +7,7 @@
  * 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
@@ -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");
 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)");
index 4d1f846fa9a9cdef83c1530acd30dc6200d51e3c..0429d2295324b28721d5cf6691a55a73d8385f5a 100644 (file)
@@ -30,6 +30,7 @@
 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);