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 -- [email protected]
To unsubscribe send an email to [email protected]