Changeset: fe04ef515bc2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fe04ef515bc2
Removed Files:
        sql/server/rel_distribute.h
Modified Files:
        sql/backends/monet5/CMakeLists.txt
        sql/server/CMakeLists.txt
        sql/server/rel_distribute.c
        sql/server/rel_optimizer.c
        sql/server/rel_optimizer_private.h
Branch: sqloptimizer
Log Message:

Add remote/replica tables rewriters to the post optimizer pipeline. Hide more 
symbols


diffs (267 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/server/CMakeLists.txt b/sql/server/CMakeLists.txt
--- a/sql/server/CMakeLists.txt
+++ b/sql/server/CMakeLists.txt
@@ -64,7 +64,6 @@ target_sources(sqlserver
   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,11 +7,11 @@
  */
 
 #include "monetdb_config.h"
-#include "rel_distribute.h"
 #include "rel_rel.h"
 #include "rel_basetable.h"
 #include "rel_exp.h"
 #include "sql_privileges.h"
+#include "rel_optimizer_private.h"
 
 static int
 has_remote_or_replica( sql_rel *rel )
@@ -158,8 +158,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 +187,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 +263,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 +274,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;
                }
 
@@ -330,8 +345,23 @@ rel_rewrite_remote(visitor *v, sql_rel *
        return rel;
 }
 
-sql_rel *
-rel_remote_func(visitor *v, sql_rel *rel)
+static sql_rel *
+rel_rewrite_remote(visitor *v, global_props *gp, sql_rel *rel)
+{
+       (void) gp;
+       return rel_visitor_bottomup(v, rel, &rel_rewrite_remote_);
+}
+
+run_optimizer
+bind_rewrite_remote(visitor *v, global_props *gp)
+{
+       (void) v;
+       return gp->needs_mergetable_rewrite || gp->needs_remote_replica_rewrite 
? rel_rewrite_remote : NULL;
+}
+
+
+static sql_rel *
+rel_remote_func_(visitor *v, sql_rel *rel)
 {
        (void) v;
 
@@ -346,3 +376,17 @@ rel_remote_func(visitor *v, sql_rel *rel
        }
        return rel;
 }
+
+static sql_rel *
+rel_remote_func(visitor *v, global_props *gp, sql_rel *rel)
+{
+       (void) gp;
+       return rel_visitor_bottomup(v, rel, &rel_remote_func_);
+}
+
+run_optimizer
+bind_remote_func(visitor *v, global_props *gp)
+{
+       (void) v;
+       return gp->needs_mergetable_rewrite || gp->needs_remote_replica_rewrite 
? rel_remote_func : NULL;
+}
diff --git a/sql/server/rel_distribute.h b/sql/server/rel_distribute.h
deleted file mode 100644
--- a/sql/server/rel_distribute.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0.  If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V.
- */
-
-#ifndef _REL_DISTRIBUTE_H_
-#define _REL_DISTRIBUTE_H_
-
-#include "sql_relation.h"
-#include "rel_rel.h"
-#include "sql_mvc.h"
-
-extern sql_rel *rel_rewrite_remote(visitor *v, sql_rel *rel);
-extern sql_rel *rel_rewrite_replica(visitor *v, sql_rel *rel);
-extern sql_rel *rel_remote_func(visitor *v, sql_rel *rel);
-
-#endif /*_REL_DISTRIBUTE_H_*/
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -17,7 +17,6 @@
 #include "rel_select.h"
 #include "rel_planner.h"
 #include "rel_propagate.h"
-#include "rel_distribute.h"
 #include "rel_rewriter.h"
 #include "sql_mvc.h"
 #include "sql_privileges.h"
@@ -664,10 +663,15 @@ const sql_optimizer pre_sql_optimizers[]
 const sql_optimizer post_sql_optimizers[] = {
        {22, "push_select_up", bind_push_select_up}, /* run rel_push_select_up 
only once at the end to avoid an infinite optimization loop */
        {23, "setjoins_2_joingroupby", bind_setjoins_2_joingroupby},
+       /* Merge table rewrites may introduce remote or replica tables */
+       /* At the moment, make sure the remote table rewriters always run last 
*/
+       {24, "rewrite_remote", bind_rewrite_remote},
+       {25, "rewrite_replica", bind_rewrite_replica},
+       {26, "remote_func", bind_remote_func},
        { 0, NULL, NULL}
 };
 
-#define NOPTIMIZERS 24
+#define NREWRITERS 27
 
 /* make sure the outer project (without order by or distinct) has all the 
aliases */
 static sql_rel *
@@ -753,7 +757,7 @@ rel_optimizer(mvc *sql, sql_rel *rel, in
        if (!(rel = rel_keep_renames(sql, rel)))
                return rel;
 
-       sql_optimizer_run *runs = profile ? sa_zalloc(sql->ta, NOPTIMIZERS * 
sizeof(sql_optimizer_run)) : NULL;
+       sql_optimizer_run *runs = profile ? sa_zalloc(sql->ta, NREWRITERS * 
sizeof(sql_optimizer_run)) : NULL;
        for ( ;rel && gp.opt_cycle < 20 && v.changes; gp.opt_cycle++) {
                v.changes = 0;
                gp = (global_props) {.cnt = {0}, .instantiate = 
(uint8_t)instantiate, .opt_cycle = gp.opt_cycle};
@@ -769,13 +773,5 @@ rel_optimizer(mvc *sql, sql_rel *rel, in
 
        /* these optimizers run statistics gathered by the last optimization 
cycle */
        rel = run_optimizer_set(&v, runs, rel, &gp, post_sql_optimizers);
-
-       /* merge table rewrites may introduce remote or replica tables */
-       /* at the moment, make sure the remote table rewriters always run last 
*/
-       if (gp.needs_mergetable_rewrite || gp.needs_remote_replica_rewrite) {
-               rel = rel_visitor_bottomup(&v, rel, &rel_rewrite_remote);
-               rel = rel_visitor_bottomup(&v, rel, &rel_rewrite_replica);
-               rel = rel_visitor_bottomup(&v, rel, &rel_remote_func);
-       }
        return rel;
 }
diff --git a/sql/server/rel_optimizer_private.h 
b/sql/server/rel_optimizer_private.h
--- a/sql/server/rel_optimizer_private.h
+++ b/sql/server/rel_optimizer_private.h
@@ -6,11 +6,11 @@
  * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V.
  */
 
-#include "monetdb_config.h"
-#include "rel_optimizer.h"
 #include "rel_rel.h"
 #include "sql_mvc.h"
 
+/* This file should be included by SQL optimizers or essential rewriters only! 
*/
+
 /* relations counts */
 typedef struct global_props {
        int cnt[ddl_maxops];
@@ -82,6 +82,9 @@ extern run_optimizer bind_distinct_proje
 extern run_optimizer bind_push_select_up(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
 extern run_optimizer bind_merge_table_rewrite(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
 extern run_optimizer bind_setjoins_2_joingroupby(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
+extern run_optimizer bind_rewrite_remote(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
+extern run_optimizer bind_rewrite_replica(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
+extern run_optimizer bind_remote_func(visitor *v, global_props *gp) 
__attribute__((__visibility__("hidden")));
 
 extern sql_rel *rel_split_project_(visitor *v, sql_rel *rel, int top) 
__attribute__((__visibility__("hidden")));
 extern sql_exp *exp_push_down_prj(mvc *sql, sql_exp *e, sql_rel *f, sql_rel 
*t) __attribute__((__visibility__("hidden")));
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to