Changeset: 8c2acd25a1f6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c2acd25a1f6 Modified Files: sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_graph.c sql/server/rel_rel.c sql/server/rel_rel.h Branch: graph0 Log Message:
Semantic analysis - added the referenced columns in the exp~ list diffs (132 lines): diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c --- a/sql/server/rel_dump.c +++ b/sql/server/rel_dump.c @@ -310,7 +310,7 @@ find_ref( list *refs, sql_rel *rel ) void rel_print_(mvc *sql, stream *fout, sql_rel *rel, int depth, list *refs, int decorate) { - char *r = NULL; + const char *r = NULL; if (!rel) return; @@ -541,6 +541,7 @@ rel_print_refs(mvc *sql, stream* fout, s case op_union: case op_inter: case op_except: + case op_spfw: // TODO: what are these refs? rel_print_refs(sql, fout, rel->l, depth, refs, decorate); rel_print_refs(sql, fout, rel->r, depth, refs, decorate); if (rel_is_ref(rel->l) && !find_ref(refs, rel->l)) { @@ -577,8 +578,6 @@ rel_print_refs(mvc *sql, stream* fout, s list_append(refs, rel->r); } break; - case op_spfw: - break; // TODO, just allow to compile ftb } } diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1783,3 +1783,15 @@ exp_flatten(mvc *sql, sql_exp *e) return NULL; } +list * +exp_spfw(mvc *sql, sql_exp *qfrom, sql_exp *qto, sql_exp *efrom, sql_exp *eto) +{ + list *result = sa_list(sql->sa); + + list_append(result, qfrom); + list_append(result, qto); + list_append(result, efrom); + list_append(result, eto); + + return result; +} diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -143,4 +143,7 @@ extern int is_identity( sql_exp *e, sql_ extern atom *exp_flatten(mvc *sql, sql_exp *e); +// columns referenced in the spfw operator +extern list *exp_spfw(mvc *sql, sql_exp *qfrom, sql_exp *qto, sql_exp *efrom, sql_exp *eto); + #endif /* _REL_EXP_H_ */ diff --git a/sql/server/rel_graph.c b/sql/server/rel_graph.c --- a/sql/server/rel_graph.c +++ b/sql/server/rel_graph.c @@ -44,7 +44,7 @@ sql_rel* rel_graph_reaches(mvc *sql, sql sql_exp* qto = NULL; // reference to the `to' column exp_kind dummy = {0}; // dummy param, required by rel_value_exp symbol* sym_edges_tbl = NULL; // the table edges in the ast - sql_rel* tbl_edges = NULL; // the edges table + sql_rel* tbl_edges = NULL; // the edges table exp~ symbol* sym_edges_from = NULL; // reference to the `edges from' column in the ast symbol* sym_edges_to = NULL; // ref to the `edges to' column in the ast sql_exp* efrom = NULL; // ref to the edges column `from' @@ -56,7 +56,7 @@ sql_rel* rel_graph_reaches(mvc *sql, sql // let's see what we have got so far dump = rel2str(sql, rel); - printf("Input relation: %s\n", dump); + printf("Input relation: %s", dump); lstoperands = sq->data.lval->h; sym_qfrom = lstoperands->data.sym; // first operand symbol( dlist( table, column ) ) @@ -98,14 +98,13 @@ sql_rel* rel_graph_reaches(mvc *sql, sql if(!qto) return NULL; // cannot convert qto into the same type of eto // build the new operator graphjoin operator - result = rel_create(sql->sa); - result->l = rel; - result->r = tbl_edges; - result->op = op_spfw; - result->exps = NULL; // TODO: TO BE DONE! - result->card = rel->card; - result->nrcols = rel->nrcols; - result->processed = 1; // *to be checked * + result = rel_spfw(sql, rel, tbl_edges, exp_spfw(sql, qfrom, qto, efrom, eto)); + (void) result; // -Werror, unutilised variable bla bla.. + // let's if what we are creating makes sense + dump = rel2str(sql, result); + printf("Output relation: %s\n", dump); + + // atm just ignore the operator otherwise it will cause a crash down in the phases return rel; } diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -1189,3 +1189,16 @@ rel_find_column( sql_allocator *sa, sql_ return NULL; } +sql_rel *rel_spfw(mvc *sql, sql_rel *l, sql_rel *edges, list *lst_exps) +{ + sql_rel *rel = rel_create(sql->sa); + rel->l = l; + rel->r = edges; + rel->op = op_spfw; + rel->exps = lst_exps; + rel->card = l->card; + rel->nrcols = l->nrcols; // TODO +1, the cost of the path + rel->processed = 1; // *to be checked, still don't get as it is supposed to be used * + + return rel; +} diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h --- a/sql/server/rel_rel.h +++ b/sql/server/rel_rel.h @@ -74,4 +74,6 @@ extern sql_table *rel_ddl_table_get(sql_ extern sql_rel *rel_add_identity(mvc *sql, sql_rel *rel, sql_exp **exp); extern sql_exp * rel_find_column( sql_allocator *sa, sql_rel *rel, const char *tname, const char *cname ); + +extern sql_rel *rel_spfw(mvc *sql, sql_rel *l, sql_rel *edges, list *e); #endif /* _REL_REL_H_ */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list