Changeset: eba484468a39 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eba484468a39
Modified Files:
        sql/backends/monet5/sql_rdf.c
        sql/backends/monet5/sql_rdf_jgraph.c
        sql/server/rel_optimizer.c
Branch: rdf
Log Message:

Fix the problem in rel_optimizer in pushing down topn, distinct proj

(before running leakcheck)


diffs (107 lines):

diff --git a/sql/backends/monet5/sql_rdf.c b/sql/backends/monet5/sql_rdf.c
--- a/sql/backends/monet5/sql_rdf.c
+++ b/sql/backends/monet5/sql_rdf.c
@@ -1656,7 +1656,8 @@ static void appendResult(BAT **r_obats, 
        for (j = 0; j < np; j++){
                //Output result
                
-               if (sbt == (oid)3835096557682764 ){
+               //if (sbt == (oid)3835096557682764 ){
+               if (sbt == (oid)1460151441700192){
                        printf(BUNFMT " | ", tmpres[j]);
                }
                /*
@@ -1668,7 +1669,8 @@ static void appendResult(BAT **r_obats, 
                BUNappend(r_obats[j], &(tmpres[j]), TRUE); 
        }
        
-       if (sbt == (oid)3835096557682764 ){
+       //if (sbt == (oid)3835096557682764 ){
+       if (sbt == (oid) 1460151441700192){
                printf("\n"); 
        }
 }
diff --git a/sql/backends/monet5/sql_rdf_jgraph.c 
b/sql/backends/monet5/sql_rdf_jgraph.c
--- a/sql/backends/monet5/sql_rdf_jgraph.c
+++ b/sql/backends/monet5/sql_rdf_jgraph.c
@@ -2831,7 +2831,7 @@ static
 int** get_inner_join_groups_in_sp_group(jgraph *jg, int* group, int nnode, int 
*nijgroup, int **nnodes_per_ijgroup){
 
        int max_ijId = 0;       //max inner join pattern Id
-       int **ijgroup;
+       int **ijgroup = NULL;
        int *idx;
        int i, j; 
 
@@ -3014,8 +3014,8 @@ sql_rel* _group_star_pattern_for_single_
 
        int i; 
 
-       sql_rel **ijrels;    //rel for inner join groups
-       sql_rel **edge_ijrels;  //sql_rel connecting each pair of ijrels
+       sql_rel **ijrels = NULL;    //rel for inner join groups
+       sql_rel **edge_ijrels = NULL;  //sql_rel connecting each pair of ijrels
        sql_rel *tbl_m_rel = NULL; 
        int is_contain_mv = 0; 
        int *ingroup_contain_mv = NULL; sql_rel *tmprel_rdfscan = NULL; 
@@ -3147,6 +3147,7 @@ sql_rel* union_sp_from_all_matching_tbls
        }
 
        if (num_match_tbl > 1){
+               //_rel_print(c, tbl_m_rels[0]);
                get_union_expr(c, tbl_m_rels[0], union_exps); 
                printf("Union expresion is: \n"); 
                exps_print_ext(c, union_exps, 0, "");
@@ -3261,8 +3262,8 @@ sql_rel* _group_star_pattern(mvc *c, jgr
        int     *tmptbId = NULL; 
        int     num_match_tbl = 0;
 
-       int     **ijgroup; 
-       int     *nnodes_per_ijgroup; 
+       int     **ijgroup = NULL; 
+       int     *nnodes_per_ijgroup = NULL; 
        int     nijgroup = 0;
        
        #if     HANDLING_EXCEPTION
@@ -3337,10 +3338,18 @@ sql_rel* _group_star_pattern(mvc *c, jgr
                for (tblIdx = 0; tblIdx < num_match_tbl; tblIdx++){
                        tbl_m_rels[tblIdx] = 
_group_star_pattern_for_single_table(c, jg, ijgroup, nijgroup, 
nnodes_per_ijgroup, tmptbId[tblIdx], &(sp_proj_exps[tblIdx]), 
&(sp_opt_proj_exps[tblIdx]), 
                                        &(contain_mv_col[tblIdx]));
+                       //Check 
+                       _rel_print(c, tbl_m_rels[tblIdx]);
+
+                       //_rel_print(c, tbl_m_rels[0]);
+
                }
                
+
                printf("Done grouping star pattern\n"); 
 
+               _rel_print(c, tbl_m_rels[0]);
+
                if (num_match_tbl > 0){ 
                        rel_alltable = union_sp_from_all_matching_tbls(c, 
num_match_tbl, contain_mv_col, tbl_m_rels, sp_proj_exps); 
        
@@ -3385,7 +3394,7 @@ sql_rel* _group_star_pattern(mvc *c, jgr
                free_inner_join_groups(ijgroup, nijgroup, nnodes_per_ijgroup); 
 
                free_sp_props(spprops);
-               free(tbl_m_rels);
+               //free(tbl_m_rels);
        }
 
                
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
@@ -1745,7 +1745,9 @@ rel_push_topn_down(int *changes, mvc *sq
 
        if (rel->op == op_topn && topn_save_exps(rel->exps)) {
                sql_rel *rp = NULL;
-
+               
+               if (r && r->op == op_project && need_distinct(r))
+                       return rel; 
                /* duplicate topn + [ project-order ] under union */
                if (r)
                        rp = r->l;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to