Changeset: 69d6f049b9da for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69d6f049b9da Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_statement.c sql/server/rel_optimizer.c Branch: graph0 Log Message:
QRW: avoid to remove the `weights' columns in the DCE pass diffs (95 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -16,6 +16,7 @@ #include "rel_select.h" #include "rel_updates.h" #include "rel_optimizer.h" +#include "rel_dump.h" // debug only #include "sql_env.h" #define OUTER_ZERO 64 @@ -4721,6 +4722,9 @@ rel2bin_graph(backend *be, sql_rel* rel, // for more extreme cases #define void2oid(statement) stmt_gr8_void2oid(be, statement) + // debugging + printf("[rel2bin_graph] input: %s\n", dump_rel(sql, rel)); + // first construct the depending relations left = subrel_bin(be, rel->l, refs); if(!left) return NULL; // error @@ -4814,7 +4818,7 @@ rel2bin_graph(backend *be, sql_rel* rel, for(node *n = graph_ptr->spfw->h; n; n = n->next){ sql_exp* e = n->data; stmt* s = exp_bin(be, e, edges, NULL, NULL, NULL, NULL, NULL); - assert(s != NULL); + assert(s != NULL && "Weight expression is NULL"); if(!s) return NULL; list_append(lst1, s); diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -3671,6 +3671,7 @@ stmt_gr8_spfw(backend *be, stmt *query, stmt *s = NULL; int dest = -1; int i = -1; + int num_output_cols = 2; // number of output columns from the operator stream *stream = buffer_wastream(buffer_create(1024), "spfw_codegen_query"); // Validate the input parameters @@ -3700,7 +3701,8 @@ stmt_gr8_spfw(backend *be, stmt *query, q = pushReturn(be->mb, q, newTmpVariable(be->mb, TYPE_bat)); // right candidate list // add the shortest paths for(node *n = weights->op4.lval->h; n; n = n->next){ - q = pushReturn(be->mb, q, newTmpVariable(be->mb, TYPE_any)); + q = pushReturn(be->mb, q, newTmpVariable(be->mb, TYPE_bat)); + num_output_cols++; } // the first argument should be the query description @@ -3778,7 +3780,7 @@ stmt_gr8_spfw(backend *be, stmt *query, dest = getDestVar(q); // jl renameVariable(be->mb, getArg(q, 1), "r1_%d", dest); // jr i = 2; - for(node *n = weights->op4.lval->h; n; n = n->next){ // shortest paths + for(node *n = weights->op4.lval->h; n; n = n->next, i++){ // shortest paths snprintf(be->mb->var[getArg(q, i)]->id, IDLENGTH, "r%d_%d", i, dest); } @@ -3790,6 +3792,9 @@ stmt_gr8_spfw(backend *be, stmt *query, s->op1 = query; s->op2 = stmt_list(be, append(append(sa_list(be->mvc->sa), edge_from), edge_to)); s->op3 = weights; + // just required >= 1 to avoid projecting a column out of a constant when looking + // for the shortest paths + s->nrcols = num_output_cols; /* = i*/ return s; } 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 @@ -6295,6 +6295,8 @@ rel_mark_used(mvc *sql, sql_rel *rel, in // edges exps_mark_used_(sql->sa, rel, graph_ptr->edges, graph_ptr->efrom); exps_mark_used_(sql->sa, rel, graph_ptr->edges, graph_ptr->eto); + exps_mark_used_(sql->sa, rel, graph_ptr->edges, graph_ptr->spfw); + rel_mark_used(sql, graph_ptr->edges, 0); } break; } @@ -9529,8 +9531,11 @@ static sql_rel * rel = rewrite_topdown(sql, rel, &rel_push_project_down_union, &changes); /* Remove unused expressions */ - if (level <= 0) + if (level <= 0) { + printf("[Optimizer] dce before: %s\n", dump_rel(sql, rel)); rel = rel_dce(sql, rel); + printf("[Optimizer] dce after: %s\n", dump_rel(sql, rel)); + } if (gp.cnt[op_join] || gp.cnt[op_left] || gp.cnt[op_right] || gp.cnt[op_full] || gp.cnt[op_semi] || gp.cnt[op_anti] || gp.cnt[op_select] || graph_operators) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list