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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list