@@ -60,7 +60,7 @@ static int_SPI_begin_call(bool execmem);
6060static int _SPI_end_call (bool procmem );
6161static MemoryContext _SPI_execmem (void );
6262static MemoryContext _SPI_procmem (void );
63- static bool _SPI_checktuples (bool isRetrieveIntoRelation );
63+ static bool _SPI_checktuples (void );
6464
6565#ifdef SPI_EXECUTOR_STATS
6666extern int ShowExecutorStats ;
@@ -774,19 +774,16 @@ _SPI_execute_plan(_SPI_plan * plan, Datum * Values, char *Nulls, int tcount)
774774static int
775775_SPI_pquery (QueryDesc * queryDesc ,EState * state ,int tcount )
776776{
777- Query * parseTree ;
778- Plan * plan ;
779- int operation ;
777+ Query * parseTree = queryDesc -> parsetree ;
778+ Plan * plan = queryDesc -> plantree ;
779+ int operation = queryDesc -> operation ;
780+ CommandDest dest = queryDesc -> dest ;
780781TupleDesc tupdesc ;
781782bool isRetrieveIntoPortal = false;
782783bool isRetrieveIntoRelation = false;
783784char * intoName = NULL ;
784785int res ;
785786
786- parseTree = queryDesc -> parsetree ;
787- plan = queryDesc -> plantree ;
788- operation = queryDesc -> operation ;
789-
790787switch (operation )
791788{
792789case CMD_SELECT :
@@ -804,6 +801,7 @@ _SPI_pquery(QueryDesc * queryDesc, EState * state, int tcount)
804801{
805802res = SPI_OK_SELINTO ;
806803isRetrieveIntoRelation = true;
804+ queryDesc -> dest = None ;/* */
807805}
808806break ;
809807case CMD_INSERT :
@@ -844,7 +842,7 @@ _SPI_pquery(QueryDesc * queryDesc, EState * state, int tcount)
844842_SPI_current -> processed = state -> es_processed ;
845843if (operation == CMD_SELECT && queryDesc -> dest == SPI )
846844{
847- if (_SPI_checktuples (isRetrieveIntoRelation ))
845+ if (_SPI_checktuples ())
848846elog (FATAL ,"SPI_select: # of processed tuples check failed" );
849847}
850848
@@ -858,11 +856,12 @@ _SPI_pquery(QueryDesc * queryDesc, EState * state, int tcount)
858856}
859857#endif
860858
861- if (queryDesc -> dest == SPI )
859+ if (dest == SPI )
862860{
863861SPI_processed = _SPI_current -> processed ;
864862SPI_tuptable = _SPI_current -> tuptable ;
865863}
864+ queryDesc -> dest = dest ;
866865
867866return (res );
868867
@@ -898,7 +897,7 @@ _SPI_fetch(FetchStmt * stmt)
898897 * context */
899898
900899_SPI_current -> processed = state -> es_processed ;
901- if (_SPI_checktuples (false ))
900+ if (_SPI_checktuples ())
902901elog (FATAL ,"SPI_fetch: # of processed tuples check failed" );
903902
904903SPI_processed = _SPI_current -> processed ;
@@ -982,7 +981,7 @@ _SPI_end_call(bool procmem)
982981}
983982
984983static bool
985- _SPI_checktuples (bool isRetrieveIntoRelation )
984+ _SPI_checktuples ()
986985{
987986uint32 processed = _SPI_current -> processed ;
988987SPITupleTable * tuptable = _SPI_current -> tuptable ;
@@ -993,15 +992,9 @@ _SPI_checktuples(bool isRetrieveIntoRelation)
993992if (tuptable != NULL )
994993failed = true;
995994}
996- else
997- /* some tuples were processed */
995+ else /* some tuples were processed */
998996{
999997if (tuptable == NULL )/* spi_printtup was not called */
1000- {
1001- if (!isRetrieveIntoRelation )
1002- failed = true;
1003- }
1004- else if (isRetrieveIntoRelation )
1005998failed = true;
1006999else if (processed != (tuptable -> alloced - tuptable -> free ))
10071000failed = true;