mirror of
https://github.com/postgres/postgres.git
synced 2025-05-31 00:01:57 -04:00
I noticed that pltcl didn't have any way to get to SPI_lastoid like plpgsql does.. I started using pltcl a lot because I like to decide when and how my queries get planned.. so I put one together really quick
Sorry I don't have the original around to make a quick diff, but its a very small change... I think this should be in the next release, there's no reason not to have it. its a function with no expected arguments, so you can use it like: spi_exec "INSERT INTO mytable(columns...) VALUES(values..)" set oid [spi_lastoid] spi_exec "SELECT mytable_id from mytable WHERE oid=$oid" It just didn't make sense for me to use plpgsql and pltcl, or just screw them both and use SPI from C. bob@redivi.com
This commit is contained in:
parent
d00b272299
commit
84d2c518fe
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.11 2001/06/09 02:19:07 tgl Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.12 2001/08/02 15:45:55 momjian Exp $
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="pltcl">
|
<chapter id="pltcl">
|
||||||
@ -394,6 +394,18 @@ CREATE TRIGGER trig_mytab_modcount BEFORE INSERT OR UPDATE ON mytab
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<indexterm>
|
||||||
|
<primary>spi_lastoid</primary>
|
||||||
|
</indexterm>
|
||||||
|
<term>spi_lastoid</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Returns the OID of the last query if it was an INSERT.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>spi_exec ?-count <replaceable>n</replaceable>? ?-array <replaceable>name</replaceable>? <replaceable>query</replaceable> ?<replaceable>loop-body</replaceable>?</term>
|
<term>spi_exec ?-count <replaceable>n</replaceable>? ?-array <replaceable>name</replaceable>? <replaceable>query</replaceable> ?<replaceable>loop-body</replaceable>?</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
* ENHANCEMENTS, OR MODIFICATIONS.
|
* ENHANCEMENTS, OR MODIFICATIONS.
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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);
|
int tupno, HeapTuple tuple, TupleDesc tupdesc);
|
||||||
static void pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc,
|
static void pltcl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc,
|
||||||
Tcl_DString *retval);
|
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
|
* This routine is a crock, and so is everyplace that calls it. The problem
|
||||||
@ -251,6 +253,8 @@ pltcl_init_interp(Tcl_Interp *interp)
|
|||||||
pltcl_SPI_prepare, NULL, NULL);
|
pltcl_SPI_prepare, NULL, NULL);
|
||||||
Tcl_CreateCommand(interp, "spi_execp",
|
Tcl_CreateCommand(interp, "spi_execp",
|
||||||
pltcl_SPI_execp, NULL, NULL);
|
pltcl_SPI_execp, NULL, NULL);
|
||||||
|
Tcl_CreateCommand(interp, "spi_lastoid",
|
||||||
|
pltcl_SPI_lastoid, NULL, NULL);
|
||||||
|
|
||||||
#ifdef ENABLE_PLTCL_UNKNOWN
|
#ifdef ENABLE_PLTCL_UNKNOWN
|
||||||
/************************************************************
|
/************************************************************
|
||||||
@ -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
|
* pltcl_set_tuple_values() - Set variables for all attributes
|
||||||
* of a given tuple
|
* of a given tuple
|
||||||
|
Loading…
x
Reference in New Issue
Block a user