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

Reply via email to