Changeset: 106b106e2ee5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/106b106e2ee5
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_dump.h
        sql/server/rel_optimizer.c
        sql/server/rel_optimizer.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
Branch: sqloptimizer
Log Message:

Add dump information for optimizer runs


diffs (truncated from 408 to 300 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
@@ -14,12 +14,11 @@
 #include "rel_rel.h"
 #include "rel_basetable.h"
 #include "rel_exp.h"
-#include "rel_prop.h"
 #include "rel_updates.h"
 #include "rel_select.h"
 #include "rel_remote.h"
+#include "rel_optimizer.h"
 #include "sql_privileges.h"
-#include "mal_errors.h"                /* for SQLSTATE() */
 
 static void
 print_indent(mvc *sql, stream *fout, int depth, int decorate)
@@ -111,6 +110,8 @@ dump_sql_subtype(sql_allocator *sa, sql_
 
 static void exps_print(mvc *sql, stream *fout, list *exps, int depth, list 
*refs, int alias, int brackets);
 
+static void rel_print_rel(mvc *sql, stream  *fout, sql_rel *rel, int depth, 
list *refs, int decorate);
+
 static void
 exp_print(mvc *sql, stream *fout, sql_exp *e, int depth, list *refs, int 
comma, int alias)
 {
@@ -158,7 +159,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
                                exps_print(sql, fout, e->f, depth, refs, 0, 0);
                        alias = 0;
                } else if (e->flag & PSM_REL) {
-                       rel_print_(sql, fout, e->l, depth+10, refs, 1);
+                       rel_print_rel(sql, fout, e->l, depth+10, refs, 1);
                } else if (e->flag & PSM_EXCEPTION) {
                        mnstr_printf(fout, "except ");
                        exp_print(sql, fout, e->l, depth, refs, 0, 0);
@@ -359,49 +360,6 @@ exps_print(mvc *sql, stream *fout, list 
                mnstr_printf(fout, " ]");
 }
 
-const char *
-op2string(operator_type op)
-{
-       switch (op) {
-       case op_basetable:
-               return "basetable";
-       case op_table:
-               return "table";
-       case op_ddl:
-               return "ddl";
-       case op_project:
-               return "project";
-       case op_select:
-               return "select";
-       case op_join:
-       case op_left:
-       case op_right:
-       case op_full:
-               return "join";
-       case op_semi:
-               return "semi";
-       case op_anti:
-               return "anti";
-       case op_union:
-       case op_inter:
-       case op_except:
-               return "set op";
-       case op_groupby:
-               return "group by";
-       case op_topn:
-               return "topn";
-       case op_sample:
-               return "sample";
-       case op_insert:
-       case op_update:
-       case op_delete:
-       case op_truncate:
-       case op_merge:
-               return "modify op";
-       }
-       return "unknown";
-}
-
 static int
 find_ref( list *refs, sql_rel *rel )
 {
@@ -415,8 +373,8 @@ find_ref( list *refs, sql_rel *rel )
        return 0;
 }
 
-void
-rel_print_(mvc *sql, stream  *fout, sql_rel *rel, int depth, list *refs, int 
decorate)
+static void
+rel_print_rel(mvc *sql, stream  *fout, sql_rel *rel, int depth, list *refs, 
int decorate)
 {
        char *r = NULL;
 
@@ -437,35 +395,25 @@ rel_print_(mvc *sql, stream  *fout, sql_
        switch (rel->op) {
        case op_basetable: {
                sql_table *t = rel->l;
-#if 0
-               sql_column *c = rel->r;
+               const char *sname = t->s ? t->s->base.name : NULL; /* All 
tables, but declared ones on the stack have schema */
+               const char *tname = t->base.name;
 
-               if (!t && c) {
-                       mnstr_printf(fout, "dict(\"%s\".\"%s\")",
-                                                dump_escape_ident(sql->ta, 
c->t->base.name), dump_escape_ident(sql->ta, c->base.name));
-               } else {
-#endif
-
-                       const char *sname = t->s ? t->s->base.name : NULL; /* 
All tables, but declared ones on the stack have schema */
-                       const char *tname = t->base.name;
-
-                       if (isRemote(t)) {
-                               const char *uri = t->query;
+               if (isRemote(t)) {
+                       const char *uri = t->query;
 
-                               sname = mapiuri_schema( uri, sql->sa, sname);
-                               tname = mapiuri_table( uri, sql->sa, tname);
-                       }
-                       if (sname)
-                               mnstr_printf(fout, "%s(\"%s\".\"%s\")",
-                                       isRemote(t)&&decorate?"REMOTE":
-                                       isReplicaTable(t)?"REPLICA":"table",
-                                       dump_escape_ident(sql->ta, sname), 
dump_escape_ident(sql->ta, tname));
-                       else
-                               mnstr_printf(fout, "%s(\"%s\")",
-                                       isRemote(t)&&decorate?"REMOTE":
-                                       isReplicaTable(t)?"REPLICA":"table",
-                                       dump_escape_ident(sql->ta, tname));
-       //      }
+                       sname = mapiuri_schema( uri, sql->sa, sname);
+                       tname = mapiuri_table( uri, sql->sa, tname);
+               }
+               if (sname)
+                       mnstr_printf(fout, "%s(\"%s\".\"%s\")",
+                               isRemote(t)&&decorate?"REMOTE":
+                               isReplicaTable(t)?"REPLICA":"table",
+                               dump_escape_ident(sql->ta, sname), 
dump_escape_ident(sql->ta, tname));
+               else
+                       mnstr_printf(fout, "%s(\"%s\")",
+                               isRemote(t)&&decorate?"REMOTE":
+                               isReplicaTable(t)?"REPLICA":"table",
+                               dump_escape_ident(sql->ta, tname));
                if (rel->exps)
                        exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
                else
@@ -478,9 +426,9 @@ rel_print_(mvc *sql, stream  *fout, sql_
                        exp_print(sql, fout, rel->r, depth, refs, 1, 0);
                if (rel->l) {
                        if (rel->flag == TRIGGER_WRAPPER)
-                               mnstr_printf(fout, "rel_dump not yet 
implemented for trigger input");
+                               mnstr_printf(fout, "rel_dump not yet 
implemented for trigger input");
                        else
-                               rel_print_(sql, fout, rel->l, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->l, depth+1, refs, 
decorate);
                }
                print_indent(sql, fout, depth, decorate);
                mnstr_printf(fout, ")");
@@ -490,9 +438,9 @@ rel_print_(mvc *sql, stream  *fout, sql_
        case op_ddl:
                mnstr_printf(fout, "ddl");
                if (rel->l)
-                       rel_print_(sql, fout, rel->l, depth+1, refs, decorate);
+                       rel_print_rel(sql, fout, rel->l, depth+1, refs, 
decorate);
                if (rel->r)
-                       rel_print_(sql, fout, rel->r, depth+1, refs, decorate);
+                       rel_print_rel(sql, fout, rel->r, depth+1, refs, 
decorate);
                if (rel->exps && (rel->flag == ddl_psm || rel->flag == 
ddl_exception || rel->flag == ddl_list))
                        exps_print(sql, fout, rel->exps, depth, refs, 1, 0);
                break;
@@ -536,7 +484,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                                print_indent(sql, fout, depth+1, decorate);
                                mnstr_printf(fout, "& REF %d ", nr);
                        } else
-                               rel_print_(sql, fout, rel->l, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->l, depth+1, refs, 
decorate);
                }
                mnstr_printf(fout, ",");
                if (rel->r) {
@@ -545,7 +493,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                                print_indent(sql, fout, depth+1, decorate);
                                mnstr_printf(fout, "& REF %d  ", nr);
                        } else
-                               rel_print_(sql, fout, rel->r, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->r, depth+1, refs, 
decorate);
                }
                print_indent(sql, fout, depth, decorate);
                mnstr_printf(fout, ")");
@@ -577,7 +525,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                                print_indent(sql, fout, depth+1, decorate);
                                mnstr_printf(fout, "& REF %d ", nr);
                        } else
-                               rel_print_(sql, fout, rel->l, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->l, depth+1, refs, 
decorate);
                        print_indent(sql, fout, depth, decorate);
                        mnstr_printf(fout, ")");
                }
@@ -616,7 +564,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                                print_indent(sql, fout, depth+1, decorate);
                                mnstr_printf(fout, "& REF %d ", nr);
                        } else
-                               rel_print_(sql, fout, rel->l, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->l, depth+1, refs, 
decorate);
                }
                if (rel->r) {
                        if (rel_is_ref(rel->r)) {
@@ -624,7 +572,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                                print_indent(sql, fout, depth+1, decorate);
                                mnstr_printf(fout, "& REF %d ", nr);
                        } else
-                               rel_print_(sql, fout, rel->r, depth+1, refs, 
decorate);
+                               rel_print_rel(sql, fout, rel->r, depth+1, refs, 
decorate);
                }
                print_indent(sql, fout, depth, decorate);
                mnstr_printf(fout, ")");
@@ -643,7 +591,6 @@ rel_print_(mvc *sql, stream  *fout, sql_
                        mnstr_printf(fout, " %s %s", propkind2string(p), pv);
                }
        }
-       //mnstr_printf(fout, " %p ", rel);
 }
 
 void
@@ -660,14 +607,14 @@ rel_print_refs(mvc *sql, stream* fout, s
                        if (rel->l) {
                                rel_print_refs(sql, fout, rel->l, depth, refs, 
decorate);
                                if (rel_is_ref(rel->l) && !find_ref(refs, 
rel->l)) {
-                                       rel_print_(sql, fout, rel->l, depth, 
refs, decorate);
+                                       rel_print_rel(sql, fout, rel->l, depth, 
refs, decorate);
                                        list_append(refs, rel->l);
                                }
                        }
                        if (rel->r) {
                                rel_print_refs(sql, fout, rel->r, depth, refs, 
decorate);
                                if (rel_is_ref(rel->r) && !find_ref(refs, 
rel->r)) {
-                                       rel_print_(sql, fout, rel->r, depth, 
refs, decorate);
+                                       rel_print_rel(sql, fout, rel->r, depth, 
refs, decorate);
                                        list_append(refs, rel->r);
                                }
                        }
@@ -687,11 +634,11 @@ rel_print_refs(mvc *sql, stream* fout, s
                if (rel->r)
                        rel_print_refs(sql, fout, rel->r, depth, refs, 
decorate);
                if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) {
-                       rel_print_(sql, fout, rel->l, depth, refs, decorate);
+                       rel_print_rel(sql, fout, rel->l, depth, refs, decorate);
                        list_append(refs, rel->l);
                }
                if (rel->r && rel_is_ref(rel->r) && !find_ref(refs, rel->r)) {
-                       rel_print_(sql, fout, rel->r, depth, refs, decorate);
+                       rel_print_rel(sql, fout, rel->r, depth, refs, decorate);
                        list_append(refs, rel->r);
                }
                break;
@@ -703,7 +650,7 @@ rel_print_refs(mvc *sql, stream* fout, s
                if (rel->l)
                        rel_print_refs(sql, fout, rel->l, depth, refs, 
decorate);
                if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) {
-                       rel_print_(sql, fout, rel->l, depth, refs, decorate);
+                       rel_print_rel(sql, fout, rel->l, depth, refs, decorate);
                        list_append(refs, rel->l);
                }
                break;
@@ -715,19 +662,42 @@ rel_print_refs(mvc *sql, stream* fout, s
                if (rel->l)
                        rel_print_refs(sql, fout, rel->l, depth, refs, 
decorate);
                if (rel->l && rel_is_ref(rel->l) && !find_ref(refs, rel->l)) {
-                       rel_print_(sql, fout, rel->l, depth, refs, decorate);
+                       rel_print_rel(sql, fout, rel->l, depth, refs, decorate);
                        list_append(refs, rel->l);
                }
                if (rel->r)
                        rel_print_refs(sql, fout, rel->r, depth, refs, 
decorate);
                if (rel->r && rel_is_ref(rel->r) && !find_ref(refs, rel->r)) {
-                       rel_print_(sql, fout, rel->r, depth, refs, decorate);
+                       rel_print_rel(sql, fout, rel->r, depth, refs, decorate);
                        list_append(refs, rel->r);
                }
                break;
        }
 }
 
+void
+rel_print_(mvc *sql, stream *fout, sql_rel *rel, int depth, list *refs, int 
decorate)
+{
+       rel_print_rel(sql, fout, rel, depth, refs, decorate);
+       if (sql->runs) {
+               bool first = false;
+
+               for (int i = 0 ; i < NSQLREWRITERS ; i++) {
+                       sql_optimizer_run *run = &(sql->runs[i]);
+
+                       if (run->name) { /* if name is set, then the optimizer 
did run */
+                               if (!first) {
+                                       mnstr_printf(fout, "\n");
+                                       first = true;
+                               }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to