Changeset: 8de8eb82145c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/8de8eb82145c Modified Files: sql/server/sql_mvc.c Branch: default Log Message:
Merged sqloptimizer into default diffs (truncated from 19893 to 300 lines): diff --git a/sql/backends/monet5/CMakeLists.txt b/sql/backends/monet5/CMakeLists.txt --- a/sql/backends/monet5/CMakeLists.txt +++ b/sql/backends/monet5/CMakeLists.txt @@ -32,7 +32,6 @@ set(sql_public_headers $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/sql_parser.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/sql_privileges.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_optimizer.h> - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_distribute.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_partition.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_prop.h> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../server/rel_exp.h> @@ -66,7 +65,6 @@ set(sql_public_headers $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_parser.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/sql_privileges.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_optimizer.h> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_distribute.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_partition.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_prop.h> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/monetdb/rel_exp.h> 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 @@ -3904,7 +3904,7 @@ sql_parse(backend *be, sql_schema *s, co sql_rel *rel = rel_parse(be->mvc, s, query, mode); stmt *sq = NULL; - if (rel && (rel = sql_processrelation(be->mvc, rel, 1, 1, 1))) + if (rel && (rel = sql_processrelation(be->mvc, rel, 0, 1, 1, 1))) sq = rel_bin(be, rel); return sq; } diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -123,11 +123,12 @@ sql_symbol2relation(backend *be, symbol sql_query *query = query_create(be->mvc); lng Tbegin; int extra_opts = be->mvc->emode != m_prepare; + int profile = be->mvc->emode == m_plan; rel = rel_semantic(query, sym); Tbegin = GDKusec(); if (rel) - rel = sql_processrelation(be->mvc, rel, 1, extra_opts, extra_opts); + rel = sql_processrelation(be->mvc, rel, profile, 1, extra_opts, extra_opts); if (rel) rel = rel_partition(be->mvc, rel); if (rel && (rel_no_mitosis(be->mvc, rel) || rel_need_distinct_query(rel))) @@ -148,6 +149,7 @@ sqlcleanup(backend *be, int err) /* some statements dynamically disable caching */ be->mvc->sym = NULL; + be->mvc->runs = NULL; if (be->mvc->ta) be->mvc->ta = sa_reset(be->mvc->ta); if (be->mvc->sa) @@ -450,7 +452,7 @@ create_table_or_view(mvc *sql, char *sna r = rel_parse(sql, s, nt->query, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { list *blist = rel_dependencies(sql, r); if (mvc_create_dependencies(sql, blist, nt->base.id, VIEW_DEPENDENCY)) { diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -571,7 +571,7 @@ create_trigger(mvc *sql, char *sname, ch } r = rel_parse(sql, s, buf, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { list *blist = rel_dependencies(sql, r); if (mvc_create_dependencies(sql, blist, tri->base.id, TRIGGER_DEPENDENCY)) { @@ -1060,7 +1060,7 @@ create_func(mvc *sql, char *sname, char } r = rel_parse(sql, s, buf, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { node *n; list *blist = rel_dependencies(sql, r); diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -530,6 +530,7 @@ SQLstatementIntern(Client c, const char /* passed over to query cache, used during dumpproc */ m->sa = NULL; m->sym = NULL; + m->runs = NULL; m->params = NULL; /* register name in the namespace */ if (be->q) { @@ -632,6 +633,7 @@ endofcompile: sa_destroy(m->sa); m->sa = NULL; m->sym = NULL; + m->runs = NULL; /* variable stack maybe resized, ie we need to keep the new stack */ label = m->label; status = m->session->status; @@ -775,7 +777,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS refs = sa_list(m->sa); rel = rel_read(m, *expr, &pos, refs); if (*opt && rel) - rel = sql_processrelation(m, rel, 0, 0, 0); + rel = sql_processrelation(m, rel, 0, 0, 0, 0); if (!rel) { if (strlen(m->errstr) > 6 && m->errstr[5] == '!') msg = createException(SQL, "RAstatement", "%s", m->errstr); @@ -972,7 +974,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb, refs = sa_list(m->sa); rel = rel_read(m, expr, &pos, refs); if (rel) - rel = sql_processrelation(m, rel, 0, 0, 0); + rel = sql_processrelation(m, rel, 0, 0, 0, 0); if (!rel) { if (strlen(m->errstr) > 6 && m->errstr[5] == '!') msg = createException(SQL, "RAstatement2", "%s", m->errstr); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -1206,7 +1206,7 @@ backend_create_sql_func(backend *be, sql r = rel_parse(m, f->s, f->query, m_instantiate); if (r) - r = sql_processrelation(m, r, 1, 1, 0); + r = sql_processrelation(m, r, 0, 1, 1, 0); if (!r) return -1; diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -1215,6 +1215,7 @@ SQLparser(Client c) /* passed over to query cache, used during dumpproc */ m->sa = NULL; m->sym = NULL; + m->runs = NULL; m->params = NULL; /* register name in the namespace */ if (be->q) { diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -3548,7 +3548,7 @@ stmt_func(backend *be, stmt *ops, const rel->p = prop_remove(rel->p, p); /* sql_processrelation may split projections, so make sure the topmost relation only contains references */ rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL, 1, 1)); - if (!(rel = sql_processrelation(be->mvc, rel, 0, 1, 1))) + if (!(rel = sql_processrelation(be->mvc, rel, 0, 0, 1, 1))) return NULL; if (p) { p->p = rel->p; diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -753,7 +753,7 @@ sql_update_nov2019_missing_dependencies( r = rel_parse(sql, s, relt, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { list *id_l = rel_dependencies(sql, r); @@ -789,7 +789,7 @@ sql_update_nov2019_missing_dependencies( r = rel_parse(sql, s, relt, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { list *id_l = rel_dependencies(sql, r); @@ -817,7 +817,7 @@ sql_update_nov2019_missing_dependencies( r = rel_parse(sql, s, relt, m_deps); if (r) - r = sql_processrelation(sql, r, 0, 0, 0); + r = sql_processrelation(sql, r, 0, 0, 0, 0); if (r) { list *id_l = rel_dependencies(sql, r); diff --git a/sql/server/CMakeLists.txt b/sql/server/CMakeLists.txt --- a/sql/server/CMakeLists.txt +++ b/sql/server/CMakeLists.txt @@ -46,6 +46,10 @@ target_sources(sqlserver rel_rewriter.c rel_unnest.c rel_optimizer.c + rel_optimize_exps.c + rel_optimize_others.c + rel_optimize_proj.c + rel_optimize_sel.c rel_partition.c rel_planner.c rel_planner.h rel_distribute.c @@ -56,10 +60,11 @@ target_sources(sqlserver rel_dump.c rel_dump.h rel_exp.h rel_rel.h rel_basetable.h + rel_rewriter.h rel_unnest.h rel_optimizer.h + rel_optimizer_private.h rel_partition.h - rel_distribute.h rel_prop.h rel_schema.h rel_select.h 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 @@ -7,8 +7,7 @@ */ #include "monetdb_config.h" -#include "rel_distribute.h" -#include "rel_rel.h" +#include "rel_optimizer_private.h" #include "rel_basetable.h" #include "rel_exp.h" #include "sql_privileges.h" @@ -158,8 +157,8 @@ replica_rewrite(visitor *v, sql_table *t return res; } -sql_rel * -rel_rewrite_replica(visitor *v, sql_rel *rel) +static sql_rel * +rel_rewrite_replica_(visitor *v, sql_rel *rel) { /* for merge statement join, ignore the multiple references */ if (rel_is_ref(rel) && !(rel->flag&MERGE_LEFT)) { @@ -187,8 +186,23 @@ rel_rewrite_replica(visitor *v, sql_rel return rel; } -sql_rel * -rel_rewrite_remote(visitor *v, sql_rel *rel) +static sql_rel * +rel_rewrite_replica(visitor *v, global_props *gp, sql_rel *rel) +{ + (void) gp; + return rel_visitor_bottomup(v, rel, &rel_rewrite_replica_); +} + +run_optimizer +bind_rewrite_replica(visitor *v, global_props *gp) +{ + (void) v; + return gp->needs_mergetable_rewrite || gp->needs_remote_replica_rewrite ? rel_rewrite_replica : NULL; +} + + +static sql_rel * +rel_rewrite_remote_(visitor *v, sql_rel *rel) { prop *p, *pl, *pr; @@ -248,9 +262,9 @@ rel_rewrite_remote(visitor *v, sql_rel * /* cleanup replica's */ visitor rv = { .sql = v->sql }; - l = rel->l = rel_visitor_bottomup(&rv, l, &rel_rewrite_replica); + l = rel->l = rel_visitor_bottomup(&rv, l, &rel_rewrite_replica_); rv.data = NULL; - r = rel->r = rel_visitor_bottomup(&rv, r, &rel_rewrite_replica); + r = rel->r = rel_visitor_bottomup(&rv, r, &rel_rewrite_replica_); if ((!l || !r) && v->sql->session->status) /* if the recursive calls failed */ return NULL; } @@ -259,20 +273,20 @@ rel_rewrite_remote(visitor *v, sql_rel * find_prop(r->p, PROP_REMOTE) == NULL) { visitor rv = { .sql = v->sql, .data = pl->value }; - if (!(r = rel_visitor_bottomup(&rv, r, &rel_rewrite_replica)) && v->sql->session->status) + if (!(r = rel_visitor_bottomup(&rv, r, &rel_rewrite_replica_)) && v->sql->session->status) return NULL; rv.data = NULL; - if (!(r = rel->r = rel_visitor_bottomup(&rv, r, &rel_rewrite_remote)) && v->sql->session->status) + if (!(r = rel->r = rel_visitor_bottomup(&rv, r, &rel_rewrite_remote_)) && v->sql->session->status) return NULL; } else if ((is_join(rel->op) || is_semi(rel->op) || is_set(rel->op)) && find_prop(l->p, PROP_REMOTE) == NULL && (pr = find_prop(r->p, PROP_REMOTE)) != NULL) { visitor rv = { .sql = v->sql, .data = pr->value }; - if (!(l = rel_visitor_bottomup(&rv, l, &rel_rewrite_replica)) && v->sql->session->status) + if (!(l = rel_visitor_bottomup(&rv, l, &rel_rewrite_replica_)) && v->sql->session->status) return NULL; rv.data = NULL; - if (!(l = rel->l = rel_visitor_bottomup(&rv, l, &rel_rewrite_remote)) && v->sql->session->status) + if (!(l = rel->l = rel_visitor_bottomup(&rv, l, &rel_rewrite_remote_)) && v->sql->session->status) return NULL; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org