Changeset: 57a754716181 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=57a754716181
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/include/sql_relation.h
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_dump.h
        sql/server/rel_graph.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
Branch: graph0
Log Message:

Basic handling of query rewrite phase for the spfw operator


diffs (truncated from 582 to 300 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"
 #include "sql_env.h"
 
 #define OUTER_ZERO 64
@@ -4550,6 +4551,15 @@ rel2bin_ddl(mvc *sql, sql_rel *rel, list
 }
 
 static stmt *
+rel2bin_spfw(mvc *sql, sql_rel *rel, list *refs)
+{
+       printf("[Codegen] Input relation: %s\n", rel_to_str(sql, rel));
+
+       // for the time being, just ignore spfw and generate the code for the 
upper table
+       return subrel_bin(sql, rel->l, refs);
+}
+
+static stmt *
 subrel_bin(mvc *sql, sql_rel *rel, list *refs) 
 {
        stmt *s = NULL;
@@ -4639,8 +4649,8 @@ subrel_bin(mvc *sql, sql_rel *rel, list 
                s = rel2bin_ddl(sql, rel, refs);
                break;
        case op_spfw:
-               // todo
-               return NULL;
+               s = rel2bin_spfw(sql, rel, refs);
+               break;
        }
        if (s && rel_is_ref(rel)) {
                list_append(refs, rel);
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -135,7 +135,7 @@ typedef struct expression {
 #define DDL_ALTER_TABLE_DEL_TABLE  64
 #define DDL_ALTER_TABLE_SET_ACCESS  65
 
-#define MAXOPS 21
+#define MAXOPS 22
 
 typedef enum operator_type {
        op_basetable = 0,
@@ -221,6 +221,8 @@ typedef enum operator_type {
        (op == op_insert || op == op_update || op == op_delete)
 #define is_sample(op) \
        (op == op_sample)
+#define is_spfw(op) \
+       (op == op_spfw)
 
 /* NO NIL semantics of aggr operations */
 #define need_no_nil(e) \
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -43,6 +43,7 @@ has_remote_or_replica( sql_rel *rel )
        case op_union: 
        case op_inter: 
        case op_except: 
+    case op_spfw:
                if (has_remote_or_replica( rel->l ) ||
                    has_remote_or_replica( rel->r ))
                        return 1;
@@ -65,8 +66,6 @@ has_remote_or_replica( sql_rel *rel )
                if (rel->r && has_remote_or_replica( rel->r )) 
                        return 1;
                break;
-    case op_spfw:
-        break; // TODO, just allow to compile ftb
        }
        return 0;
 }
@@ -157,6 +156,7 @@ replica(mvc *sql, sql_rel *rel, char *ur
        case op_union: 
        case op_inter: 
        case op_except: 
+    case op_spfw:
                rel->l = replica(sql, rel->l, uri);
                rel->r = replica(sql, rel->r, uri);
                break;
@@ -177,8 +177,6 @@ replica(mvc *sql, sql_rel *rel, char *ur
        case op_delete:
                rel->r = replica(sql, rel->r, uri);
                break;
-    case op_spfw:
-        break; // TODO, just allow to compile ftb
        }
        return rel;
 }
@@ -301,7 +299,8 @@ rel_remote_func(mvc *sql, sql_rel *rel)
 
        case op_union: 
        case op_inter: 
-       case op_except: 
+       case op_except:
+    case op_spfw:
                rel->l = rel_remote_func(sql, rel->l);
                rel->r = rel_remote_func(sql, rel->r);
                break;
@@ -322,8 +321,6 @@ rel_remote_func(mvc *sql, sql_rel *rel)
        case op_delete:
                rel->r = rel_remote_func(sql, rel->r);
                break;
-    case op_spfw:
-        break; // TODO, just allow to compile ftb
        }
        if (find_prop(rel->p, PROP_REMOTE) != NULL) {
                list *exps = rel_projections(sql, rel, NULL, 1, 1);
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
@@ -1343,3 +1343,20 @@ rel_read(mvc *sql, char *r, int *pos, li
        return rel;
 }
 
+// copied and pasted from codegen
+str
+rel_to_str(mvc *sql, sql_rel *rel)
+{
+       buffer *b;
+       stream *s = buffer_wastream(b = buffer_create(1024), "rel_dump");
+       list *refs = sa_list(sql->sa);
+       char *res = NULL;
+
+       rel_print_refs(sql, s, rel, 0, refs, 0);
+       rel_print_(sql, s, rel, 0, refs, 0);
+       mnstr_printf(s, "\n");
+       res = buffer_get_buf(b);
+       buffer_destroy(b);
+       mnstr_destroy(s);
+       return res;
+}
diff --git a/sql/server/rel_dump.h b/sql/server/rel_dump.h
--- a/sql/server/rel_dump.h
+++ b/sql/server/rel_dump.h
@@ -18,4 +18,6 @@ extern const char *op2string(operator_ty
 
 extern sql_rel *rel_read(mvc *sql, char *ra, int *pos, list *refs);
 
+extern str rel_to_str(mvc *sql, sql_rel *rel);
+
 #endif /*_REL_DUMP_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
@@ -16,25 +16,6 @@
 #include "rel_rel.h"
 #include "rel_select.h"
 
-// copied and pasted from codegen
-static str
-rel2str( mvc *sql, sql_rel *rel)
-{
-       buffer *b;
-       stream *s = buffer_wastream(b = buffer_create(1024), "rel_dump");
-       list *refs = sa_list(sql->sa);
-       char *res = NULL;
-
-       rel_print_refs(sql, s, rel, 0, refs, 0);
-       rel_print_(sql, s, rel, 0, refs, 0);
-       mnstr_printf(s, "\n");
-       res = buffer_get_buf(b);
-       buffer_destroy(b);
-       mnstr_destroy(s);
-       return res;
-}
-
-
 sql_rel* rel_graph_reaches(mvc *sql, sql_rel *rel, symbol *sq){
        str dump = NULL;
        dnode* lstoperands = NULL; // temp to navigate over the operands
@@ -54,9 +35,12 @@ sql_rel* rel_graph_reaches(mvc *sql, sql
 
        assert(sq->token == SQL_GRAPH_REACHES && "Invalid label in the AST, 
expected SQL_GRAPH_REACHES");
 
+       // disable stmt caching for this query as WIP
+       sql->caching = false;
+
        // let's see what we have got so far
-       dump = rel2str(sql, rel);
-       printf("Input relation: %s", dump);
+       dump = rel_to_str(sql, rel);
+       printf("[Semantic analysis] Input relation: %s", dump);
 
        lstoperands = sq->data.lval->h;
        sym_qfrom = lstoperands->data.sym; // first operand symbol( dlist( 
table, column ) )
@@ -99,12 +83,10 @@ sql_rel* rel_graph_reaches(mvc *sql, sql
 
        // build the new operator graphjoin operator
        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);
+       dump = rel_to_str(sql, result);
+       printf("[Semantic analysis] Output relation: %s\n", dump);
 
-       // atm just ignore the operator otherwise it will cause a crash down in 
the phases
-       return rel;
+       return result;
 }
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
@@ -6,7 +6,7 @@
  * Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V.
  */
 
-/*#define DEBUG*/
+#define DEBUG // */
 
 #include "monetdb_config.h"
 #include "rel_optimizer.h"
@@ -21,6 +21,8 @@
 #endif
 #include "mtime.h"
 
+
+
 #define new_func_list(sa) sa_list(sa)
 #define new_col_list(sa) sa_list(sa)
 
@@ -109,6 +111,7 @@ name_find_column( sql_rel *rel, char *rn
        case op_apply: 
        case op_semi: 
        case op_anti: 
+       case op_spfw:
                /* first right (possible subquery) */
                c = name_find_column( rel->r, rname, name, pnr, bt);
                if (!c) 
@@ -155,8 +158,6 @@ name_find_column( sql_rel *rel, char *rn
        case op_update:
        case op_delete:
                break;
-       case op_spfw:
-           break; // TODO, just allow to compile ftb
        }
        if (alias) { /* we found an expression with the correct name, but
                        we need sql_columns */
@@ -240,6 +241,7 @@ rel_properties(mvc *sql, global_props *g
        case op_union: 
        case op_inter: 
        case op_except: 
+       case op_spfw:
                rel_properties(sql, gp, rel->l);
                rel_properties(sql, gp, rel->r);
                break;
@@ -258,8 +260,6 @@ rel_properties(mvc *sql, global_props *g
                if (rel->r) 
                        rel_properties(sql, gp, rel->r);
                break;
-    case op_spfw:
-        break; // TODO, just allow to compile ftb
        }
 
        switch (rel->op) {
@@ -268,34 +268,8 @@ rel_properties(mvc *sql, global_props *g
                if (!find_prop(rel->p, PROP_COUNT))
                        rel->p = prop_create(sql->sa, PROP_COUNT, rel->p);
                break;
-       case op_join: 
-       case op_left: 
-       case op_right: 
-       case op_full: 
-
-       case op_apply: 
-       case op_semi: 
-       case op_anti: 
-
-       case op_union: 
-       case op_inter: 
-       case op_except: 
+       default:
                break;
-
-       case op_project:
-       case op_groupby:
-       case op_topn:
-       case op_sample:
-       case op_select:
-               break;
-
-       case op_insert:
-       case op_update:
-       case op_delete:
-       case op_ddl:
-               break;
-       case op_spfw:
-        break; // TODO, just allow to compile ftb
        }
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to