Changeset: f960dda8762c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f960dda8762c
Modified Files:
monetdb5/optimizer/opt_mitosis.c
sql/backends/monet5/rel_bin.c
sql/server/rel_rel.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: default
Log Message:
merged with Dec2016
diffs (176 lines):
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -63,7 +63,14 @@ OPTmitosisImplementation(Client cntxt, M
getFunctionId(p) != submaxRef &&
getFunctionId(p) != subavgRef &&
getFunctionId(p) != subsumRef &&
- getFunctionId(p) != subprodRef)
+ getFunctionId(p) != subprodRef &&
+
+ getFunctionId(p) != countRef &&
+ getFunctionId(p) != minRef &&
+ getFunctionId(p) != maxRef &&
+ getFunctionId(p) != avgRef &&
+ getFunctionId(p) != sumRef &&
+ getFunctionId(p) != prodRef)
return 0;
if (p->argc > 2 && (getModuleId(p) == rapiRef || getModuleId(p)
== pyapiRef) &&
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
@@ -578,39 +578,47 @@ exp_bin(backend *be, sql_exp *e, stmt *l
sel1 = sel;
sel2 = sel;
for( n = l->h; n; n = n->next ) {
- s = exp_bin(be, n->data, left, right, grp, ext,
cnt, sel1);
+ stmt *sin = (sel1 && sel1->nrcols)?sel1:NULL;
+
+ s = exp_bin(be, n->data, left, right, grp, ext,
cnt, sin);
if (!s)
return s;
- if (sel1 && sel1->nrcols == 0 && s->nrcols ==
0) {
+ if (!sin && sel1 && sel1->nrcols == 0 &&
s->nrcols == 0) {
sql_subtype *bt =
sql_bind_localtype("bit");
sql_subfunc *f = sql_bind_func(sql->sa,
sql->session->schema, "and", bt, bt, F_FUNC);
assert(f);
s = stmt_binop(be, sel1, s, f);
- }
- if (sel1 && sel1->nrcols && s->nrcols == 0) {
+ } else if (sel1 && (sel1->nrcols == 0 ||
s->nrcols == 0)) {
stmt *predicate = bin_first_column(be,
left);
predicate = stmt_const(be, predicate,
stmt_bool(be, 1));
- s = stmt_uselect(be, predicate, s,
cmp_equal, sel1, 0);
+ if (s->nrcols == 0)
+ s = stmt_uselect(be, predicate,
s, cmp_equal, sel1, 0);
+ else
+ s = stmt_uselect(be, predicate,
sel1, cmp_equal, s, 0);
}
sel1 = s;
}
l = e->r;
for( n = l->h; n; n = n->next ) {
- s = exp_bin(be, n->data, left, right, grp, ext,
cnt, sel2);
+ stmt *sin = (sel2 && sel2->nrcols)?sel2:NULL;
+
+ s = exp_bin(be, n->data, left, right, grp, ext,
cnt, sin);
if (!s)
return s;
- if (sel2 && sel2->nrcols == 0 && s->nrcols ==
0) {
+ if (!sin && sel2 && sel2->nrcols == 0 &&
s->nrcols == 0) {
sql_subtype *bt =
sql_bind_localtype("bit");
sql_subfunc *f = sql_bind_func(sql->sa,
sql->session->schema, "and", bt, bt, F_FUNC);
assert(f);
s = stmt_binop(be, sel2, s, f);
- }
- if (sel2 && sel2->nrcols && s->nrcols == 0) {
+ } else if (sel2 && (sel2->nrcols == 0 ||
s->nrcols == 0)) {
stmt *predicate = bin_first_column(be,
left);
predicate = stmt_const(be, predicate,
stmt_bool(be, 1));
- s = stmt_uselect(be, predicate, s,
cmp_equal, sel2, 0);
+ if (s->nrcols == 0)
+ s = stmt_uselect(be, predicate,
s, cmp_equal, sel2, 0);
+ else
+ s = stmt_uselect(be, predicate,
sel2, cmp_equal, s, 0);
}
sel2 = s;
}
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -691,6 +691,8 @@ dup_idx(sql_trans *tr, sql_idx *i, sql_i
{
int ok = LOG_OK;
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ return ok;
if (i->data) {
int type = (oid_index(ni->type))?TYPE_oid:TYPE_lng;
sql_delta *bat = ni->data = ZNEW(sql_delta), *obat = i->data;
@@ -898,6 +900,8 @@ delete_tab(sql_trans *tr, sql_table * t,
sql_idx *i = n->data;
sql_delta *bat;
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ continue;
if (!i->data) {
sql_idx *oi = tr_find_idx(tr->parent, i);
i->data = timestamp_delta(oi->data, tr->stime);
@@ -979,7 +983,7 @@ count_idx(sql_trans *tr, sql_idx *i, int
{
sql_delta *b;
- if (!isTable(i->t))
+ if (!isTable(i->t) || !idx_has_column(i->type))
return 0;
if (!i->data) {
sql_idx *oi = tr_find_idx(tr->parent, i);
@@ -1032,7 +1036,8 @@ count_idx_upd(sql_trans *tr, sql_idx *i)
{
sql_delta *b;
- assert (isTable(i->t)) ;
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ return 0;
if (!i->data) {
sql_idx *oi = tr_find_idx(tr->parent, i);
if (oi)
@@ -1062,6 +1067,8 @@ count_upd(sql_trans *tr, sql_table *t)
for( n = t->idxs.set->h; n; n = n->next) {
sql_idx *i = n->data;
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ continue;
if (count_idx_upd(tr, i))
return 1;
}
@@ -1699,10 +1706,14 @@ clear_col(sql_trans *tr, sql_column *c)
static BUN
clear_idx(sql_trans *tr, sql_idx *i)
{
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ return 0;
if (!i->data || !i->base.allocated) {
int type = (oid_index(i->type))?TYPE_oid:TYPE_lng;
sql_idx *oi = tr_find_idx(tr->parent, i);
- sql_delta *bat = i->data = ZNEW(sql_delta), *obat =
timestamp_delta(oi->data, tr->stime);
+ sql_delta *bat = i->data = ZNEW(sql_delta), *obat;
+
+ obat = timestamp_delta(oi->data, tr->stime);
(void)dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag
== TR_NEW);
i->base.allocated = 1;
}
@@ -1767,6 +1778,8 @@ empty_idx(sql_idx *i)
int type = (oid_index(i->type))?TYPE_oid:TYPE_lng;
sql_delta *bat = i->data;
+ if (!isTable(i->t) || !idx_has_column(i->type))
+ return ;
assert(i->data && i->base.allocated && bat->bid == 0);
bat->bid = bat->ibid;
bat->ibid = e_bat(type);
@@ -1949,6 +1962,8 @@ gtr_update_table(sql_trans *tr, sql_tabl
sql_idx *ci = n->data;
/* some indices have no bats */
+ if (!isTable(ci->t) || !idx_has_column(ci->type))
+ continue;
if (!ci->base.wtime || ci->base.wtime <=
ci->base.allocated)
continue;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4538,7 +4538,8 @@ sql_trans_clear_table(sql_trans *tr, sql
sql_idx *ci = n->data;
ci->base.wtime = tr->wstime;
- (void)store_funcs.clear_idx(tr, ci);
+ if (isTable(ci->t) && idx_has_column(ci->type))
+ (void)store_funcs.clear_idx(tr, ci);
}
}
return sz;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list