Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4e911c8

Browse files
committed
Fix SPI example to reflect new-style calling convention for textout().
1 parentb1065f8 commit4e911c8

File tree

1 file changed

+44
-37
lines changed

1 file changed

+44
-37
lines changed

‎doc/src/sgml/spi.sgml

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2691,7 +2691,7 @@ are invisible to the query scan. For example, in query
26912691

26922692
INSERT INTO a SELECT * FROM a
26932693

2694-
tuples inserted are invisible for SELECT' scan. In effect, this
2694+
tuples inserted are invisible for SELECT's scan. In effect, this
26952695
duplicates the database table within itself (subject to unique index
26962696
rules, of course) without recursing.
26972697
</Para>
@@ -2708,7 +2708,7 @@ of Q) or after Q is done.
27082708

27092709
<Para>
27102710
This example of SPI usage demonstrates the visibility rule.
2711-
There are more complex examples ininsrc/test/regress/regress.c and
2711+
There are more complex examples in src/test/regress/regress.c and
27122712
in contrib/spi.
27132713
</Para>
27142714

@@ -2719,47 +2719,54 @@ query using SPI_exec and returns the number of tuples for which the query
27192719
executed:
27202720

27212721
<ProgramListing>
2722-
#include "executor/spi.h"/* this is what you need to work with SPI */
2722+
#include "executor/spi.h"/* this is what you need to work with SPI */
27232723

27242724
int execq(text *sql, int cnt);
27252725

27262726
int
27272727
execq(text *sql, int cnt)
27282728
{
2729-
int ret;
2730-
int proc = 0;
2731-
2732-
SPI_connect();
2733-
2734-
ret = SPI_exec(textout(sql), cnt);
2735-
2736-
proc = SPI_processed;
2737-
/*
2738-
* If this is SELECT and some tuple(s) fetched -
2739-
* returns tuples to the caller via elog (NOTICE).
2740-
*/
2741-
if ( ret == SPI_OK_SELECT && SPI_processed > 0 )
2742-
{
2743-
TupleDesc tupdesc = SPI_tuptable->tupdesc;
2744-
SPITupleTable *tuptable = SPI_tuptable;
2745-
char buf[8192];
2746-
int i;
2747-
2748-
for (ret = 0; ret < proc; ret++)
2749-
{
2750-
HeapTuple tuple = tuptable->vals[ret];
2751-
2752-
for (i = 1, buf[0] = 0; i <= tupdesc->natts; i++)
2753-
sprintf(buf + strlen (buf), " %s%s",
2754-
SPI_getvalue(tuple, tupdesc, i),
2755-
(i == tupdesc->natts) ? " " : " |");
2756-
elog (NOTICE, "EXECQ: %s", buf);
2757-
}
2758-
}
2759-
2760-
SPI_finish();
2761-
2762-
return (proc);
2729+
char *query;
2730+
int ret;
2731+
int proc;
2732+
2733+
/* Convert given TEXT object to a C string */
2734+
query = DatumGetCString(DirectFunctionCall1(textout,
2735+
PointerGetDatum(sql)));
2736+
2737+
SPI_connect();
2738+
2739+
ret = SPI_exec(query, cnt);
2740+
2741+
proc = SPI_processed;
2742+
/*
2743+
* If this is SELECT and some tuple(s) fetched -
2744+
* returns tuples to the caller via elog (NOTICE).
2745+
*/
2746+
if ( ret == SPI_OK_SELECT && SPI_processed > 0 )
2747+
{
2748+
TupleDesc tupdesc = SPI_tuptable->tupdesc;
2749+
SPITupleTable *tuptable = SPI_tuptable;
2750+
char buf[8192];
2751+
int i,j;
2752+
2753+
for (j = 0; j < proc; j++)
2754+
{
2755+
HeapTuple tuple = tuptable->vals[j];
2756+
2757+
for (i = 1, buf[0] = 0; i <= tupdesc->natts; i++)
2758+
sprintf(buf + strlen (buf), " %s%s",
2759+
SPI_getvalue(tuple, tupdesc, i),
2760+
(i == tupdesc->natts) ? " " : " |");
2761+
elog (NOTICE, "EXECQ: %s", buf);
2762+
}
2763+
}
2764+
2765+
SPI_finish();
2766+
2767+
pfree(query);
2768+
2769+
return (proc);
27632770
}
27642771
</ProgramListing>
27652772
</Para>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp