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

Commit88dcdf9

Browse files
committed
Call PLy_spi_execute_fetch_result inside the try/catch block
This way errors from fetching tuples are correctly reported as errorsin the SPI call. While at it, avoid palloc(0).Jan Urbański
1 parent52713d0 commit88dcdf9

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

‎src/pl/plpython/plpython.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2978,6 +2978,7 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
29782978
rv;
29792979
PLyPlanObject*plan;
29802980
volatileMemoryContextoldcontext;
2981+
PyObject*ret;
29812982

29822983
if (list!=NULL)
29832984
{
@@ -3014,9 +3015,14 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
30143015
oldcontext=CurrentMemoryContext;
30153016
PG_TRY();
30163017
{
3017-
char*nulls=palloc(nargs*sizeof(char));
3018+
char*nulls;
30183019
volatileintj;
30193020

3021+
if (nargs>0)
3022+
nulls=palloc(nargs*sizeof(char));
3023+
else
3024+
nulls=NULL;
3025+
30203026
for (j=0;j<nargs;j++)
30213027
{
30223028
PyObject*elem;
@@ -3055,8 +3061,10 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
30553061

30563062
rv=SPI_execute_plan(plan->plan,plan->values,nulls,
30573063
PLy_curr_procedure->fn_readonly,limit);
3064+
ret=PLy_spi_execute_fetch_result(SPI_tuptable,SPI_processed,rv);
30583065

3059-
pfree(nulls);
3066+
if (nargs>0)
3067+
pfree(nulls);
30603068
}
30613069
PG_CATCH();
30623070
{
@@ -3099,20 +3107,22 @@ PLy_spi_execute_plan(PyObject *ob, PyObject *list, long limit)
30993107
}
31003108
}
31013109

3102-
returnPLy_spi_execute_fetch_result(SPI_tuptable,SPI_processed,rv);
3110+
returnret;
31033111
}
31043112

31053113
staticPyObject*
31063114
PLy_spi_execute_query(char*query,longlimit)
31073115
{
31083116
intrv;
31093117
volatileMemoryContextoldcontext;
3118+
PyObject*ret;
31103119

31113120
oldcontext=CurrentMemoryContext;
31123121
PG_TRY();
31133122
{
31143123
pg_verifymbstr(query,strlen(query), false);
31153124
rv=SPI_execute(query,PLy_curr_procedure->fn_readonly,limit);
3125+
ret=PLy_spi_execute_fetch_result(SPI_tuptable,SPI_processed,rv);
31163126
}
31173127
PG_CATCH();
31183128
{
@@ -3138,7 +3148,7 @@ PLy_spi_execute_query(char *query, long limit)
31383148
returnNULL;
31393149
}
31403150

3141-
returnPLy_spi_execute_fetch_result(SPI_tuptable,SPI_processed,rv);
3151+
returnret;
31423152
}
31433153

31443154
staticPyObject*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp