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

Commit0d0254d

Browse files
committed
SPI manager.
1 parent3152996 commit0d0254d

File tree

3 files changed

+633
-18
lines changed

3 files changed

+633
-18
lines changed

‎src/backend/executor/functions.c

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.6 1997/08/12 22:52:35 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.7 1997/08/29 09:02:50 vadim Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -365,9 +365,19 @@ postquel_execute(execution_state *es,
365365
Datum
366366
postquel_function(Func*funcNode,char**args,bool*isNull,bool*isDone)
367367
{
368-
execution_state*es;
369-
Datumresult=0;
370-
FunctionCachePtrfcache=funcNode->func_fcache;
368+
execution_state*es;
369+
Datumresult=0;
370+
FunctionCachePtrfcache=funcNode->func_fcache;
371+
CommandIdsavedId;
372+
373+
/*
374+
* Before we start do anything we must save CurrentScanCommandId
375+
* to restore it before return to upper Executor. Also, we have to
376+
* set CurrentScanCommandId equal to CurrentCommandId.
377+
*- vadim 08/29/97
378+
*/
379+
savedId=GetScanCommandId ();
380+
SetScanCommandId (GetCurrentCommandId ());
371381

372382
es= (execution_state*)fcache->func_state;
373383
if (es==NULL)
@@ -401,22 +411,23 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
401411
* If we've gone through every command in this function, we are done.
402412
*/
403413
if (es== (execution_state*)NULL)
414+
{
415+
/*
416+
* Reset the execution states to start over again
417+
*/
418+
es= (execution_state*)fcache->func_state;
419+
while (es)
404420
{
405-
/*
406-
* Reset the execution states to start over again
407-
*/
408-
es= (execution_state*)fcache->func_state;
409-
while (es)
410-
{
411-
es->status=F_EXEC_START;
412-
es=es->next;
413-
}
414-
/*
415-
* Let caller know we're finished.
416-
*/
417-
*isDone= true;
418-
return (fcache->oneResult) ?result : (Datum)NULL;
421+
es->status=F_EXEC_START;
422+
es=es->next;
419423
}
424+
/*
425+
* Let caller know we're finished.
426+
*/
427+
*isDone= true;
428+
SetScanCommandId (savedId);
429+
return (fcache->oneResult) ?result : (Datum)NULL;
430+
}
420431
/*
421432
* If we got a result from a command within the function it has
422433
* to be the final command. All others shouldn't be returing
@@ -425,5 +436,6 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
425436
Assert (LAST_POSTQUEL_COMMAND(es) );
426437
*isDone= false;
427438

439+
SetScanCommandId (savedId);
428440
returnresult;
429441
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp