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

Reply via email to