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