@@ -147,11 +147,12 @@ answer_query_using_materialized_views(PlannerInfo *root, AqumvContext aqumv_cont
147147 RangeTblEntry * rte ;
148148 Oid origin_rel_oid ;
149149 RangeTblEntry * mvrte ;
150- Relation ruleDesc ;
151150 Relation matviewRel ;
152- SysScanDesc rcscan ;
151+ Relation mvauxDesc ;
152+ TupleDesc mvaux_tupdesc ;
153+ SysScanDesc mvscan ;
153154 HeapTuple tup ;
154- Form_pg_rewrite rewrite_tup ;
155+ Form_gp_matview_aux mvaux_tup ;
155156 bool need_close = false;
156157 PlannerInfo * subroot ;
157158 List * mv_final_tlist = NIL ; /* Final target list we want to rewrite to. */
@@ -217,20 +218,24 @@ answer_query_using_materialized_views(PlannerInfo *root, AqumvContext aqumv_cont
217218 if (relkind == RELKIND_FOREIGN_TABLE && !aqumv_allow_foreign_table )
218219 return mv_final_rel ;
219220
220- ruleDesc = table_open (RewriteRelationId , AccessShareLock );
221+ mvauxDesc = table_open (GpMatviewAuxId , AccessShareLock );
222+ mvaux_tupdesc = RelationGetDescr (mvauxDesc );
221223
222- rcscan = systable_beginscan (ruleDesc , InvalidOid , false,
224+ mvscan = systable_beginscan (mvauxDesc , InvalidOid , false,
223225 NULL , 0 , NULL );
224226
225- while (HeapTupleIsValid (tup = systable_getnext (rcscan )))
227+ while (HeapTupleIsValid (tup = systable_getnext (mvscan )))
226228 {
229+ Datum view_query_datum ;
230+ char * view_query_str ;
231+ bool is_null ;
232+
227233 CHECK_FOR_INTERRUPTS ();
228234 if (need_close )
229235 table_close (matviewRel , AccessShareLock );
230236
231- rewrite_tup = (Form_pg_rewrite ) GETSTRUCT (tup );
232-
233- matviewRel = table_open (rewrite_tup -> ev_class , AccessShareLock );
237+ mvaux_tup = (Form_gp_matview_aux ) GETSTRUCT (tup );
238+ matviewRel = table_open (mvaux_tup -> mvoid , AccessShareLock );
234239 need_close = true;
235240
236241 if (!RelationIsPopulated (matviewRel ))
@@ -251,7 +256,14 @@ answer_query_using_materialized_views(PlannerInfo *root, AqumvContext aqumv_cont
251256 /*
252257 * Get a copy of view query to rewrite.
253258 */
254- viewQuery = copyObject (get_matview_query (matviewRel ));
259+ view_query_datum = heap_getattr (tup ,
260+ Anum_gp_matview_aux_view_query ,
261+ mvaux_tupdesc ,
262+ & is_null );
263+
264+ view_query_str = TextDatumGetCString (view_query_datum );
265+ viewQuery = copyObject (stringToNode (view_query_str ));
266+ pfree (view_query_str );
255267 Assert (IsA (viewQuery , Query ));
256268
257269 /*
@@ -620,8 +632,8 @@ answer_query_using_materialized_views(PlannerInfo *root, AqumvContext aqumv_cont
620632 }
621633 if (need_close )
622634 table_close (matviewRel , AccessShareLock );
623- systable_endscan (rcscan );
624- table_close (ruleDesc , AccessShareLock );
635+ systable_endscan (mvscan );
636+ table_close (mvauxDesc , AccessShareLock );
625637
626638 return current_rel ;
627639}
0 commit comments