diff --git a/doc/src/sgml/pltcl.sgml b/doc/src/sgml/pltcl.sgml index 0683739f1a..7569846760 100644 --- a/doc/src/sgml/pltcl.sgml +++ b/doc/src/sgml/pltcl.sgml @@ -1,5 +1,5 @@ @@ -394,6 +394,18 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab + + + spi_lastoid + + spi_lastoid + + + Returns the OID of the last query if it was an INSERT. + + + + spi_exec ?-count n? ?-array name? query ?loop-body? diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index 0f847a61bf..3991d9dc1c 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -31,7 +31,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.37 2001/06/09 02:19:07 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.38 2001/08/02 15:45:55 momjian Exp $ * **********************************************************************/ @@ -144,6 +144,8 @@ static void pltcl_set_tuple_values(Tcl_Interp *interp, char *arrayname, int tupno, HeapTuple tuple, TupleDesc tupdesc); static void pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc, Tcl_DString *retval); +static int pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, + int argc, char *argv[]); /* * This routine is a crock, and so is everyplace that calls it. The problem @@ -251,7 +253,9 @@ pltcl_init_interp(Tcl_Interp *interp) pltcl_SPI_prepare, NULL, NULL); Tcl_CreateCommand(interp, "spi_execp", pltcl_SPI_execp, NULL, NULL); - + Tcl_CreateCommand(interp, "spi_lastoid", + pltcl_SPI_lastoid, NULL, NULL); + #ifdef ENABLE_PLTCL_UNKNOWN /************************************************************ * Try to load the unknown procedure from pltcl_modules @@ -2275,6 +2279,21 @@ pltcl_SPI_execp(ClientData cdata, Tcl_Interp *interp, } +/********************************************************************** + * pltcl_SPI_lastoid() - return the last oid. To + * be used after insert queries + **********************************************************************/ +static int +pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp, + int argc, char *argv[]) +{ + char buf[64]; + sprintf(buf,"%u",SPI_lastoid); + Tcl_SetResult(interp, buf, TCL_VOLATILE); + return TCL_OK; +} + + /********************************************************************** * pltcl_set_tuple_values() - Set variables for all attributes * of a given tuple