Changeset: c6eb98eadcce for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c6eb98eadcce
Modified Files:
        gdk/gdk_atoms.c
        gdk/gdk_bbp.c
        monetdb5/optimizer/opt_support.c
        sql/backends/monet5/sql.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 457 to 300 lines):

diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1148,6 +1148,8 @@ fltFromStr(const char *src, size_t *len,
                } else {
                        while (src[n] && GDKisspace(src[n]))
                                n++;
+                       if (f == -0)
+                               f = 0;
                        **dst = (flt) f;
                }
        }
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -74,6 +74,9 @@
 #include "gdk.h"
 #include "gdk_private.h"
 #include "mutils.h"
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
 
 #ifndef F_OK
 #define F_OK 0
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1007,9 +1007,8 @@ logger_open_output(logger *lg)
                return GDK_FAIL;
        }
 
-       if (LOG_DISABLED(lg)) {
-               lg->end = 0;
-       } else {
+       lg->end = 0;
+       if (!LOG_DISABLED(lg)) {
                char id[32];
                char *filename;
 
@@ -2428,8 +2427,7 @@ internal_log_bat(logger *lg, BAT *b, log
 
        if (LOG_DISABLED(lg) || !nr) {
                /* logging is switched off */
-               if (LOG_DISABLED(lg))
-                       lg->end += nr;
+               lg->end += nr;
                if (nr)
                        return la_bat_update_count(lg, id, offset+cnt);
                return GDK_SUCCEED;
@@ -2523,9 +2521,8 @@ log_bat_persists(logger *lg, BAT *b, log
                        logger_unlock(lg);
                        return GDK_FAIL;
                }
-       } else {
-               lg->end++;
        }
+       lg->end++;
        if (lg->debug & 1)
                fprintf(stderr, "#persists id (%d) bat (%d)\n", id, 
b->batCacheid);
        gdk_return r = internal_log_bat(lg, b, id, 0, BATcount(b), 0);
@@ -2549,9 +2546,8 @@ log_bat_transient(logger *lg, log_id id)
                        logger_unlock(lg);
                        return GDK_FAIL;
                }
-       } else {
-               lg->end++;
        }
+       lg->end++;
        if (lg->debug & 1)
                fprintf(stderr, "#Logged destroyed bat (%d) %d\n", id,
                                bid);
@@ -2593,8 +2589,8 @@ log_delta(logger *lg, BAT *uid, BAT *uva
        nr = (BUNlast(uval));
        assert(nr);
 
+       lg->end += nr;
        if (LOG_DISABLED(lg)) {
-               lg->end += nr;
                /* logging is switched off */
                logger_unlock(lg);
                return GDK_SUCCEED;
@@ -2648,8 +2644,8 @@ log_bat_clear(logger *lg, int id)
 {
        logformat l;
 
+       lg->end++;
        if (LOG_DISABLED(lg)) {
-               lg->end++;
                logger_lock(lg);
                gdk_return res = la_bat_update_count(lg, id, 0);
                logger_unlock(lg);
@@ -2702,8 +2698,8 @@ log_tend(logger *lg)
                return logger_commit(lg);
        }
 
+       lg->end++;
        if (LOG_DISABLED(lg)) {
-               lg->end++;
                return GDK_SUCCEED;
        }
 
@@ -2909,8 +2905,8 @@ log_tstart(logger *lg, bool flushnow)
                lg->flushnow = flushnow;
        }
 
+       lg->end++;
        if (LOG_DISABLED(lg)) {
-               lg->end++;
                return GDK_SUCCEED;
        }
 
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -49,7 +49,7 @@ isOptimizerEnabled(MalBlkPtr mb, const c
                q= getInstrPtr(mb,i);
                if ( q->token == ENDsymbol)
                        break;
-               if ( getModuleId(q) == optimizerRef && getFunctionId(q) == opt)
+               if ( q->token != REMsymbol && getModuleId(q) == optimizerRef && 
getFunctionId(q) == opt)
                        return 1;
        }
        return 0;
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
@@ -75,10 +75,10 @@ exp_is_point_select(sql_exp *e)
 }
 
 static int
-rel_no_mitosis(sql_rel *rel)
+rel_no_mitosis(mvc *sql, sql_rel *rel)
 {
-       int is_point = 0;
-
+       if (mvc_highwater(sql))
+               return 0;
        if (!rel || is_basetable(rel->op))
                return 1;
        /* use mitosis on order topn */
@@ -88,20 +88,17 @@ rel_no_mitosis(sql_rel *rel)
                        return 0;
        }
        if (is_topn(rel->op) || is_sample(rel->op) || 
is_simple_project(rel->op))
-               return rel_no_mitosis(rel->l);
-       if (is_modify(rel->op) && rel->card <= CARD_AGGR) {
-               if (is_delete(rel->op) || is_merge(rel->op))
+               return rel_no_mitosis(sql, rel->l);
+       if ((is_delete(rel->op) || is_truncate(rel->op)) && rel->card <= 
CARD_AGGR)
+               return 1;
+       if ((is_insert(rel->op) || is_update(rel->op)) && rel->card <= 
CARD_AGGR)
+               return rel_no_mitosis(sql, rel->r);
+       if (is_select(rel->op) && rel_is_table(rel->l) && 
!list_empty(rel->exps)) {
+               /* just one point expression makes this a point query */
+               if (exp_is_point_select(rel->exps->h->data))
                        return 1;
-               return rel_no_mitosis(rel->r);
-       }
-       if (is_select(rel->op) && rel_is_table(rel->l) && rel->exps) {
-               is_point = 0;
-               /* just one point expression makes this a point query */
-               if (rel->exps->h)
-                       if (exp_is_point_select(rel->exps->h->data))
-                               is_point = 1;
-       }
-       return is_point;
+       }
+       return 0;
 }
 
 static int
@@ -109,16 +106,14 @@ rel_need_distinct_query(sql_rel *rel)
 {
        int need_distinct = 0;
 
-       while (!need_distinct && rel && is_simple_project(rel->op))
+       while (rel && is_simple_project(rel->op))
                rel = rel->l;
-       if (!need_distinct && rel && is_groupby(rel->op) && rel->exps && 
!rel->r) {
+       if (rel && is_groupby(rel->op) && !list_empty(rel->exps) && 
list_empty(rel->r)) {
                for (node *n = rel->exps->h; n && !need_distinct; n = n->next) {
                        sql_exp *e = n->data;
-                       if (e->type == e_aggr) {
-
-                               if (need_distinct(e))
-                                       need_distinct = 1;
-                       }
+
+                       if (e->type == e_aggr && need_distinct(e))
+                               need_distinct = 1;
                }
        }
        return need_distinct;
@@ -140,7 +135,7 @@ sql_symbol2relation(backend *be, symbol 
                rel = rel_distribute(be->mvc, rel);
        if (rel)
                rel = rel_partition(be->mvc, rel);
-       if (rel && (rel_no_mitosis(rel) || rel_need_distinct_query(rel)))
+       if (rel && (rel_no_mitosis(be->mvc, rel) || 
rel_need_distinct_query(rel)))
                be->no_mitosis = 1;
        be->reloptimizer = GDKusec() - Tbegin;
        return rel;
diff --git a/sql/benchmarks/tpcds/Tests/one.test.in 
b/sql/benchmarks/tpcds/Tests/one.test.in
--- a/sql/benchmarks/tpcds/Tests/one.test.in
+++ b/sql/benchmarks/tpcds/Tests/one.test.in
@@ -267,7 +267,7 @@ create table customer
     c_birth_country           varchar(20)                   ,
     c_login                   char(13)                      ,
     c_email_address           char(50)                      ,
-    c_last_review_date_sk     integer                       ,
+    c_last_review_date        integer                       ,
     primary key (c_customer_sk)
 )
 
@@ -3674,7 +3674,7 @@ with customer_total_return as
          ,ca_state)
   select  
c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
        
,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
-       ,c_last_review_date_sk,ctr_total_return
+       ,c_last_review_date,ctr_total_return
  from customer_total_return ctr1
      ,customer_address
      ,customer
@@ -3686,7 +3686,7 @@ with customer_total_return as
        and ctr1.ctr_customer_sk = c_customer_sk
  order by 
c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
                   
,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
-                  ,c_last_review_date_sk,ctr_total_return
+                  ,c_last_review_date,ctr_total_return
 limit 100
 ----
 1300 values hashing to 4b80e4995150e5b42229a363bb57dd07
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2050,7 +2050,7 @@ exps_rel_get_rel(sql_allocator *sa, list
                if (exp_has_rel(e)) {
                        if (!(r = exp_rel_get_rel(sa, e)))
                                return NULL;
-                       xp = xp ? rel_crossproduct(sa, xp, r, op_join) : r;
+                       xp = xp ? rel_crossproduct(sa, xp, r, op_full) : r;
                }
        }
        return xp;
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -824,7 +824,7 @@ push_up_project(mvc *sql, sql_rel *rel, 
        }
 
        /* input rel is dependent outerjoin with on the right a project, we 
first try to push inner side expressions down (because these cannot be pushed 
up) */
-       if (rel && is_outerjoin(rel->op) && is_dependent(rel)) {
+       if (rel && is_join(rel->op) && is_dependent(rel)) {
                sql_rel *r = rel->r;
 
                /* find constant expressions and move these down */
@@ -834,11 +834,11 @@ push_up_project(mvc *sql, sql_rel *rel, 
                        list *cexps = NULL;
                        sql_rel *l = r->l;
 
-                       if (l && is_select(l->op) && !rel_is_ref(l)) {
+                       if (l && (is_select(l->op) || l->op == op_join) && 
!rel_is_ref(l)) {
                                for(n=r->exps->h; n; n=n->next) {
                                        sql_exp *e = n->data;
 
-                                       if (exp_is_atom(e) || 
rel_find_exp(l,e)) { /* move down */
+                                       if (exp_is_atom(e) || 
rel_find_exp(l->l,e)) { /* move down */
                                                if (!cexps)
                                                        cexps = 
sa_list(sql->sa);
                                                append(cexps, e);
@@ -2498,6 +2498,7 @@ rel_union_exps(mvc *sql, sql_exp **l, li
                } else {
                        u = rel_setop(sql->sa, u, sq, op_union);
                        rel_setop_set_exps(sql, u, exps, false);
+                       set_distinct(u);
                        set_processed(u);
                }
                exps = rel_projections(sql, sq, NULL, 1/*keep names */, 1);
@@ -2648,11 +2649,16 @@ rewrite_anyequal(visitor *v, sql_rel *re
 
                                if (sq) {
                                        sql_rel *l = NULL, *rewrite = NULL;
-                                       (void)rewrite_inner(sql, rel, lsq, 
op_join, &rewrite);
+                                       if (rsq && lsq->card == CARD_ATOM && 
rsq->card == CARD_ATOM) { /* add project true */
+                                               lsq = rel_crossproduct(sql->sa, 
lsq, rsq, op_full);
+                                               lsq = rel_crossproduct(sql->sa, 
rel_project_exp(sql->sa, exp_atom_bool(sql->sa, 1)), lsq, op_left);
+                                               rsq = 0;
+                                       }
+                                       (void)rewrite_inner(sql, rel, lsq, 
rel->card <= CARD_ATOM?op_left:op_join, &rewrite);
                                        if (is_left(rewrite->op))
                                                reset_has_nil(rewrite, le);
                                        l = rel->l;
-                                       if (l && on_right && !is_join(l->op))
+                                       if (l && on_right && (!is_join(l->op) 
|| (is_project(rel->op) && lsq->card <= CARD_ATOM && rsq->card <= CARD_ATOM)))
                                                on_right = 0;
                                }
                                if (rsq) {
@@ -2717,7 +2723,7 @@ rewrite_anyequal(visitor *v, sql_rel *re
                        } else {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to