Changeset: e9534d1efdbe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e9534d1efdbe
Added Files:
        sql/server/rel_statistics.c
        sql/server/rel_statistics.h
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_upgrades.c
        sql/server/CMakeLists.txt
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_optimizer.h
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_partition.c
        tools/monetdbe/monetdbe.c
Branch: properties
Log Message:

Cleanup, properties should be orthogonal to the SQL layer, so propagate them at 
rel_statistics


diffs (truncated from 1203 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
@@ -3579,7 +3579,7 @@ sql_parse(backend *be, const char *query
        sql_rel *rel = rel_parse(be->mvc, be->mvc->session->schema, 
(char*)query, mode);
        stmt *sq = NULL;
 
-       if ((rel = sql_processrelation(be->mvc, rel, 1)))
+       if ((rel = sql_processrelation(be->mvc, rel, 1, 1)))
                sq = rel_bin(be, rel);
        return sq;
 }
@@ -3815,15 +3815,8 @@ sql_stack_add_inserted( mvc *sql, const 
                sql_exp *ne;
                sql_column *c = n->data;
                bool has_nils = c->null;
-               ValPtr min = NULL, max = NULL;
-
-               if (sql->storage_opt_allowed) {
-                       if (has_nils && mvc_has_no_nil(sql, c))
-                               has_nils = false;
-                       min = mvc_has_min_value(sql, c);
-                       max = mvc_has_max_value(sql, c);
-               }
-               ne = exp_column(sql->sa, name, c->base.name, &c->type, 
CARD_MULTI, has_nils, 0, min, max);
+
+               ne = exp_column(sql->sa, name, c->base.name, &c->type, 
CARD_MULTI, has_nils, 0);
                append(exps, ne);
        }
        r = rel_table_func(sql->sa, NULL, NULL, exps, TRIGGER_WRAPPER);
@@ -4739,23 +4732,16 @@ sql_stack_add_updated(mvc *sql, const ch
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
                bool has_nils = c->null;
-               ValPtr min = NULL, max = NULL;
-
-               if (sql->storage_opt_allowed) {
-                       if (has_nils && mvc_has_no_nil(sql, c))
-                               has_nils = false;
-                       min = mvc_has_min_value(sql, c);
-                       max = mvc_has_max_value(sql, c);
-               }
+
                if (updates[c->colnr]) {
-                       sql_exp *oe = exp_column(sql->sa, on, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0, min, max);
-                       sql_exp *ne = exp_column(sql->sa, nn, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0, min, max);
+                       sql_exp *oe = exp_column(sql->sa, on, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0);
+                       sql_exp *ne = exp_column(sql->sa, nn, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0);
 
                        append(exps, oe);
                        append(exps, ne);
                } else {
-                       sql_exp *oe = exp_column(sql->sa, on, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0, min, max);
-                       sql_exp *ne = exp_column(sql->sa, nn, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0, min, max);
+                       sql_exp *oe = exp_column(sql->sa, on, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0);
+                       sql_exp *ne = exp_column(sql->sa, nn, c->base.name, 
&c->type, CARD_MULTI, has_nils, 0);
 
                        append(exps, oe);
                        append(exps, ne);
@@ -5044,17 +5030,8 @@ sql_stack_add_deleted(mvc *sql, const ch
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
                bool has_nils = c->null;
-               ValPtr min = NULL, max = NULL;
-
-               if (sql->storage_opt_allowed) {
-                       if (has_nils && mvc_has_no_nil(sql, c))
-                               has_nils = false;
-                       min = mvc_has_min_value(sql, c);
-                       max = mvc_has_max_value(sql, c);
-               }
-               sql_exp *ne = exp_column(sql->sa, name, c->base.name, &c->type, 
CARD_MULTI, has_nils, 0, min, max);
-
-               append(exps, ne);
+
+               append(exps, exp_column(sql->sa, name, c->base.name, &c->type, 
CARD_MULTI, has_nils, 0));
        }
        r = rel_table_func(sql->sa, NULL, NULL, exps, TRIGGER_WRAPPER);
        r->l = ti;
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
@@ -26,6 +26,7 @@
 #include "sql_partition.h"
 #include "rel_unnest.h"
 #include "rel_optimizer.h"
+#include "rel_statistics.h"
 #include "rel_partition.h"
 #include "rel_distribute.h"
 #include "rel_select.h"
@@ -115,21 +116,22 @@ sql_symbol2relation(backend *be, symbol 
        sql_rel *rel;
        sql_query *query = query_create(be->mvc);
        lng Tbegin;
-       bool prev_storage_opt_allowed = be->mvc->storage_opt_allowed;
-
-       be->mvc->storage_opt_allowed = be->mvc->emode != m_prepare; /* Don't 
perform storage optimizations on prepared statements */
+       int value_based_opt = be->mvc->emode != m_prepare, storage_based_opt;
+
        rel = rel_semantic(query, sym);
+       storage_based_opt = value_based_opt && rel && !is_ddl(rel->op);
        Tbegin = GDKusec();
        if (rel)
-               rel = sql_processrelation(be->mvc, rel, be->mvc->emode != 
m_prepare);
+               rel = sql_processrelation(be->mvc, rel, value_based_opt, 
storage_based_opt);
        if (rel)
                rel = rel_distribute(be->mvc, rel);
        if (rel)
                rel = rel_partition(be->mvc, rel);
+       if (rel && storage_based_opt)
+               rel = rel_statistics(be->mvc, rel);
        if (rel && (rel_no_mitosis(rel) || rel_need_distinct_query(rel)))
                be->no_mitosis = 1;
        be->reloptimizer = GDKusec() - Tbegin;
-       be->mvc->storage_opt_allowed = prev_storage_opt_allowed;
        return rel;
 }
 
@@ -434,7 +436,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);
+                       r = sql_processrelation(sql, r, 0, 0);
                if (r) {
                        list *id_l = rel_dependencies(sql, r);
                        mvc_create_dependencies(sql, id_l, 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
@@ -470,7 +470,6 @@ create_trigger(mvc *sql, char *sname, ch
                char *buf;
                sql_rel *r = NULL;
                sql_allocator *sa = sql->sa;
-               bool prev_storage_opt_allowed = sql->storage_opt_allowed;
 
                sql->sa = sa_create(sql->pa);
                if (!sql->sa)
@@ -478,11 +477,9 @@ create_trigger(mvc *sql, char *sname, ch
                buf = sa_strdup(sql->sa, query);
                if (!buf)
                        throw(SQL, "sql.catalog",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               sql->storage_opt_allowed = false; /* can't do storage related 
optimizations while compiling a trigger */
                r = rel_parse(sql, s, buf, m_deps);
                if (r)
-                       r = sql_processrelation(sql, r, 0);
-               sql->storage_opt_allowed = prev_storage_opt_allowed;
+                       r = sql_processrelation(sql, r, 0, 0);
                if (r) {
                        list *id_l = rel_dependencies(sql, r);
                        mvc_create_dependencies(sql, id_l, tri->base.id, 
TRIGGER_DEPENDENCY);
@@ -807,18 +804,15 @@ create_func(mvc *sql, char *sname, char 
                char *buf;
                sql_rel *r = NULL;
                sql_allocator *sa = sql->sa;
-               bool prev_storage_opt_allowed = sql->storage_opt_allowed;
 
                assert(nf->query);
                if (!(sql->sa = sa_create(sql->pa)))
                        throw(SQL, "sql.create_func", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                if (!(buf = sa_strdup(sql->sa, nf->query)))
                        throw(SQL, "sql.create_func", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
-               sql->storage_opt_allowed = false; /* can't do storage related 
optimizations while compiling a function */
                r = rel_parse(sql, s, buf, m_deps);
                if (r)
-                       r = sql_processrelation(sql, r, 0);
-               sql->storage_opt_allowed = prev_storage_opt_allowed;
+                       r = sql_processrelation(sql, r, 0, 0);
                if (r) {
                        node *n;
                        list *id_l = 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
@@ -771,7 +771,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                int oldstop = c->curprg->def->stop;
 
                if (*opt && rel)
-                       rel = sql_processrelation(m, rel, 1);
+                       rel = sql_processrelation(m, rel, 1, 1);
 
                if ((msg = MSinitClientPrg(c, "user", "test")) != MAL_SUCCEED) {
                        rel_destroy(rel);
@@ -902,7 +902,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
        rel = rel_read(m, expr, &pos, refs);
        stack_pop_frame(m);
        if (rel)
-               rel = sql_processrelation(m, rel, 1);
+               rel = sql_processrelation(m, rel, 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
@@ -1130,7 +1130,6 @@ backend_create_sql_func(backend *be, sql
        int i, retseen = 0, sideeffects = 0, vararg = (f->varres || f->vararg), 
no_inline = 0, clientid = be->mvc->clientid;
        sql_rel *r;
        str msg = MAL_SUCCEED;
-       bool prev_storage_opt_allowed = m->storage_opt_allowed;
 
        /* nothing to do for internal and ready (not recompiling) functions, 
besides finding respective MAL implementation */
        if (!f->sql && (f->lang == FUNC_LANG_INT || f->lang == FUNC_LANG_MAL)) {
@@ -1148,15 +1147,13 @@ backend_create_sql_func(backend *be, sql
                return 0;
        if (!vararg)
                f->sql++;
-       m->storage_opt_allowed = false; /* can't do storage related 
optimizations while compiling a function */
        r = rel_parse(m, f->s, f->query, m_instantiate);
        if (r)
-               r = sql_processrelation(m, r, 1);
+               r = sql_processrelation(m, r, 1, 1);
        if (r)
                r = rel_distribute(m, r);
        if (r)
                r = rel_partition(m, r);
-       m->storage_opt_allowed = prev_storage_opt_allowed;
        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
@@ -3415,7 +3415,7 @@ stmt_func(backend *be, stmt *ops, const 
        p = find_prop(rel->p, PROP_REMOTE);
        if (p)
                rel->p = prop_remove(rel->p, p);
-       rel = sql_processrelation(be->mvc, rel, 1);
+       rel = sql_processrelation(be->mvc, rel, 1, 1);
        if (p) {
                p->p = rel->p;
                rel->p = 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
@@ -1051,18 +1051,15 @@ sql_update_nov2019_missing_dependencies(
                                if (f->query && f->lang == FUNC_LANG_SQL) {
                                        char *relt;
                                        sql_rel *r = NULL;
-                                       bool prev_storage_opt_allowed = 
sql->storage_opt_allowed;
 
                                        if (!(relt = sa_strdup(sql->sa, 
f->query))) {
                                                err = createException(SQL, 
"sql.catalog", SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                                goto bailout;
                                        }
 
-                                       sql->storage_opt_allowed = false;
                                        r = rel_parse(sql, s, relt, m_deps);
                                        if (r)
-                                               r = sql_processrelation(sql, r, 
0);
-                                       sql->storage_opt_allowed = 
prev_storage_opt_allowed;
+                                               r = sql_processrelation(sql, r, 
0, 0);
                                        if (r) {
                                                list *id_l = 
rel_dependencies(sql, r);
 
@@ -1088,18 +1085,15 @@ sql_update_nov2019_missing_dependencies(
                                if (t->query && isView(t)) {
                                        char *relt;
                                        sql_rel *r = NULL;
-                                       bool prev_storage_opt_allowed = 
sql->storage_opt_allowed;
 
                                        if (!(relt = sa_strdup(sql->sa, 
t->query))) {
                                                err = createException(SQL, 
"sql.catalog", SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                                goto bailout;
                                        }
 
-                                       sql->storage_opt_allowed = false;
                                        r = rel_parse(sql, s, relt, m_deps);
                                        if (r)
-                                               r = sql_processrelation(sql, r, 
0);
-                                       sql->storage_opt_allowed = 
prev_storage_opt_allowed;
+                                               r = sql_processrelation(sql, r, 
0, 0);
                                        if (r) {
                                                list *id_l = 
rel_dependencies(sql, r);
 
@@ -1119,18 +1113,15 @@ sql_update_nov2019_missing_dependencies(
                                                sql_trigger *tr = 
(sql_trigger*) mm->data;
                                                char *relt;
                                                sql_rel *r = NULL;
-                                               bool prev_storage_opt_allowed = 
sql->storage_opt_allowed;
 
                                                if (!(relt = sa_strdup(sql->sa, 
tr->statement))) {
                                                        err = 
createException(SQL, "sql.catalog", SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                                        goto bailout;
                                                }
 
-                                               sql->storage_opt_allowed = 
false;
                                                r = rel_parse(sql, s, relt, 
m_deps);
                                                if (r)
-                                                       r = 
sql_processrelation(sql, r, 0);
-                                               sql->storage_opt_allowed = 
prev_storage_opt_allowed;
+                                                       r = 
sql_processrelation(sql, r, 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
@@ -45,6 +45,7 @@ target_sources(sqlserver
   rel_rewriter.c
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to