8
8
*
9
9
*
10
10
* IDENTIFICATION
11
- * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.149 2003/10/12 23:19:21 momjian Exp $
11
+ * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.150 2003/10/13 22:47:15 momjian Exp $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -699,8 +699,7 @@ ExecMakeFunctionResult(FuncExprState *fcache,
699
699
List * arguments = fcache -> args ;
700
700
Datum result ;
701
701
FunctionCallInfoData fcinfo ;
702
- /* for functions returning sets, must be aligned as Node, so use makeNode */
703
- ReturnSetInfo * rsinfo = makeNode (ReturnSetInfo );
702
+ ReturnSetInfo rsinfo ; /* for functions returning sets */
704
703
ExprDoneCond argDone ;
705
704
bool hasSetArg ;
706
705
int i ;
@@ -747,15 +746,15 @@ ExecMakeFunctionResult(FuncExprState *fcache,
747
746
*/
748
747
if (fcache -> func .fn_retset )
749
748
{
750
- fcinfo .resultinfo = (Node * ) rsinfo ;
751
- rsinfo -> type = T_ReturnSetInfo ;
752
- rsinfo -> econtext = econtext ;
753
- rsinfo -> expectedDesc = NULL ;
754
- rsinfo -> allowedModes = (int ) SFRM_ValuePerCall ;
755
- rsinfo -> returnMode = SFRM_ValuePerCall ;
749
+ fcinfo .resultinfo = (Node * ) & rsinfo ;
750
+ rsinfo . type = T_ReturnSetInfo ;
751
+ rsinfo . econtext = econtext ;
752
+ rsinfo . expectedDesc = NULL ;
753
+ rsinfo . allowedModes = (int ) SFRM_ValuePerCall ;
754
+ rsinfo . returnMode = SFRM_ValuePerCall ;
756
755
/* isDone is filled below */
757
- rsinfo -> setResult = NULL ;
758
- rsinfo -> setDesc = NULL ;
756
+ rsinfo . setResult = NULL ;
757
+ rsinfo . setDesc = NULL ;
759
758
}
760
759
761
760
/*
@@ -804,10 +803,10 @@ ExecMakeFunctionResult(FuncExprState *fcache,
804
803
if (callit )
805
804
{
806
805
fcinfo .isnull = false;
807
- rsinfo -> isDone = ExprSingleResult ;
806
+ rsinfo . isDone = ExprSingleResult ;
808
807
result = FunctionCallInvoke (& fcinfo );
809
808
* isNull = fcinfo .isnull ;
810
- * isDone = rsinfo -> isDone ;
809
+ * isDone = rsinfo . isDone ;
811
810
}
812
811
else
813
812
{
@@ -904,7 +903,7 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
904
903
TupleDesc tupdesc = NULL ;
905
904
Oid funcrettype ;
906
905
FunctionCallInfoData fcinfo ;
907
- ReturnSetInfo * rsinfo = makeNode ( ReturnSetInfo ); /* must be Node aligned */
906
+ ReturnSetInfo rsinfo ;
908
907
MemoryContext callerContext ;
909
908
MemoryContext oldcontext ;
910
909
TupleTableSlot * slot ;
@@ -993,15 +992,15 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
993
992
* doesn't actually get to see the resultinfo, but set it up anyway
994
993
* because we use some of the fields as our own state variables.
995
994
*/
996
- fcinfo .resultinfo = (Node * ) rsinfo ;
997
- rsinfo -> type = T_ReturnSetInfo ;
998
- rsinfo -> econtext = econtext ;
999
- rsinfo -> expectedDesc = expectedDesc ;
1000
- rsinfo -> allowedModes = (int ) (SFRM_ValuePerCall | SFRM_Materialize );
1001
- rsinfo -> returnMode = SFRM_ValuePerCall ;
995
+ fcinfo .resultinfo = (Node * ) & rsinfo ;
996
+ rsinfo . type = T_ReturnSetInfo ;
997
+ rsinfo . econtext = econtext ;
998
+ rsinfo . expectedDesc = expectedDesc ;
999
+ rsinfo . allowedModes = (int ) (SFRM_ValuePerCall | SFRM_Materialize );
1000
+ rsinfo . returnMode = SFRM_ValuePerCall ;
1002
1001
/* isDone is filled below */
1003
- rsinfo -> setResult = NULL ;
1004
- rsinfo -> setDesc = NULL ;
1002
+ rsinfo . setResult = NULL ;
1003
+ rsinfo . setDesc = NULL ;
1005
1004
1006
1005
/*
1007
1006
* Switch to short-lived context for calling the function or
@@ -1029,17 +1028,17 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
1029
1028
if (direct_function_call )
1030
1029
{
1031
1030
fcinfo .isnull = false;
1032
- rsinfo -> isDone = ExprSingleResult ;
1031
+ rsinfo . isDone = ExprSingleResult ;
1033
1032
result = FunctionCallInvoke (& fcinfo );
1034
1033
}
1035
1034
else
1036
1035
{
1037
1036
result = ExecEvalExpr (funcexpr , econtext ,
1038
- & fcinfo .isnull , & rsinfo -> isDone );
1037
+ & fcinfo .isnull , & rsinfo . isDone );
1039
1038
}
1040
1039
1041
1040
/* Which protocol does function want to use? */
1042
- if (rsinfo -> returnMode == SFRM_ValuePerCall )
1041
+ if (rsinfo . returnMode == SFRM_ValuePerCall )
1043
1042
{
1044
1043
/*
1045
1044
* Check for end of result set.
@@ -1048,7 +1047,7 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
1048
1047
* tupdesc or tuplestore (since we can't get a tupdesc in the
1049
1048
* function-returning-tuple case)
1050
1049
*/
1051
- if (rsinfo -> isDone == ExprEndResult )
1050
+ if (rsinfo . isDone == ExprEndResult )
1052
1051
break ;
1053
1052
1054
1053
/*
@@ -1094,8 +1093,8 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
1094
1093
}
1095
1094
tupstore = tuplestore_begin_heap (true, false, SortMem );
1096
1095
MemoryContextSwitchTo (oldcontext );
1097
- rsinfo -> setResult = tupstore ;
1098
- rsinfo -> setDesc = tupdesc ;
1096
+ rsinfo . setResult = tupstore ;
1097
+ rsinfo . setDesc = tupdesc ;
1099
1098
}
1100
1099
1101
1100
/*
@@ -1128,13 +1127,13 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
1128
1127
/*
1129
1128
* Are we done?
1130
1129
*/
1131
- if (rsinfo -> isDone != ExprMultipleResult )
1130
+ if (rsinfo . isDone != ExprMultipleResult )
1132
1131
break ;
1133
1132
}
1134
- else if (rsinfo -> returnMode == SFRM_Materialize )
1133
+ else if (rsinfo . returnMode == SFRM_Materialize )
1135
1134
{
1136
1135
/* check we're on the same page as the function author */
1137
- if (!first_time || rsinfo -> isDone != ExprSingleResult )
1136
+ if (!first_time || rsinfo . isDone != ExprSingleResult )
1138
1137
ereport (ERROR ,
1139
1138
(errcode (ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED ),
1140
1139
errmsg ("table-function protocol for materialize mode was not followed" )));
@@ -1145,16 +1144,16 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
1145
1144
ereport (ERROR ,
1146
1145
(errcode (ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED ),
1147
1146
errmsg ("unrecognized table-function returnMode: %d" ,
1148
- (int ) rsinfo -> returnMode )));
1147
+ (int ) rsinfo . returnMode )));
1149
1148
1150
1149
first_time = false;
1151
1150
}
1152
1151
1153
1152
MemoryContextSwitchTo (callerContext );
1154
1153
1155
1154
/* The returned pointers are those in rsinfo */
1156
- * returnDesc = rsinfo -> setDesc ;
1157
- return rsinfo -> setResult ;
1155
+ * returnDesc = rsinfo . setDesc ;
1156
+ return rsinfo . setResult ;
1158
1157
}
1159
1158
1160
1159
0 commit comments