@@ -109,9 +109,9 @@ static void EvalPlanQualStart(EPQState *epqstate, EState *parentestate,
109109 * to be changed, however.
110110 */
111111#define GetInsertedColumns (relinfo , estate ) \
112- (rt_fetch ((relinfo)->ri_RangeTableIndex, ( estate)->es_range_table )->insertedCols)
112+ (exec_rt_fetch ((relinfo)->ri_RangeTableIndex, estate)->insertedCols)
113113#define GetUpdatedColumns (relinfo , estate ) \
114- (rt_fetch ((relinfo)->ri_RangeTableIndex, ( estate)->es_range_table )->updatedCols)
114+ (exec_rt_fetch ((relinfo)->ri_RangeTableIndex, estate)->updatedCols)
115115
116116/* end of local decls */
117117
@@ -823,15 +823,7 @@ InitPlan(QueryDesc *queryDesc, int eflags)
823823 /*
824824 * initialize the node's execution state
825825 */
826- estate -> es_range_table = rangeTable ;
827-
828- /*
829- * Allocate an array to store an open Relation corresponding to each
830- * rangeTable item, and initialize entries to NULL. Relations are opened
831- * and stored here as needed.
832- */
833- estate -> es_relations = (Relation * ) palloc0 (list_length (rangeTable ) *
834- sizeof (Relation ));
826+ ExecInitRangeTable (estate , rangeTable );
835827
836828 estate -> es_plannedstmt = plannedstmt ;
837829
@@ -918,9 +910,9 @@ InitPlan(QueryDesc *queryDesc, int eflags)
918910 resultRelIndex ))
919911 {
920912 Relation resultRelDesc ;
913+ Oid reloid = exec_rt_fetch (resultRelIndex , estate )-> relid ;
921914
922- resultRelDesc = heap_open (getrelid (resultRelIndex , rangeTable ),
923- NoLock );
915+ resultRelDesc = heap_open (reloid , NoLock );
924916 Assert (CheckRelationLockedByMe (resultRelDesc , RowExclusiveLock , true));
925917 heap_close (resultRelDesc , NoLock );
926918 }
@@ -962,7 +954,7 @@ InitPlan(QueryDesc *queryDesc, int eflags)
962954 continue ;
963955
964956 /* get relation's OID (will produce InvalidOid if subquery) */
965- relid = getrelid (rc -> rti , rangeTable ) ;
957+ relid = exec_rt_fetch (rc -> rti , estate ) -> relid ;
966958
967959 switch (rc -> markType )
968960 {
@@ -1619,8 +1611,8 @@ static void
16191611ExecEndPlan (PlanState * planstate , EState * estate )
16201612{
16211613 ResultRelInfo * resultRelInfo ;
1622- int num_relations ;
1623- int i ;
1614+ Index num_relations ;
1615+ Index i ;
16241616 ListCell * l ;
16251617
16261618 /*
@@ -1661,7 +1653,7 @@ ExecEndPlan(PlanState *planstate, EState *estate)
16611653 * close whatever rangetable Relations have been opened. We did not
16621654 * acquire locks in ExecGetRangeTableRelation, so don't release 'em here.
16631655 */
1664- num_relations = list_length ( estate -> es_range_table ) ;
1656+ num_relations = estate -> es_range_table_size ;
16651657 for (i = 0 ; i < num_relations ; i ++ )
16661658 {
16671659 if (estate -> es_relations [i ])
@@ -3087,7 +3079,7 @@ EvalPlanQualBegin(EPQState *epqstate, EState *parentestate)
30873079 /*
30883080 * We already have a suitable child EPQ tree, so just reset it.
30893081 */
3090- int rtsize = list_length ( parentestate -> es_range_table ) ;
3082+ Index rtsize = parentestate -> es_range_table_size ;
30913083 PlanState * planstate = epqstate -> planstate ;
30923084
30933085 MemSet (estate -> es_epqScanDone , 0 , rtsize * sizeof (bool ));
@@ -3136,11 +3128,11 @@ static void
31363128EvalPlanQualStart (EPQState * epqstate , EState * parentestate , Plan * planTree )
31373129{
31383130 EState * estate ;
3139- int rtsize ;
3131+ Index rtsize ;
31403132 MemoryContext oldcontext ;
31413133 ListCell * l ;
31423134
3143- rtsize = list_length ( parentestate -> es_range_table ) ;
3135+ rtsize = parentestate -> es_range_table_size ;
31443136
31453137 epqstate -> estate = estate = CreateExecutorState ();
31463138
@@ -3164,6 +3156,8 @@ EvalPlanQualStart(EPQState *epqstate, EState *parentestate, Plan *planTree)
31643156 estate -> es_snapshot = parentestate -> es_snapshot ;
31653157 estate -> es_crosscheck_snapshot = parentestate -> es_crosscheck_snapshot ;
31663158 estate -> es_range_table = parentestate -> es_range_table ;
3159+ estate -> es_range_table_array = parentestate -> es_range_table_array ;
3160+ estate -> es_range_table_size = parentestate -> es_range_table_size ;
31673161 estate -> es_relations = parentestate -> es_relations ;
31683162 estate -> es_plannedstmt = parentestate -> es_plannedstmt ;
31693163 estate -> es_junkFilter = parentestate -> es_junkFilter ;
0 commit comments