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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list