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