Changeset: c6da81d895d2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c6da81d895d2
Modified Files:
        sql/server/rel_optimizer.c
Branch: DVframework
Log Message:

pmv: not every query has to prepare pmv.


diffs (72 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -77,6 +77,7 @@ str* get_pkey_bound_to_dataview(str sche
 str form_pkey_select_str(sel_predicate** sps, int num_PERPAD, str* 
pkey_bound_to_dataview, str* select_str_per_pkey);
 str get_non_pkey_select_str(str schema_name, str dmdt_name);
 void prepare_pmv(mvc* sql, sql_rel* ret);
+bit is_pmv_query(sql_rel *rel);
 
 list *discovered_table_pkeys;
 
@@ -1736,6 +1737,51 @@ void compute_and_insert_unavailable_requ
 }
 
 
+bit is_pmv_query(sql_rel *rel)
+{
+       if(rel == NULL)
+               return FALSE;
+       
+       switch (rel->op) {
+               case op_basetable:
+               case op_table:
+               {
+                       sql_table *t;
+                       if(rel->l != NULL)
+                               t = rel->l;
+                       else return FALSE;
+                       if(strcmp(t->base.name, "windowmetadata") == 0)
+                               return TRUE;
+                       else return FALSE;
+               }
+               case op_join: 
+               case op_left: 
+               case op_right: 
+               case op_full: 
+                       
+               case op_semi: 
+               case op_anti: 
+                       
+               case op_union: 
+               case op_inter: 
+               case op_except: 
+                       return (is_pmv_query(rel->l) || is_pmv_query(rel->r));
+               case op_project:
+               case op_select:
+               case op_groupby:
+               case op_topn:
+               case op_sample:
+               case op_ddl:
+                       return is_pmv_query(rel->l);
+               case op_insert:
+               case op_update:
+               case op_delete:
+                       break;
+       }
+       
+       return FALSE;
+}
+
 static bit 
 has_actual_data_table(sql_rel *rel)
 {
@@ -6861,7 +6907,7 @@ rel_optimizer(mvc *sql, sql_rel *rel)
 {
        sql_rel *ret = _rel_optimizer(sql, rel, 0);
        
-       if(!sql->q_in_q)
+       if(!sql->q_in_q && is_pmv_query(rel))
        {
                sql->q_in_q = 1;
                prepare_pmv(sql, ret);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to