Changeset: 7ecd52a537e1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7ecd52a537e1
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statement.c
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
Branch: pushcands
Log Message:
Merged with 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
@@ -3933,7 +3933,7 @@ sql_parse(backend *be, sql_schema *s, co
sql_rel *rel = rel_parse(be->mvc, s, query, mode);
rel_bin_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
@@ -1207,7 +1207,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
@@ -3607,7 +3607,7 @@ stmt_func(backend *be, stmt *ops, stmt *
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 -- [email protected]
To unsubscribe send an email to [email protected]