> Hmmm,.... is mysql's last_insert_id behaviour really that much to ask
> for?
Come to think of it,.... maybe the attached last_insert_id() patch is a
better option. Actually copying the behaviour of mysql's counterpart.
... John
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.221
diff -c -r1.221 func.sgml
*** doc/src/sgml/func.sgml 26 Oct 2004 22:16:11 -0000 1.221
--- doc/src/sgml/func.sgml 8 Nov 2004 01:48:33 -0000
***************
*** 6348,6353 ****
--- 6348,6356 ----
<primary>currval</primary>
</indexterm>
<indexterm>
+ <primary>last_insert_id</primary>
+ </indexterm>
+ <indexterm>
<primary>setval</primary>
</indexterm>
***************
*** 6382,6387 ****
--- 6385,6395 ----
<entry>Return value most recently obtained with <function>nextval</function></entry>
</row>
<row>
+ <entry><literal><function>last_insert_id</function>()</literal></entry>
+ <entry><type>int64</type></entry>
+ <entry>Return value generated by <function>nextval</function> in the current session for ANY sequence.</entry>
+ </row>
+ <row>
<entry><literal><function>setval</function>(<type>text</type>, <type>bigint</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>Set sequence's current value</entry>
***************
*** 6447,6452 ****
--- 6455,6470 ----
</varlistentry>
<varlistentry>
+ <term><function>last_insert_id</function></term>
+ <listitem>
+ <para>
+ Return the value of last number generated by <function>nextval</function> for ANY sequence.
+ called in the current session.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><function>setval</function></term>
<listitem>
<para>
Index: doc/src/sgml/ref/create_sequence.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v
retrieving revision 1.41
diff -c -r1.41 create_sequence.sgml
*** doc/src/sgml/ref/create_sequence.sgml 12 Jul 2004 05:36:56 -0000 1.41
--- doc/src/sgml/ref/create_sequence.sgml 8 Nov 2004 01:48:33 -0000
***************
*** 49,55 ****
<para>
After a sequence is created, you use the functions
<function>nextval</function>,
! <function>currval</function>, and
<function>setval</function>
to operate on the sequence. These functions are documented in
<xref linkend="functions-sequence">.
--- 49,56 ----
<para>
After a sequence is created, you use the functions
<function>nextval</function>,
! <function>currval</function>,
! <function>last_insert_id</function>, and
<function>setval</function>
to operate on the sequence. These functions are documented in
<xref linkend="functions-sequence">.
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/sequence.c,v
retrieving revision 1.117
diff -c -r1.117 sequence.c
*** src/backend/commands/sequence.c 16 Sep 2004 16:58:28 -0000 1.117
--- src/backend/commands/sequence.c 8 Nov 2004 01:48:33 -0000
***************
*** 68,73 ****
--- 68,74 ----
static SeqTable seqtab = NULL; /* Head of list of SeqTable items */
+ static int64 _last_insert_id = 0;
static void init_sequence(RangeVar *relation,
SeqTable *p_elm, Relation *p_rel);
***************
*** 407,412 ****
--- 408,414 ----
{
elm->last += elm->increment;
relation_close(seqrel, NoLock);
+ _last_insert_id = elm->last;
PG_RETURN_INT64(elm->last);
}
***************
*** 570,576 ****
WriteBuffer(buf);
relation_close(seqrel, NoLock);
!
PG_RETURN_INT64(result);
}
--- 572,579 ----
WriteBuffer(buf);
relation_close(seqrel, NoLock);
!
! _last_insert_id = result;
PG_RETURN_INT64(result);
}
***************
*** 608,613 ****
--- 611,622 ----
PG_RETURN_INT64(result);
}
+ Datum
+ last_insert_id(PG_FUNCTION_ARGS)
+ {
+ PG_RETURN_INT64(_last_insert_id);
+ }
+
/*
* Main internal procedure that handles 2 & 3 arg forms of SETVAL.
*
Index: src/include/catalog/pg_proc.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/catalog/pg_proc.h,v
retrieving revision 1.348
diff -c -r1.348 pg_proc.h
*** src/include/catalog/pg_proc.h 7 Oct 2004 18:38:50 -0000 1.348
--- src/include/catalog/pg_proc.h 8 Nov 2004 01:48:44 -0000
***************
*** 2034,2039 ****
--- 2034,2041 ----
DESCR("sequence next value");
DATA(insert OID = 1575 ( currval PGNSP PGUID 12 f f t f v 1 20 "25" _null_ currval - _null_ ));
DESCR("sequence current value");
+ DATA(insert OID = 1295 ( last_insert_id PGNSP PGUID 12 f f t f v 0 20 "" _null_ last_insert_id - _null_ ));
+ DESCR("last generated sequence value");
DATA(insert OID = 1576 ( setval PGNSP PGUID 12 f f t f v 2 20 "25 20" _null_ setval - _null_ ));
DESCR("set sequence value");
DATA(insert OID = 1765 ( setval PGNSP PGUID 12 f f t f v 3 20 "25 20 16" _null_ setval_and_iscalled - _null_ ));
Index: src/include/commands/sequence.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/commands/sequence.h,v
retrieving revision 1.29
diff -c -r1.29 sequence.h
*** src/include/commands/sequence.h 29 Aug 2004 04:13:05 -0000 1.29
--- src/include/commands/sequence.h 8 Nov 2004 01:48:44 -0000
***************
*** 82,87 ****
--- 82,88 ----
extern Datum nextval(PG_FUNCTION_ARGS);
extern Datum currval(PG_FUNCTION_ARGS);
+ extern Datum last_insert_id(PG_FUNCTION_ARGS);
extern Datum setval(PG_FUNCTION_ARGS);
extern Datum setval_and_iscalled(PG_FUNCTION_ARGS);
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly