Changeset: de5d1c06d69f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/de5d1c06d69f
Added Files:
        sql/test/prepare/Tests/prepare-mergetable.SQL.py
        sql/test/prepare/Tests/prepare-mergetable.sql
        sql/test/prepare/Tests/prepare-mergetable.stable.out
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_transaction.c
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_distribute.c
        sql/server/rel_distribute.h
        sql/server/rel_exp.c
        sql/server/rel_optimizer.c
        sql/server/rel_optimizer.h
        sql/server/rel_partition.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_partition.c
        sql/server/sql_semantic.c
        sql/test/prepare/Tests/All
Branch: default
Log Message:

Merged rel_distribute calls into rel_optimizer, so they run only when 
necessary. Removed unecessary includes and don't compute which side to run 
mitosis when instantiating a SQL function


diffs (truncated from 853 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,8 +16,6 @@
 #include "rel_prop.h"
 #include "rel_select.h"
 #include "rel_updates.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
 #include "rel_predicates.h"
 #include "sql_env.h"
 #include "sql_optimizer.h"
@@ -3883,7 +3881,7 @@ sql_parse(backend *be, sql_schema *s, co
        sql_rel *rel = rel_parse(be->mvc, s, query, mode);
        stmt *sq = NULL;
 
-       if ((rel = sql_processrelation(be->mvc, rel, 1, 1)))
+       if ((rel = sql_processrelation(be->mvc, rel, 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
@@ -24,10 +24,7 @@
 #include "sql_optimizer.h"
 #include "sql_datetime.h"
 #include "sql_partition.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
 #include "rel_partition.h"
-#include "rel_distribute.h"
 #include "rel_select.h"
 #include "rel_rel.h"
 #include "rel_exp.h"
@@ -130,9 +127,7 @@ sql_symbol2relation(backend *be, symbol 
        rel = rel_semantic(query, sym);
        Tbegin = GDKusec();
        if (rel)
-               rel = sql_processrelation(be->mvc, rel, extra_opts, extra_opts);
-       if (rel)
-               rel = rel_distribute(be->mvc, rel);
+               rel = sql_processrelation(be->mvc, rel, 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)))
@@ -492,7 +487,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);
+                       r = sql_processrelation(sql, r, 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
@@ -27,14 +27,11 @@
 #include "mal_debugger.h"
 
 #include "rel_select.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
 #include "rel_prop.h"
 #include "rel_rel.h"
 #include "rel_exp.h"
 #include "rel_bin.h"
 #include "rel_dump.h"
-#include "rel_remote.h"
 #include "orderidx.h"
 
 #define initcontext() \
@@ -577,7 +574,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);
+                               r = sql_processrelation(sql, r, 0, 0, 0);
                        if (r) {
                                list *blist = rel_dependencies(sql, r);
                                if (mvc_create_dependencies(sql, blist, 
tri->base.id, TRIGGER_DEPENDENCY)) {
@@ -1062,7 +1059,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);
+                       r = sql_processrelation(sql, r, 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
@@ -26,10 +26,6 @@
 #include "sql_user.h"
 #include "sql_optimizer.h"
 #include "sql_datetime.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
-#include "rel_partition.h"
-#include "rel_distribute.h"
 #include "rel_select.h"
 #include "rel_rel.h"
 #include "rel_exp.h"
@@ -775,7 +771,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, 1, 1);
+               rel = sql_processrelation(m, rel, 0, 1, 1);
        if (!rel) {
                if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
                        msg = createException(SQL, "RAstatement", "%s", 
m->errstr);
@@ -971,7 +967,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, 1, 1);
+               rel = sql_processrelation(m, rel, 0, 1, 1);
        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
@@ -40,17 +40,12 @@
 #include "mal_debugger.h"
 
 #include "rel_select.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
-#include "rel_distribute.h"
-#include "rel_partition.h"
 #include "rel_prop.h"
 #include "rel_rel.h"
 #include "rel_exp.h"
 #include "rel_psm.h"
 #include "rel_bin.h"
 #include "rel_dump.h"
-#include "rel_remote.h"
 
 #include "msabaoth.h"          /* msab_getUUID */
 #include "muuid.h"
@@ -1228,11 +1223,7 @@ backend_create_sql_func(backend *be, sql
                f->sql++;
        r = rel_parse(m, f->s, f->query, m_instantiate);
        if (r)
-               r = sql_processrelation(m, r, 1, 0);
-       if (r)
-               r = rel_distribute(m, r);
-       if (r)
-               r = rel_partition(m, r);
+               r = sql_processrelation(m, r, 1, 1, 0);
        if (r && !f->sql)       /* native function */
                return 0;
 
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
@@ -14,8 +14,6 @@
 #include "rel_rel.h"
 #include "rel_exp.h"
 #include "rel_prop.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
 
 #include "mal_namespace.h"
 #include "mal_builder.h"
@@ -3412,7 +3410,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, 1, 1)))
+       if (!(rel = sql_processrelation(be->mvc, rel, 0, 1, 1)))
                return NULL;
        if (p) {
                p->p = rel->p;
diff --git a/sql/backends/monet5/sql_transaction.c 
b/sql/backends/monet5/sql_transaction.c
--- a/sql/backends/monet5/sql_transaction.c
+++ b/sql/backends/monet5/sql_transaction.c
@@ -26,13 +26,11 @@
 #include "mal_debugger.h"
 
 #include "rel_select.h"
-#include "rel_optimizer.h"
 #include "rel_prop.h"
 #include "rel_rel.h"
 #include "rel_exp.h"
 #include "rel_bin.h"
 #include "rel_dump.h"
-#include "rel_remote.h"
 #include "orderidx.h"
 
 #define initcontext() \
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
@@ -19,10 +19,7 @@
 #include "sql_upgrades.h"
 #include "rel_rel.h"
 #include "rel_semantic.h"
-#include "rel_unnest.h"
-#include "rel_optimizer.h"
-
-#include "rel_remote.h"
+
 #include "mal_authorize.h"
 
 /* this function can be used to recreate the system tables (types,
@@ -850,7 +847,7 @@ sql_update_nov2019_missing_dependencies(
 
                                r = rel_parse(sql, s, relt, m_deps);
                                if (r)
-                                       r = sql_processrelation(sql, r, 0, 0);
+                                       r = sql_processrelation(sql, r, 0, 0, 
0);
                                if (r) {
                                        list *id_l = rel_dependencies(sql, r);
 
@@ -886,7 +883,7 @@ sql_update_nov2019_missing_dependencies(
 
                                        r = rel_parse(sql, s, relt, m_deps);
                                        if (r)
-                                               r = sql_processrelation(sql, r, 
0, 0);
+                                               r = sql_processrelation(sql, r, 
0, 0, 0);
                                        if (r) {
                                                list *id_l = 
rel_dependencies(sql, r);
 
@@ -914,7 +911,7 @@ sql_update_nov2019_missing_dependencies(
 
                                                r = rel_parse(sql, s, relt, 
m_deps);
                                                if (r)
-                                                       r = 
sql_processrelation(sql, r, 0, 0);
+                                                       r = 
sql_processrelation(sql, r, 0, 0, 0);
                                                if (r) {
                                                        list *id_l = 
rel_dependencies(sql, r);
 
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
@@ -11,8 +11,6 @@
 #include "rel_rel.h"
 #include "rel_basetable.h"
 #include "rel_exp.h"
-#include "rel_prop.h"
-#include "rel_dump.h"
 #include "sql_privileges.h"
 
 static int
@@ -158,8 +156,8 @@ replica_rewrite(visitor *v, sql_table *t
        return res;
 }
 
-static sql_rel *
-replica(visitor *v, sql_rel *rel)
+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 +185,8 @@ replica(visitor *v, sql_rel *rel)
        return rel;
 }
 
-static sql_rel *
-distribute(visitor *v, sql_rel *rel)
+sql_rel *
+rel_rewrite_remote(visitor *v, sql_rel *rel)
 {
        prop *p, *pl, *pr;
 
@@ -248,9 +246,9 @@ distribute(visitor *v, sql_rel *rel)
                        /* cleanup replica's */
                        visitor rv = { .sql = v->sql };
 
-                       l = rel->l = rel_visitor_bottomup(&rv, l, &replica);
+                       l = rel->l = rel_visitor_bottomup(&rv, l, 
&rel_rewrite_replica);
                        rv.data = NULL;
-                       r = rel->r = rel_visitor_bottomup(&rv, r, &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 +257,20 @@ distribute(visitor *v, sql_rel *rel)
                        find_prop(r->p, PROP_REMOTE) == NULL) {
                        visitor rv = { .sql = v->sql, .data = pl->value };
 
-                       if (!(r = rel_visitor_bottomup(&rv, r, &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, 
&distribute)) && 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, &replica)) && 
v->sql->session->status)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to