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