MonetDB: nospare - Make rollback respect safepoints.

2021-01-22 Thread Aris Koning
Changeset: 2ae3a70476c2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2ae3a70476c2
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:

Make rollback respect safepoints.


diffs (27 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -330,8 +330,9 @@ os_rollback_os_id_based_cascading(object
assert(state & id_based_rollbacked);
 
if (ov->id_based_older) {
-   if (ov->id_based_older->ts < TRANSACTION_ID_BASE) {
-   // older is last committed state. Restore versionhead  
pointer to that.
+   if (ov->ts != ov->id_based_older->ts) {
+   // older is last committed state or belongs to parent 
transaction.
+   // In any case, we restore versionhead pointer to that.
// TODO START ATOMIC SET
ov->id_based_head->ov = ov->id_based_older;
}
@@ -359,8 +360,9 @@ os_rollback_os_name_based_cascading(obje
assert(state & name_based_rollbacked);
 
if (ov->name_based_older) {
-   if (ov->name_based_older->ts < TRANSACTION_ID_BASE) {
-   // older is last committed state. Restore versionhead  
pointer to that.
+   if (ov->ts != ov->name_based_older->ts) {
+   // older is last committed state or belongs to parent 
transaction.
+   // In any case, we restore versionhead pointer to that.
// TODO START ATOMIC SET
ov->name_based_head->ov = ov->name_based_older;
}
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - Ported Jun2020-mmt fixes into nospare

2021-01-22 Thread Pedro Ferreira
Changeset: c3a1778b4d1a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c3a1778b4d1a
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/include/sql_catalog.h
sql/server/rel_distribute.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_partition.c
sql/storage/sql_catalog.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

Ported Jun2020-mmt fixes into nospare


diffs (truncated from 540 to 300 lines):

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
@@ -416,14 +416,6 @@ create_table_or_view(mvc *sql, char* sna
mvc_copy_key(sql, nt, k);
}
}
-   /*
-   if (t->members) {
-   for (n = t->members->h; n; n = n->next) {
-   sql_part *pt = n->data;
-   mvc_copy_part(sql, nt, pt);
-   }
-   }
-   */
if (t->triggers.set) {
for (n = t->triggers.set->h; n; n = n->next) {
sql_trigger *tr = n->data;
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
@@ -158,7 +158,7 @@ validate_alter_table_add_table(mvc *sql,
const char *errtable = TABLE_TYPE_DESCRIPTION(rmt->type, 
rmt->properties);
if (!update && (!isMergeTable(rmt) && !isReplicaTable(rmt)))
throw(SQL,call,SQLSTATE(42S02) "ALTER TABLE: cannot add table 
'%s.%s' to %s '%s.%s'", psname, ptname, errtable, msname, mtname);
-   node *n = cs_find_id(&rmt->members, rpt->base.id);
+   node *n = members_find_child_id(rmt->members.set, rpt->base.id);
if (isView(rpt))
throw(SQL,call,SQLSTATE(42000) "ALTER TABLE: can't add a view 
into a %s", errtable);
if (isDeclaredTable(rpt))
@@ -421,7 +421,7 @@ alter_table_del_table(mvc *sql, char *ms
const char *errtable = TABLE_TYPE_DESCRIPTION(mt->type, mt->properties);
if (!isMergeTable(mt) && !isReplicaTable(mt))
throw(SQL,"sql.alter_table_del_table",SQLSTATE(42S02) "ALTER 
TABLE: cannot drop table '%s.%s' to %s '%s.%s'", psname, ptname, errtable, 
msname, mtname);
-   if (!(n = cs_find_id(&mt->members, pt->base.id)))
+   if (!(n = members_find_child_id(mt->members.set, pt->base.id)))
throw(SQL,"sql.alter_table_del_table",SQLSTATE(42S02) "ALTER 
TABLE: table '%s.%s' isn't part of %s '%s.%s'", ps->base.name, ptname, 
errtable, ms->base.name, mtname);
 
sql_trans_del_table(sql->session->tr, mt, pt, drop_action);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -759,7 +759,6 @@ extern sql_idx *find_sql_idx(sql_table *
 extern sql_idx *sql_trans_find_idx(sql_trans *tr, sqlid id);
 
 extern sql_column *find_sql_column(sql_table *t, const char *cname);
-extern sql_part *find_sql_part_id(sql_table *t, sqlid id);
 
 extern sql_table *find_sql_table(sql_trans *tr, sql_schema *s, const char 
*tname);
 extern sql_table *find_sql_table_id(sql_trans *tr, sql_schema *s, sqlid id);
@@ -792,6 +791,7 @@ typedef struct {
 
 extern int nested_mergetable(sql_trans *tr, sql_table *t, const char *sname, 
const char *tname);
 extern sql_part *partition_find_part(sql_trans *tr, sql_table *pt, sql_part 
*pp);
+extern node *members_find_child_id(list *l, sqlid id);
 
 #define outside_str 1
 #define inside_str 2
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -81,7 +81,7 @@ static sql_rel *
 rewrite_replica( mvc *sql, sql_rel *rel, sql_table *t, sql_part *pd, int 
remote_prop)
 {
node *n, *m;
-   sql_table *p = find_sql_table_id(sql->session->tr, t->s, pd->base.id);
+   sql_table *p = find_sql_table_id(sql->session->tr, t->s, 
pd->member->base.id);
sql_rel *r = rel_basetable(sql, p, t->base.name);
 
for (n = rel->exps->h, m = r->exps->h; n && m; n = n->next, m = 
m->next) {
@@ -197,7 +197,7 @@ replica(mvc *sql, sql_rel *rel, char *ur
/* replace by the replica which matches the uri 
*/
for (n = t->members.set->h; n; n = n->next) {
sql_part *p = n->data;
-   sql_table *pt = 
find_sql_table_id(sql->session->tr, t->s, p->base.id);
+   sql_table *pt = 
find_sql_table_id(sql->session->tr, t->s, p->member->base.id);
 
if (isRemote(pt) && strcmp(uri, 
pt->query) == 0) {
rel = rewrite_replica(sql, r

MonetDB: Oct2020 - Forgot the other case

2021-01-22 Thread Pedro Ferreira
Changeset: 0306967a1af0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0306967a1af0
Modified Files:
sql/server/rel_optimizer.c
Branch: Oct2020
Log Message:

Forgot the other case


diffs (15 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1553,9 +1553,9 @@ rel_push_func_down(visitor *v, sql_rel *
sql_rel *l = pl->l, *r = pl->r;
list *nexps = new_exp_list(v->sql->sa);
 
-   if (push_left && !is_simple_project(l->op))
+   if (push_left && (!is_simple_project(l->op) || !l->l))
pl->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (push_right && !is_simple_project(r->op))
+   if (push_right && (!is_simple_project(r->op)|| !r->l))
pl->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
for (node *n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Merged with Oct2020

2021-01-22 Thread Pedro Ferreira
Changeset: b44902c141d5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b44902c141d5
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:

Merged with Oct2020


diffs (87 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1353,7 +1353,7 @@ can_push_func(sql_exp *e, sql_rel *rel, 
int mustl = 0, mustr = 0, mustf = 0;
sql_exp *l = e->l, *r = e->r, *f = e->f;
 
-   if (is_project(rel->op) || e->flag == cmp_or || e->flag == 
cmp_in || e->flag == cmp_notin || e->flag == cmp_filter)
+   if ((is_project(rel->op) && e->f) || e->flag == cmp_or || 
e->flag == cmp_in || e->flag == cmp_notin || e->flag == cmp_filter)
return 0;
return ((l->type == e_column || can_push_func(l, rel, &mustl)) 
&& (*must = mustl)) ||
(!f && (r->type == e_column || can_push_func(r, 
rel, &mustr)) && (*must = mustr)) ||
@@ -1388,17 +1388,20 @@ can_push_func(sql_exp *e, sql_rel *rel, 
 }
 
 static int
-exps_can_push_func(list *exps, sql_rel *rel)
-{
-   for(node *n = exps->h; n; n = n->next) {
+exps_can_push_func(list *exps, sql_rel *rel, bool *push_left, bool *push_right)
+{
+   for(node *n = exps->h; n && !*push_left && !*push_right; n = n->next) {
sql_exp *e = n->data;
-   int must = 0, mustl = 0, mustr = 0;
-
-   if (is_joinop(rel->op) && ((can_push_func(e, rel->l, &mustl) && 
mustl) || (can_push_func(e, rel->r, &mustr) && mustr)))
-   return 1;
-   else if (is_select(rel->op) && can_push_func(e, rel->l, &must) 
&& must)
-   return 1;
-   }
+   int mustl = 0, mustr = 0;
+
+   if ((is_joinop(rel->op) || is_select(rel->op)) && 
((can_push_func(e, rel->l, &mustl) && mustl)))
+   *push_left = true;
+   
+   if (is_joinop(rel->op) && can_push_func(e, rel->r, &mustr) && 
mustr)
+   *push_right = true;
+   }
+   if (*push_left || *push_right)
+   return 1;
return 0;
 }
 
@@ -1512,19 +1515,20 @@ rel_push_func_down(visitor *v, sql_rel *
if ((is_select(rel->op) || is_joinop(rel->op)) && rel->l && rel->exps 
&& !(rel_is_ref(rel))) {
list *exps = rel->exps;
sql_rel *l = rel->l, *r = rel->r;
+   bool push_left = false, push_right = false;
 
/* only push down when is useful */
if ((is_select(rel->op) && list_length(rel->exps) <= 1) || 
rel_is_ref(l) || (is_joinop(rel->op) && rel_is_ref(r)))
return rel;
-   if (exps_can_push_func(exps, rel) && exps_need_push_down(exps)) 
{
+   if (exps_can_push_func(exps, rel, &push_left, &push_right) && 
exps_need_push_down(exps)) {
sql_rel *nrel, *ol = l, *or = r;
visitor nv = { .sql = v->sql, .parent = v->parent, 
.value_based_opt = v->value_based_opt, .storage_based_opt = 
v->storage_based_opt };
 
/* we need a full projection, group by's and unions 
cannot be extended
 * with more expressions */
-   if (!is_simple_project(l->op) || !l->l)
+   if (push_left && (!is_simple_project(l->op) || !l->l))
rel->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (is_joinop(rel->op) && (!is_simple_project(r->op) || 
!r->l))
+   if (push_right && (!is_simple_project(r->op)|| !r->l))
rel->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
nrel = rel_project(v->sql->sa, rel, 
rel_projections(v->sql, rel, NULL, 1, 1));
 
@@ -1543,14 +1547,15 @@ rel_push_func_down(visitor *v, sql_rel *
}
if (is_simple_project(rel->op) && rel->l && rel->exps) {
sql_rel *pl = rel->l;
-
-   if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel)) {
+   bool push_left = false, push_right = false;
+
+   if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel, 
&push_left, &push_right)) {
sql_rel *l = pl->l, *r = pl->r;
list *nexps = new_exp_list(v->sql->sa);
 
-   if (!is_simple_project(l->op) || !l->l)
+   if (push_left && !is_simple_project(l->op))
pl->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (is_joinop(rel->op) && (!is_simple_project(r->op) || 
!r->l))
+   if (push_right && !is_simple_project(r->op))
pl->r = r = re

MonetDB: Oct2020 - My fix was not completely right. Undoing some...

2021-01-22 Thread Pedro Ferreira
Changeset: 08ee210ca93c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=08ee210ca93c
Modified Files:
sql/server/rel_optimizer.c
Branch: Oct2020
Log Message:

My fix was not completely right. Undoing some of the changes. I still have to 
check waht to do with the between predicate on projections


diffs (33 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1353,7 +1353,7 @@ can_push_func(sql_exp *e, sql_rel *rel, 
int mustl = 0, mustr = 0, mustf = 0;
sql_exp *l = e->l, *r = e->r, *f = e->f;
 
-   if (is_project(rel->op) || e->flag == cmp_or || e->flag == 
cmp_in || e->flag == cmp_notin || e->flag == cmp_filter)
+   if ((is_project(rel->op) && e->f) || e->flag == cmp_or || 
e->flag == cmp_in || e->flag == cmp_notin || e->flag == cmp_filter)
return 0;
return ((l->type == e_column || can_push_func(l, rel, &mustl)) 
&& (*must = mustl)) ||
(!f && (r->type == e_column || can_push_func(r, 
rel, &mustr)) && (*must = mustr)) ||
@@ -1378,7 +1378,7 @@ can_push_func(sql_exp *e, sql_rel *rel, 
return res;
}
case e_column:
-   if ((exp_name(e) && !has_label(e)) || (rel && 
!rel_find_exp(rel, e)))
+   if (rel && !rel_find_exp(rel, e))
return 0;
(*must) = 1;
/* fall through */
@@ -1526,9 +1526,9 @@ rel_push_func_down(visitor *v, sql_rel *
 
/* we need a full projection, group by's and unions 
cannot be extended
 * with more expressions */
-   if (push_left && !is_simple_project(l->op))
+   if (push_left && (!is_simple_project(l->op) || !l->l))
rel->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (push_right && !is_simple_project(r->op))
+   if (push_right && (!is_simple_project(r->op)|| !r->l))
rel->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
nrel = rel_project(v->sql->sa, rel, 
rel_projections(v->sql, rel, NULL, 1, 1));
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - Introduce (soon to be) atomic getters and set...

2021-01-22 Thread Aris Koning
Changeset: 6b0f7e0413db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b0f7e0413db
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:

Introduce (soon to be) atomic getters and setters.


diffs (300 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -310,13 +310,23 @@ objectversion_destroy(sqlstore *store, o
_DELETE(ov);
 }
 
+static bte os_atmc_get_state(objectversion *ov) {
+   // ATOMIC GET
+   bte state = ov->state;
+   return state;
+}
+
+static void os_atmc_set_state(objectversion *ov, bte state) {
+   // ATOMIC SET
+   ov->state = state;
+}
+
 static void os_rollback_id_based_terminal_decendant(objectversion *ov, 
sqlstore *store);
 static void os_rollback_name_based_terminal_decendant(objectversion *ov, 
sqlstore *store);
 
 static void
 os_rollback_os_id_based_cascading(objectversion *ov, sqlstore *store) {
-   // TODO ATOMIC GET
-   bte state = ov->state;
+   bte state = os_atmc_get_state(ov);
assert(state & id_based_rollbacked);
 
if (ov->id_based_older) {
@@ -328,12 +338,10 @@ os_rollback_os_id_based_cascading(object
else {
if (!(state & name_based_rollbacked))

os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store);
-   // TODO ATOMIC GET
-   state = ov->id_based_older->state;
+   state = os_atmc_get_state(ov->id_based_older);
 
state |= id_based_rollbacked;
-   //TODO ATOMIC SET
-   ov->id_based_older->state = state;
+   os_atmc_set_state(ov->id_based_older, state);
 
// id based cascaded rollback along the parents
os_rollback_os_id_based_cascading(ov->id_based_older, 
store);
@@ -347,8 +355,7 @@ os_rollback_os_id_based_cascading(object
 
 static void
 os_rollback_os_name_based_cascading(objectversion *ov, sqlstore *store) {
-   // TODO ATOMIC GET
-   bte state = ov->state;
+   bte state = os_atmc_get_state(ov);
assert(state & name_based_rollbacked);
 
if (ov->name_based_older) {
@@ -360,12 +367,10 @@ os_rollback_os_name_based_cascading(obje
else {
if (!(state & id_based_rollbacked))

os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, store);
-   // TODO ATOMIC GET
-   state = ov->name_based_older->state;
+   state = os_atmc_get_state(ov->name_based_older);
 
state |= name_based_rollbacked;
-   //TODO ATOMIC SET
-   ov->name_based_older->state = state;
+   os_atmc_set_state(ov->name_based_older, state);
 
// name based cascaded rollback along the parents

os_rollback_os_name_based_cascading(ov->name_based_older, store);
@@ -379,18 +384,14 @@ os_rollback_os_name_based_cascading(obje
 
 static void
 os_rollback_name_based_terminal_decendant(objectversion *ov, sqlstore *store) {
-   // TODO ATOMIC GET
-   bte state = ov->state;
+   bte state = os_atmc_get_state(ov);
 
if (state & name_based_rollbacked) {
return;
}
 
state |= name_based_rollbacked;
-
-   //TODO ATOMIC SET
-   ov->state = state;
-
+   os_atmc_set_state(ov, state);
 
if (!(state & id_based_rollbacked))
os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, 
store);
@@ -400,17 +401,14 @@ os_rollback_name_based_terminal_decendan
 
 static void
 os_rollback_id_based_terminal_decendant(objectversion *ov, sqlstore *store) {
-   // TODO ATOMIC GET
-   bte state = ov->state;
+   bte state = os_atmc_get_state(ov);
 
if (state & id_based_rollbacked) {
return;
}
 
state |= id_based_rollbacked;
-
-   //TODO ATOMIC SET
-   ov->state = state;
+   os_atmc_set_state(ov, state);
 
if (!(state & name_based_rollbacked))

os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store);
@@ -449,7 +447,6 @@ put_under_destruction(sqlstore* store, o
ov->id_based_newer->id_based_older = NULL;
}
 
-   // TODO ATOMIC GET
ov->ts = store_get_timestamp(store)+1;
 
if (ov->id_based_older) {
@@ -464,10 +461,9 @@ put_under_destruction(sqlstore* store, o
 }
 
 static int
-os_cleanup(sqlstore* store, objectversion *ov, ulng oldest) {
-
-   // TODO ATOMIC GET life_cycle
-   if (ov->state == under_destruction) {
+os_cleanup(sqlstore* store, objectversion *ov, ulng oldest)
+{
+   if (os_atmc_get_state(ov) == under_destru

MonetDB: nospare - add missing cleanup functions

2021-01-22 Thread Niels Nes
Changeset: f6e526cb47d3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6e526cb47d3
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

add missing cleanup functions


diffs (182 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -90,6 +90,11 @@ type_destroy(sqlstore *store, sql_type *
assert(t->base.refcnt > 0);
if (--(t->base.refcnt) > 0)
return;
+   /*
+   _DELETE(t->sqlname);
+   _DELETE(t->base.name);
+   _DELETE(t);
+*/
 }
 
 static void
@@ -99,6 +104,13 @@ func_destroy(sqlstore *store, sql_type *
assert(f->base.refcnt > 0);
if (--(f->base.refcnt) > 0)
return;
+   /*
+   list_destroy(f->ops, store);
+   _DELETE(f->imp);
+   _DELETE(f->mod);
+   _DELETE(f->base.name);
+   _DELETE(f);
+*/
 }
 
 static void
@@ -108,6 +120,10 @@ seq_destroy(sqlstore *store, sql_type *s
assert(s->base.refcnt > 0);
if (--(s->base.refcnt) > 0)
return;
+   /*
+   _DELETE(s->base.name);
+   _DELETE(s);
+*/
 }
 
 static void
@@ -122,6 +138,11 @@ key_destroy(sqlstore *store, sql_key *k)
if ((k->type == pkey) && (k->t->pkey == (sql_ukey *) k))
k->t->pkey = NULL;
(void)store;
+   /*
+   list_destroy(k->columns);
+   _DELETE(k->base.name);
+   _DELETE(k);
+*/
 }
 
 static void
@@ -136,6 +157,11 @@ idx_destroy(sqlstore *store, sql_idx * i
 
if (isTable(i->t))
store->storage_api.destroy_idx(store, i);
+   /*
+   list_destroy(i->columns);
+   _DELETE(i->base.name);
+   _DELETE(i);
+*/
 }
 
 static void
@@ -150,15 +176,72 @@ trigger_destroy(sqlstore *store, sql_tri
t->columns = NULL;
}
(void)store;
+   /*
+   list_destroy(t->columns);
+   _DELETE(t->old_name);
+   _DELETE(t->new_name);
+   _DELETE(t->condition);
+   _DELETE(t->statement);
+   _DELETE(t->base.name);
+   _DELETE(t);
+*/
 }
 
 static void
 column_destroy(sqlstore *store, sql_column *c)
 {
+   assert(c->base.refcnt > 0);
if (--(c->base.refcnt) > 0)
return;
if (isTable(c->t))
store->storage_api.destroy_col(store, c);
+   /*
+   _DELETE(c->def);
+   _DELETE(c->base.name);
+   _DELETE(c);
+*/
+}
+
+static void
+table_destroy(sqlstore *store, sql_table *t)
+{
+   (void)store;
+   assert(t->base.refcnt > 0);
+   if (--(t->base.refcnt) > 0)
+   return;
+   /* cleanup its parts */
+   cs_destroy(&t->members, store);
+   cs_destroy(&t->idxs, store);
+   cs_destroy(&t->keys, store);
+   cs_destroy(&t->triggers, store);
+   cs_destroy(&t->columns, store);
+   /*
+   _DELETE(t->part);
+   _DELETE(t->query);
+   _DELETE(t->base.name);
+   _DELETE(t);
+*/
+}
+
+static void
+schema_destroy(sqlstore *store, sql_schema *s)
+{
+   assert(s->base.refcnt > 0);
+   if (--(s->base.refcnt) > 0)
+   return;
+   /* cleanup its parts */
+   os_destroy(s->parts, store);
+   os_destroy(s->triggers, store);
+   os_destroy(s->idxs, store);
+   os_destroy(s->keys, store);
+   os_destroy(s->seqs, store);
+   os_destroy(s->tables, store);
+   os_destroy(s->funcs, store);
+   os_destroy(s->types, store);
+   /*
+   _DELETE(s->base.name);
+   _DELETE(s);
+*/
 }
 
 static void
@@ -967,7 +1050,7 @@ load_schema(sql_trans *tr, sqlid id, oid
v = store->table_api.column_find_value(tr, find_sql_column(ss, 
"owner"), rid);
s->owner = *(sqlid *)v; _DELETE(v);
 
-   s->tables = os_new(tr->sa, (destroy_fptr) NULL, false, true);
+   s->tables = os_new(tr->sa, (destroy_fptr) &table_destroy, 
false, true);
s->types = os_new(tr->sa, (destroy_fptr) &type_destroy, false, 
true);
s->funcs = os_new(tr->sa, (destroy_fptr) &func_destroy, false, 
false);
s->seqs = os_new(tr->sa, (destroy_fptr) &seq_destroy, false, 
true);
@@ -1534,7 +1617,7 @@ bootstrap_create_schema(sql_trans *tr, c
s->auth_id = auth_id;
s->owner = owner;
s->system = TRUE;
-   s->tables = os_new(tr->sa, (destroy_fptr) NULL, false, true);
+   s->tables = os_new(tr->sa, (destroy_fptr) &table_destroy, false, true);
s->types = os_new(tr->sa, (destroy_fptr) &type_destroy, false, true);
s->funcs = os_new(tr->sa, (destroy_fptr) &func_destroy, false, false);
s->seqs = os_new(tr->sa, (destroy_fptr) &seq_destroy, false, true);
@@ -3334,7 +3417,7 @@ sql_trans_create_(sqlstore *store, sql_t
tr->cat = store->cat;
if (!tr->cat) {
store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog);
-   st

MonetDB: nospare - add some more destroy functions

2021-01-22 Thread Niels Nes
Changeset: 7162b63b53b0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7162b63b53b0
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

add some more destroy functions


diffs (103 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -82,6 +82,34 @@ instore(sqlid id, sqlid maxid)
return store_oids[lo] == id;
 }
 
+
+static void
+type_destroy(sqlstore *store, sql_type *t)
+{
+   (void)store;
+   assert(t->base.refcnt > 0);
+   if (--(t->base.refcnt) > 0)
+   return;
+}
+
+static void
+func_destroy(sqlstore *store, sql_type *f)
+{
+   (void)store;
+   assert(f->base.refcnt > 0);
+   if (--(f->base.refcnt) > 0)
+   return;
+}
+
+static void
+seq_destroy(sqlstore *store, sql_type *s)
+{
+   (void)store;
+   assert(s->base.refcnt > 0);
+   if (--(s->base.refcnt) > 0)
+   return;
+}
+
 static void
 key_destroy(sqlstore *store, sql_key *k)
 {
@@ -940,13 +968,13 @@ load_schema(sql_trans *tr, sqlid id, oid
s->owner = *(sqlid *)v; _DELETE(v);
 
s->tables = os_new(tr->sa, (destroy_fptr) NULL, false, true);
-   s->types = os_new(tr->sa, (destroy_fptr) NULL, false, true);
-   s->funcs = os_new(tr->sa, (destroy_fptr) NULL, false, false);
-   s->seqs = os_new(tr->sa, (destroy_fptr) NULL, false, true);
-   s->keys = os_new(tr->sa, (destroy_fptr) key_destroy, false, 
true);
-   s->idxs = os_new(tr->sa, (destroy_fptr) idx_destroy, false, 
true);
-   s->triggers = os_new(tr->sa, (destroy_fptr) trigger_destroy, 
false, true);
-   s->parts = os_new(tr->sa, (destroy_fptr) part_destroy, false, 
true);
+   s->types = os_new(tr->sa, (destroy_fptr) &type_destroy, false, 
true);
+   s->funcs = os_new(tr->sa, (destroy_fptr) &func_destroy, false, 
false);
+   s->seqs = os_new(tr->sa, (destroy_fptr) &seq_destroy, false, 
true);
+   s->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, false, 
true);
+   s->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, false, 
true);
+   s->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, 
false, true);
+   s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, false, 
true);
}
 
TRC_DEBUG(SQL_STORE, "Load schema: %s %d\n", s->base.name, s->base.id);
@@ -1507,9 +1535,9 @@ bootstrap_create_schema(sql_trans *tr, c
s->owner = owner;
s->system = TRUE;
s->tables = os_new(tr->sa, (destroy_fptr) NULL, false, true);
-   s->types = os_new(tr->sa, (destroy_fptr) NULL, false, true);
-   s->funcs = os_new(tr->sa, (destroy_fptr) NULL, false, false);
-   s->seqs = os_new(tr->sa, (destroy_fptr) NULL, false, true);
+   s->types = os_new(tr->sa, (destroy_fptr) &type_destroy, false, true);
+   s->funcs = os_new(tr->sa, (destroy_fptr) &func_destroy, false, false);
+   s->seqs = os_new(tr->sa, (destroy_fptr) &seq_destroy, false, true);
s->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, false, true);
s->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, false, true);
s->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, false, 
true);
@@ -3307,7 +3335,7 @@ sql_trans_create_(sqlstore *store, sql_t
if (!tr->cat) {
store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog);
store->cat->schemas = os_new(tr->sa, (destroy_fptr) NULL, 
false, true);
-   store->cat->objects = os_new(tr->sa, (destroy_fptr) NULL, 
false, false);
+   store->cat->objects = os_new(tr->sa, (destroy_fptr) 
&key_destroy, false, false);
}
tr->tmp = store->tmp;
tr->parent = parent;
@@ -3322,7 +3350,7 @@ schema_dup(sql_trans *tr, sql_schema *s)
 
*ns = *s;
ns->tables = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), true);
-   ns->seqs = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), true);
+   ns->seqs = os_new(tr->sa, (destroy_fptr) &seq_destroy, isTempSchema(s), 
true);
ns->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, isTempSchema(s), 
true);
ns->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, isTempSchema(s), 
true);
ns->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, 
isTempSchema(s), true);
@@ -4178,9 +4206,9 @@ sql_trans_create_schema(sql_trans *tr, c
s->owner = owner;
s->system = FALSE;
s->tables = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), true);
-   s->types = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), true);
-   s->funcs = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), false);
-   s->seqs = os_new(tr->sa, (destroy_fptr) NULL, isTempSchema(s), true);
+   s->types = os_new(tr->sa, (destroy_fptr) &type_destroy, 
isTempSchema

MonetDB: nospare - use ATOMIC_GET to retrieve atomic value

2021-01-22 Thread Niels Nes
Changeset: de4903ab5980 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=de4903ab5980
Modified Files:
sql/storage/objectset.c
sql/storage/sql_storage.h
sql/storage/store.c
Branch: nospare
Log Message:

use ATOMIC_GET to retrieve atomic value


diffs (49 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -450,7 +450,7 @@ put_under_destruction(sqlstore* store, o
}
 
// TODO ATOMIC GET
-   ov->ts = store->timestamp+1;
+   ov->ts = store_get_timestamp(store)+1;
 
if (ov->id_based_older) {
put_under_destruction(store, ov->id_based_older, 
oldest);
@@ -481,7 +481,7 @@ os_cleanup(sqlstore* store, objectversio
 * This will cause a safe eventual destruction of this 
rollbacked ov.
 */
// TODO ATOMIC GET
-   ov->ts = store->timestamp+2;
+   ov->ts = store_get_timestamp(store)+2;
}
 
// not yet old enough to be safely removed. Try later.
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -334,6 +334,7 @@ extern void store_resume_log(struct sqls
 extern lng store_hot_snapshot(struct sqlstore *store, str tarfile);
 extern lng store_hot_snapshot_to_stream(struct sqlstore *store, stream *s);
 
+extern ulng store_get_timestamp(struct sqlstore *store);
 extern void store_manager(struct sqlstore *store);
 extern void idle_manager(struct sqlstore *store);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -32,6 +32,13 @@ store_timestamp(sqlstore *store)
return ts;
 }
 
+ulng
+store_get_timestamp(sqlstore *store)
+{
+   ulng ts = ATOMIC_GET(&store->timestamp);
+   return ts;
+}
+
 static ulng
 store_transaction_id(sqlstore *store)
 {
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - Fix rollback.

2021-01-22 Thread Aris Koning
Changeset: 61df8c14ea06 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=61df8c14ea06
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:

Fix rollback.


diffs (46 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -326,7 +326,8 @@ os_rollback_os_id_based_cascading(object
ov->id_based_head->ov = ov->id_based_older;
}
else {
-   
os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store);
+   if (!(state & name_based_rollbacked))
+   
os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store);
// TODO ATOMIC GET
state = ov->id_based_older->state;
 
@@ -357,7 +358,8 @@ os_rollback_os_name_based_cascading(obje
ov->name_based_head->ov = ov->name_based_older;
}
else {
-   
os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, store);
+   if (!(state & id_based_rollbacked))
+   
os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, store);
// TODO ATOMIC GET
state = ov->name_based_older->state;
 
@@ -389,7 +391,10 @@ os_rollback_name_based_terminal_decendan
//TODO ATOMIC SET
ov->state = state;
 
-   os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, store);
+
+   if (!(state & id_based_rollbacked))
+   os_rollback_id_based_terminal_decendant(ov->id_based_head->ov, 
store);
+
os_rollback_os_name_based_cascading(ov, store);
 }
 
@@ -407,7 +412,9 @@ os_rollback_id_based_terminal_decendant(
//TODO ATOMIC SET
ov->state = state;
 
-   os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, 
store);
+   if (!(state & name_based_rollbacked))
+   
os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store);
+
os_rollback_os_id_based_cascading(ov, store);
 }
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - merged with default

2021-01-22 Thread Niels Nes
Changeset: 64dac3481048 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64dac3481048
Branch: nospare
Log Message:

merged with default


diffs (truncated from 371 to 300 lines):

diff --git a/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql 
b/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql
@@ -0,0 +1,8 @@
+\d
+\d triggers
+\d args
+create table node_tags (id integer);
+select * from node_tags;
+insert into node_tags values (1);
+select * from node_tags;
+drop table node_tags;
diff --git a/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test 
b/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test
@@ -0,0 +1,114 @@
+statement ok
+CREATE TABLE test101(
+  A INT NOT NULL PRIMARY KEY,
+  B INT NOT NULL,
+  C INT NOT NULL,
+  CONSTRAINT "fC" FOREIGN KEY (C) REFERENCES test101(A)
+)
+
+statement ok
+INSERT INTO test101 VALUES (101, 101, 101)
+
+statement ok
+ALTER TABLE test101 ALTER C SET NULL
+
+statement ok
+INSERT INTO test101 VALUES (100, 100, NULL)
+
+statement ok
+INSERT INTO test101 VALUES (102, 102, 102)
+
+statement ok
+INSERT INTO test101 VALUES (103, 103, 101)
+
+statement ok
+UPDATE test101 SET C = 100 WHERE C IS NULL
+
+query III rowsort
+select * from test101
+
+100
+100
+100
+101
+101
+101
+102
+102
+102
+103
+103
+103
+
+statement ok
+ALTER TABLE test101 ALTER C SET NOT NULL
+
+statement ok
+INSERT INTO test101 VALUES (104, 104, 104)
+
+statement ok
+DROP TABLE test101
+
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "sys"."t1" ("c0" DOUBLE,CONSTRAINT "t1_c0_unique" UNIQUE 
("c0"),CONSTRAINT "t1_c0_fkey" FOREIGN KEY ("c0") REFERENCES "sys"."t1" ("c0"))
+
+statement ok
+COPY 9 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"'
+
+0.21248182395969406
+0.6307796692265083
+2059310235
+-6.5457821e+08
+0.743704157497456
+0.4001718453135127
+0.3935743494971655
+0.5299192301063729
+0.7609386265982908
+
+statement ok
+ROLLBACK
+
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "t0"("tc0" CHARACTER LARGE OBJECT NOT NULL,CONSTRAINT 
"t0_tc0_pkey" PRIMARY KEY ("tc0"),
+CONSTRAINT "t0_tc0_fkey" FOREIGN KEY ("tc0") REFERENCES "sys"."t0" ("tc0"))
+
+statement ok
+INSERT INTO t0(tc0) VALUES('b' BETWEEN 'a' AND 'c')
+
+statement ok
+ROLLBACK
+
+statement ok
+CREATE TABLE t1(c0 FLOAT)
+
+statement ok
+ALTER TABLE t1 ADD UNIQUE(c0)
+
+statement ok
+INSERT INTO t1(c0) VALUES(13.38)
+
+statement ok
+DELETE FROM t1 WHERE true
+
+statement ok
+INSERT INTO t1(c0) VALUES(0.9), (0.5), (-3), (0.4)
+
+statement ok
+ALTER TABLE t1 ADD FOREIGN KEY (c0) REFERENCES t1(c0)
+
+statement ok
+INSERT INTO t1(c0) VALUES(null)
+
+statement ok
+DELETE FROM t1
+
+statement ok
+DROP TABLE t1
+
+
diff --git a/sql/test/Dump/Tests/dump-empty.stable.out 
b/sql/test/Dump/Tests/dump-empty.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/Dump/Tests/dump-empty.stable.out
@@ -0,0 +1,34 @@
+stdout of test 'dump-empty` in directory 'sql/test/Dump` itself:
+
+
+# 17:33:41 >  
+# 17:33:41 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=31345" "--set" 
"mapi_usock=/var/tmp/mtest-4412/.s.monetdb.31345" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_Dump"
 "--set" "embedded_c=true"
+# 17:33:41 >  
+
+# MonetDB 5 server v11.30.0
+# This is an unreleased version
+# Serving database 'mTests_sql_test_Dump', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers
+# Found 15.386 GiB available main-memory.
+# Copyright (c) 1993 - July 2008 CWI.
+# Copyright (c) August 2008 - 2018 MonetDB B.V., all rights reserved
+# Visit https://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://xps13:31345/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-4412/.s.monetdb.31345
+# MonetDB/GIS module loaded
+# SQL catalog created, loading sql scripts once
+
+
+# 10:50:27 >  
+# 10:50:27 >  /usr/bin/python dump-empty.SQL.py dump-empty 
+# 10:50:27 >  
+
+#msqldump tables Wed Sep  8 10:50:27 2010
+
+START TRANSACTION;
+COMMIT;
+
+# 10:50:28 >  
+# 10:50:28 >  Done.
+# 10:50:28 >  
+
diff --git a/sql/test/Triggers/Tests/trigger_action.test 
b/sql/test/Triggers/Tests/trigger_action.test
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_action.test
@@ -0,0 +1,160 @@
+statement ok
+create table t_4_1 ("id" int, "name" varchar(1024))
+
+statement ok
+insert into t_4_1 values(10, 'monetdb')
+
+statement ok
+insert into t_4_1 values(20, 'monet')
+
+statement ok
+create trigger test_4_1
+   after update on t_4_1 referencing old row as old_row
+   for each statement insert into t_4_1 values(0, 
'update_old_row_st

MonetDB: default - Added missing test files.

2021-01-22 Thread Sjoerd Mullender
Changeset: 41dd321b3020 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=41dd321b3020
Added Files:
sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql
sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test
sql/test/Dump/Tests/dump-empty.stable.out
sql/test/Triggers/Tests/trigger_action.test
sql/test/Triggers/Tests/trigger_projection.test
Branch: default
Log Message:

Added missing test files.


diffs (truncated from 371 to 300 lines):

diff --git a/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql 
b/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2009/dumping_tables.SF-2776908.sql
@@ -0,0 +1,8 @@
+\d
+\d triggers
+\d args
+create table node_tags (id integer);
+select * from node_tags;
+insert into node_tags values (1);
+select * from node_tags;
+drop table node_tags;
diff --git a/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test 
b/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/insert_self_ref_FK.Bug-6131.test
@@ -0,0 +1,114 @@
+statement ok
+CREATE TABLE test101(
+  A INT NOT NULL PRIMARY KEY,
+  B INT NOT NULL,
+  C INT NOT NULL,
+  CONSTRAINT "fC" FOREIGN KEY (C) REFERENCES test101(A)
+)
+
+statement ok
+INSERT INTO test101 VALUES (101, 101, 101)
+
+statement ok
+ALTER TABLE test101 ALTER C SET NULL
+
+statement ok
+INSERT INTO test101 VALUES (100, 100, NULL)
+
+statement ok
+INSERT INTO test101 VALUES (102, 102, 102)
+
+statement ok
+INSERT INTO test101 VALUES (103, 103, 101)
+
+statement ok
+UPDATE test101 SET C = 100 WHERE C IS NULL
+
+query III rowsort
+select * from test101
+
+100
+100
+100
+101
+101
+101
+102
+102
+102
+103
+103
+103
+
+statement ok
+ALTER TABLE test101 ALTER C SET NOT NULL
+
+statement ok
+INSERT INTO test101 VALUES (104, 104, 104)
+
+statement ok
+DROP TABLE test101
+
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "sys"."t1" ("c0" DOUBLE,CONSTRAINT "t1_c0_unique" UNIQUE 
("c0"),CONSTRAINT "t1_c0_fkey" FOREIGN KEY ("c0") REFERENCES "sys"."t1" ("c0"))
+
+statement ok
+COPY 9 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"'
+
+0.21248182395969406
+0.6307796692265083
+2059310235
+-6.5457821e+08
+0.743704157497456
+0.4001718453135127
+0.3935743494971655
+0.5299192301063729
+0.7609386265982908
+
+statement ok
+ROLLBACK
+
+statement ok
+START TRANSACTION
+
+statement ok
+CREATE TABLE "t0"("tc0" CHARACTER LARGE OBJECT NOT NULL,CONSTRAINT 
"t0_tc0_pkey" PRIMARY KEY ("tc0"),
+CONSTRAINT "t0_tc0_fkey" FOREIGN KEY ("tc0") REFERENCES "sys"."t0" ("tc0"))
+
+statement ok
+INSERT INTO t0(tc0) VALUES('b' BETWEEN 'a' AND 'c')
+
+statement ok
+ROLLBACK
+
+statement ok
+CREATE TABLE t1(c0 FLOAT)
+
+statement ok
+ALTER TABLE t1 ADD UNIQUE(c0)
+
+statement ok
+INSERT INTO t1(c0) VALUES(13.38)
+
+statement ok
+DELETE FROM t1 WHERE true
+
+statement ok
+INSERT INTO t1(c0) VALUES(0.9), (0.5), (-3), (0.4)
+
+statement ok
+ALTER TABLE t1 ADD FOREIGN KEY (c0) REFERENCES t1(c0)
+
+statement ok
+INSERT INTO t1(c0) VALUES(null)
+
+statement ok
+DELETE FROM t1
+
+statement ok
+DROP TABLE t1
+
+
diff --git a/sql/test/Dump/Tests/dump-empty.stable.out 
b/sql/test/Dump/Tests/dump-empty.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/Dump/Tests/dump-empty.stable.out
@@ -0,0 +1,34 @@
+stdout of test 'dump-empty` in directory 'sql/test/Dump` itself:
+
+
+# 17:33:41 >  
+# 17:33:41 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=31345" "--set" 
"mapi_usock=/var/tmp/mtest-4412/.s.monetdb.31345" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_Dump"
 "--set" "embedded_c=true"
+# 17:33:41 >  
+
+# MonetDB 5 server v11.30.0
+# This is an unreleased version
+# Serving database 'mTests_sql_test_Dump', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers
+# Found 15.386 GiB available main-memory.
+# Copyright (c) 1993 - July 2008 CWI.
+# Copyright (c) August 2008 - 2018 MonetDB B.V., all rights reserved
+# Visit https://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://xps13:31345/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-4412/.s.monetdb.31345
+# MonetDB/GIS module loaded
+# SQL catalog created, loading sql scripts once
+
+
+# 10:50:27 >  
+# 10:50:27 >  /usr/bin/python dump-empty.SQL.py dump-empty 
+# 10:50:27 >  
+
+#msqldump tables Wed Sep  8 10:50:27 2010
+
+START TRANSACTION;
+COMMIT;
+
+# 10:50:28 >  
+# 10:50:28 >  Done.
+# 10:50:28 >  
+
diff --git a/sql/test/Triggers/Tests/trigger_action.test 
b/sql/test/Triggers/Tests/trigger_action.test
new file mode 100644
--- /dev/null
+++ b/sql/test/Triggers/Tests/trigger_action.test
@@ -0,0 +1,160 @@
+statement ok
+create table t_4_1 ("id" int

MonetDB: nospare - make sure temporary tables handle updates pro...

2021-01-22 Thread Niels Nes
Changeset: 34bd37432226 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=34bd37432226
Modified Files:
sql/storage/bat/bat_storage.c
Branch: nospare
Log Message:

make sure temporary tables handle updates properly


diffs (14 lines):

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
@@ -2323,6 +2323,10 @@ tr_merge_delta( sql_trans *tr, sql_delta
obat->ibase = obat->cnt;
obat->ibid = e_bat(cur->ttype);
obat->cleared = 0;
+   if (!obat->uibid)
+   obat->uibid = e_bat(TYPE_oid);
+   if (!obat->uvbid)
+   obat->uvbid = e_bat(cur->ttype);
assert(BATcount(cur) == obat->cnt);
bat_destroy(cur);
return ok;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Oct2020 - Undoing one of my changes. This check is need...

2021-01-22 Thread Pedro Ferreira
Changeset: 474f3cb233f0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=474f3cb233f0
Modified Files:
sql/server/rel_optimizer.c
Branch: Oct2020
Log Message:

Undoing one of my changes. This check is needed (fix tpcds q8 crash)


diffs (12 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1378,7 +1378,7 @@ can_push_func(sql_exp *e, sql_rel *rel, 
return res;
}
case e_column:
-   if (rel && !rel_find_exp(rel, e))
+   if ((exp_name(e) && !has_label(e)) || (rel && 
!rel_find_exp(rel, e)))
return 0;
(*must) = 1;
/* fall through */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - small compilation fix

2021-01-22 Thread Niels Nes
Changeset: b27699f85aae for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b27699f85aae
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:

small compilation fix


diffs (12 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -861,7 +861,7 @@ static bte os_get_state(objectversion *o
 
 static int
 os_del_name_based(objectset *os, struct sql_trans *tr, const char *name, 
objectversion *ov) {
-   versionhead  *name_based_node;
+   versionhead  *name_based_node = NULL;
if (ov->id_based_older && strcmp(ov->id_based_older->b->name, name) == 
0)
name_based_node = ov->id_based_older->name_based_head;
else if (os->unique) // Previous name based objectversion is of a 
different id, so now we do have to perform an extensive look up
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - use modern initialisation (needed for ATOMIC_...

2021-01-22 Thread Niels Nes
Changeset: ceda8601644e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ceda8601644e
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

use modern initialisation (needed for ATOMIC_VAR_INIT)


diffs (22 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1768,11 +1768,13 @@ store_init(sql_allocator *pa, int debug,
if (!store)
return NULL;
 
-   store->initialized = 0;
-   store->readonly = readonly;
-   store->singleuser = singleuser;
-   store->debug = debug;
-   store->transaction = ATOMIC_VAR_INIT(TRANSACTION_ID_BASE);
+   *store = (sqlstore) {
+   .readonly = readonly,
+   .singleuser = singleuser,
+   .debug = debug,
+   .transaction = ATOMIC_VAR_INIT(TRANSACTION_ID_BASE),
+   };
+
(void)store_timestamp(store); /* increment once */
MT_lock_init(&store->lock, "sqlstore_lock");
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - Merge with default branch.

2021-01-22 Thread Sjoerd Mullender
Changeset: 9f789284abfc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f789284abfc
Branch: nospare
Log Message:

Merge with default branch.


diffs (truncated from 241540 to 300 lines):

diff --git a/clients/examples/perl/countries.sql 
b/clients/examples/perl/countries.sql
deleted file mode 100644
--- a/clients/examples/perl/countries.sql
+++ /dev/null
@@ -1,266 +0,0 @@
--- data file to be used with dbitest_extensive.
-CREATE TABLE countries (
-   cty_name VARCHAR(256),
-   cty_code VARCHAR(32)
-);
-COPY INTO countries FROM STDIN USING DELIMITERS E'\t',E'\n','"' NULL AS '';
-AFGHANISTAN.af
-ÅLAND ISLANDS  .ax
-ALBANIA.al
-ALDERNEY   
-ALGERIA (El Djazaïr)   .dz
-AMERICAN SAMOA .as
-ANDORRA.ad
-ANGOLA .ao
-ANGUILLA   .ai
-ANTARCTICA .aq
-ANTIGUA AND BARBUDA.ag
-ARGENTINA  .ar
-ARMENIA.am
-ARUBA  .aw
-ASCENSION ISLAND   .ac
-AUSTRALIA  .au
-AUSTRIA.at
-AZERBAIJAN .az
-BAHAMAS.bs
-BAHRAIN.bh
-BANGLADESH .bd
-BARBADOS   .bb
-BELARUS.by
-BELGIUM.be
-BELIZE .bz
-BENIN  .bj
-BERMUDA.bm
-BHUTAN .bt
-BOLIVIA.bo
-BONAIRE, ST. EUSTATIUS, AND SABA   .bq
-BOSNIA AND HERZEGOVINA .ba
-BOTSWANA   .bw
-BOUVET ISLAND  .bv
-BRAZIL .br
-BRITISH INDIAN OCEAN TERRITORY .io
-BRUNEI DARUSSALAM  .bn
-BULGARIA   .bg
-BURKINA FASO   .bf
-BURUNDI.bi
-CAMBODIA   .kh
-CAMEROON   .cm
-CANADA .ca
-CAPE VERDE .cv
-CAYMAN ISLANDS .ky
-CENTRAL AFRICAN REPUBLIC   .cf
-CHAD (Tchad)   .td
-CHANNEL ISLANDS
-CHILE  .cl
-CHINA  .cn
-CHRISTMAS ISLAND   .cx
-COCOS (KEELING) ISLANDS.cc
-COLOMBIA   .co
-COMOROS.km
-CONGO, REPUBLIC OF .cg
-CONGO, THE DEMOCRATIC REPUBLIC OF THE (formerly Zaire) .cd
-COOK ISLANDS   .ck
-COSTA RICA .cr
-CÔTE D'IVOIRE (Ivory Coast).ci
-CROATIA (Hrvatska) .hr
-CUBA   .cu
-CURAÇAO.cw
-CYPRUS .cy
-CZECH REPUBLIC .cz
-DENMARK.dk
-DJIBOUTI   .dj
-DOMINICA   .dm
-DOMINICAN REPUBLIC .do
-ECUADOR.ec
-EGYPT  .eg
-EL SALVADOR.sv
-EQUATORIAL GUINEA  .gq
-ERITREA.er
-ESTONIA.ee
-ETHIOPIA   .et
-EUROPEAN UNION .eu
-FAEROE ISLANDS .fo
-FALKLAND ISLANDS (MALVINAS).fk
-FIJI   .fj
-FINLAND.fi
-FRANCE .fr
-FRENCH GUIANA  .gf
-FRENCH POLYNESIA   .pf
-FRENCH SOUTHERN TERRITORIES.tf
-GABON  .ga
-GAMBIA, THE.gm
-GEORGIA.ge
-GERMANY (Deutschland)  .de
-GHANA  .gh
-GIBRALTAR  .gi
-GREAT BRITAIN (United Kingdom) .uk
-GREECE .gr
-GREENLAND  .gl
-GRENADA.gd
-GUADELOUPE .gp
-GUAM   .gu
-GUATEMALA  .gt
-GUERNSEY   .gg
-GUINEA .gn
-GUINEA-BISSAU  .gw
-GUYANA .gy
-HAITI  .ht
-HEARD ISLAND AND MCDONALD ISLANDS  .hm
-HONDURAS   .hn
-HONG KONG (Special Administrative Region of China) .hk
-HUNGARY.hu
-ICELAND.is
-INDIA  .in
-INDONESIA  .id
-INTERNATIONAL ORGANIZATIONS.int
-IRAN (Islamic Republic of Iran).ir
-IRAQ   .iq
-IRELAND.ie
-ISLE OF MAN.im
-ISRAEL .il
-ITALY  .it
-JAMAICA.jm
-JAPAN  .jp
-JERSEY .je
-JORDAN (Hashemite Kingdom of Jordan)   .jo
-KAZAKHSTAN .kz
-KENYA  .ke
-KIRIBATI   .ki
-"KOREA (Democratic Peoples Republic of [North] Korea)" .kp
-KOREA (Republic of [South] Korea)  .kr
-KUWAIT .kw
-KYRGYZSTAN .kg
-LAO PEOPLE'S DEMOCRATIC REPUBLIC   .la
-LATVIA .lv
-LEBANON.lb
-LESOTHO.ls
-LIBERIA.lr
-LIBYA (Libyan Arab Jamahirya)  .ly
-LIECHTENSTEIN (Fürstentum Liechtenstein)   .li
-LITHUANIA  .lt
-LUXEMBOURG .lu
-MACAO (Special Administrative Region of China) .mo
-MACEDONIA (Former Yugoslav Republic of Macedonia)  .mk
-MADAGASCAR .mg
-MALAWI .mw
-MALAYSIA   .my
-MALDIVES   .mv
-MALI   .ml
-MALTA  .mt
-MARSHALL ISLANDS   .mh
-MARTINIQUE .mq
-MAURITANIA .mr
-MAURITIUS  .mu
-MAYOTTE.yt
-MEXICO .mx
-MICRONESIA (Federated States of Micronesia).fm
-MOLDOVA.md
-MONACO .mc
-MONGOLIA   .mn
-MONTENEGRO .me
-MONTSERRAT .ms
-MOROCCO.ma
-MOZAMBIQUE (Moçambique).mz
-MYANMAR (formerly Burma)   .mm
-NAMIBIA.na
-NAURU  .nr
-NEPAL  .np
-NETHERLANDS.nl
-NETHERLANDS ANTILLES (obsolete).an
-NEW CALEDONIA  .nc
-NEW ZEALAND.nz
-NICARAGUA  .ni
-NIGER  .ne
-NIGERIA.ng
-NIUE   .nu
-NORFOLK ISLAND .nf
-NORTHERN MARIANA ISLANDS   .mp
-NORWAY .no
-OMAN   .om
-PAKISTAN   .pk
-PALAU  .pw
-PALESTINIAN TERRITORIES.ps
-PANAMA .pa
-PAPUA NEW GUINEA   .pg
-PARAGUAY   .py
-PERU   .pe
-PHILIPPINES.ph
-PITCAIRN   .pn
-POLAND .pl
-PORTUGAL   .pt
-PUERTO RICO.pr
-QATAR  .qa
-RÉUNION.re
-ROMANIA.ro
-RUSSIAN FEDERATION .ru
-RWANDA .rw
-SAINT BARTHÉLEMY   .bl
-SAINT HELENA   .sh
-SAINT KITTS AND NEVIS  .kn
-SAINT LUCIA.lc
-SAINT MARTIN (French portion)  .mf
-SAINT PIERRE AND MIQUELON  .pm
-SAINT VINCENT AND THE GRENADINES

MonetDB: default - Remove unused .sql files.

2021-01-22 Thread Sjoerd Mullender
Changeset: 89e17c0abf34 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=89e17c0abf34
Removed Files:
clients/examples/perl/countries.sql
dump_output.sql
geom/sql/conformance/Tests/T19.sql
geom/sql/conformance/Tests/T20.sql
geom/sql/conformance/Tests/T9.sql
geom/sql/functions/Tests/ST_CoveredBy.sql
geom/sql/functions/Tests/ST_Covers.sql
geom/sql/functions/Tests/equals.sql
geom/sql/functions/Tests/makeEnvelope.sql
geom/sql/functions/Tests/mbr_above.sql
geom/sql/functions/Tests/mbr_below.sql
geom/sql/functions/Tests/mbr_contained.sql
geom/sql/functions/Tests/mbr_contains.sql
geom/sql/functions/Tests/mbr_distance.sql
geom/sql/functions/Tests/mbr_equal.sql
geom/sql/functions/Tests/mbr_overlap.sql
geom/sql/functions/Tests/mbr_overlap_or_above.sql
geom/sql/functions/Tests/mbr_overlap_or_below.sql
geom/sql/functions/Tests/mbr_overlap_or_left.sql
geom/sql/functions/Tests/mbr_overlap_or_right.sql
geom/sql/functions/Tests/srid.sql
geom/sql/functions/Tests/transform.sql
geom/sql/pg_regression/Tests/affine.sql
geom/sql/pg_regression/Tests/bestsrid.sql
geom/sql/pg_regression/Tests/clean.sql
geom/sql/pg_regression/Tests/concave_hull.sql
geom/sql/pg_regression/Tests/ctors.sql
geom/sql/pg_regression/Tests/empty.sql
geom/sql/pg_regression/Tests/geography.sql
geom/sql/pg_regression/Tests/hausdorff.sql
geom/sql/pg_regression/Tests/in_geohash.sql
geom/sql/pg_regression/Tests/in_geojson.sql
geom/sql/pg_regression/Tests/in_gml.sql
geom/sql/pg_regression/Tests/in_kml.sql
geom/sql/pg_regression/Tests/iscollection.sql
geom/sql/pg_regression/Tests/isvaliddetail.sql
geom/sql/pg_regression/Tests/legacy.sql
geom/sql/pg_regression/Tests/long_xact.sql
geom/sql/pg_regression/Tests/lwgeom_regress.sql
geom/sql/pg_regression/Tests/measures.sql
geom/sql/pg_regression/Tests/node.sql
geom/sql/pg_regression/Tests/offsetcurve.sql
geom/sql/pg_regression/Tests/out_geography.sql
geom/sql/pg_regression/Tests/out_geometry.sql
geom/sql/pg_regression/Tests/polygonize.sql
geom/sql/pg_regression/Tests/polyhedralsurface.sql
geom/sql/pg_regression/Tests/regress_bdpoly.sql
geom/sql/pg_regression/Tests/regress_biginsert.sql
geom/sql/pg_regression/Tests/regress_buffer_params.sql
geom/sql/pg_regression/Tests/regress_index.sql
geom/sql/pg_regression/Tests/regress_lrs.sql
geom/sql/pg_regression/Tests/regress_management.sql
geom/sql/pg_regression/Tests/regress_ogc.sql
geom/sql/pg_regression/Tests/regress_ogc_prep.sql
geom/sql/pg_regression/Tests/regress_proj.sql
geom/sql/pg_regression/Tests/regress_selectivity.sql
geom/sql/pg_regression/Tests/relate.sql
geom/sql/pg_regression/Tests/relate_bnr.sql
geom/sql/pg_regression/Tests/relatematch.sql
geom/sql/pg_regression/Tests/remove_repeated_points.sql
geom/sql/pg_regression/Tests/removepoint.sql
geom/sql/pg_regression/Tests/setpoint.sql
geom/sql/pg_regression/Tests/sharedpaths.sql
geom/sql/pg_regression/Tests/simplify.sql
geom/sql/pg_regression/Tests/snap.sql
geom/sql/pg_regression/Tests/snaptogrid.sql
geom/sql/pg_regression/Tests/split.sql
geom/sql/pg_regression/Tests/sql-mm-circularstring.sql
geom/sql/pg_regression/Tests/sql-mm-compoundcurve.sql
geom/sql/pg_regression/Tests/sql-mm-curvepoly.sql
geom/sql/pg_regression/Tests/sql-mm-general.sql
geom/sql/pg_regression/Tests/sql-mm-multicurve.sql
geom/sql/pg_regression/Tests/sql-mm-multisurface.sql
geom/sql/pg_regression/Tests/sql-mm-serialize.sql
geom/sql/pg_regression/Tests/summary.sql
geom/sql/pg_regression/Tests/tickets.sql
geom/sql/pg_regression/Tests/typmod.sql
geom/sql/pg_regression/Tests/unaryunion.sql
geom/sql/pg_regression/Tests/wkb.sql
geom/sql/pg_regression/Tests/wkt.sql
geom/sql/pg_regression/Tests/wmsservers.sql
geom/sql/testInsert.sql
monetdb5/modules/atoms/batxml.sql
monetdb5/modules/atoms/xml.sql
sql/backends/monet5/Tests/example.sql
sql/backends/monet5/Tests/inlineUDF.sql
sql/backends/monet5/Tests/rapi08.sql
sql/backends/monet5/Tests/rapi11.sql
sql/backends/monet5/UDF/capi/Tests/capi12.sql
sql/backends/monet5/UDF/capi/Tests/capi17.sql
sql/benchmarks/ATIS/Tests/select_distinct.sql
sql/benchmarks/ATIS/Tests/select_group.sql
sql/benchmarks/ATIS/Tests/select_join.sql
sql/benchmarks/ATIS/Tests/select_key_prefix_join.sql
sql/benchmarks/ATIS/Tests/select_simple_join.sql
sql/benchmarks/AT

MonetDB: default - Remove more unused old test files.

2021-01-22 Thread Sjoerd Mullender
Changeset: 512d5cc6e152 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=512d5cc6e152
Removed Files:
sql/benchmarks/ATIS/Tests/load.sql.src
sql/benchmarks/arno/Tests/check1.sql.src
sql/benchmarks/arno/Tests/create.sql.src
sql/benchmarks/arno/Tests/inserts.sql.src
sql/benchmarks/arno/Tests/queries_depth2.sql.src
sql/benchmarks/blob/Tests/blob.sql.src
sql/benchmarks/blob/Tests/create.sql.src
sql/benchmarks/blob/Tests/drop.sql.src
sql/benchmarks/moa/Tests/load.sql.src
sql/benchmarks/moa/Tests/moa.sql.src
sql/benchmarks/moa/Tests/moa_ordered.sql.src
sql/benchmarks/tpcds/Tests/01.reqtests
sql/benchmarks/tpcds/Tests/01.sql
sql/benchmarks/tpcds/Tests/02.reqtests
sql/benchmarks/tpcds/Tests/02.sql
sql/benchmarks/tpcds/Tests/03.reqtests
sql/benchmarks/tpcds/Tests/03.sql
sql/benchmarks/tpcds/Tests/04.reqtests
sql/benchmarks/tpcds/Tests/04.sql
sql/benchmarks/tpcds/Tests/05.reqtests
sql/benchmarks/tpcds/Tests/05.sql
sql/benchmarks/tpcds/Tests/06.reqtests
sql/benchmarks/tpcds/Tests/06.sql
sql/benchmarks/tpcds/Tests/07.reqtests
sql/benchmarks/tpcds/Tests/07.sql
sql/benchmarks/tpcds/Tests/08.reqtests
sql/benchmarks/tpcds/Tests/08.sql
sql/benchmarks/tpcds/Tests/09.reqtests
sql/benchmarks/tpcds/Tests/09.sql
sql/benchmarks/tpcds/Tests/10.reqtests
sql/benchmarks/tpcds/Tests/10.sql
sql/benchmarks/tpcds/Tests/11.reqtests
sql/benchmarks/tpcds/Tests/11.sql
sql/benchmarks/tpcds/Tests/12.reqtests
sql/benchmarks/tpcds/Tests/12.sql
sql/benchmarks/tpcds/Tests/13.reqtests
sql/benchmarks/tpcds/Tests/13.sql
sql/benchmarks/tpcds/Tests/14a.reqtests
sql/benchmarks/tpcds/Tests/14a.sql
sql/benchmarks/tpcds/Tests/14b.reqtests
sql/benchmarks/tpcds/Tests/14b.sql
sql/benchmarks/tpcds/Tests/15.reqtests
sql/benchmarks/tpcds/Tests/15.sql
sql/benchmarks/tpcds/Tests/16.reqtests
sql/benchmarks/tpcds/Tests/16.sql
sql/benchmarks/tpcds/Tests/17.reqtests
sql/benchmarks/tpcds/Tests/17.sql
sql/benchmarks/tpcds/Tests/18.reqtests
sql/benchmarks/tpcds/Tests/18.sql
sql/benchmarks/tpcds/Tests/19.reqtests
sql/benchmarks/tpcds/Tests/19.sql
sql/benchmarks/tpcds/Tests/20.reqtests
sql/benchmarks/tpcds/Tests/20.sql
sql/benchmarks/tpcds/Tests/21.reqtests
sql/benchmarks/tpcds/Tests/21.sql
sql/benchmarks/tpcds/Tests/22.reqtests
sql/benchmarks/tpcds/Tests/22.sql
sql/benchmarks/tpcds/Tests/23a.reqtests
sql/benchmarks/tpcds/Tests/23a.sql
sql/benchmarks/tpcds/Tests/23b.reqtests
sql/benchmarks/tpcds/Tests/23b.sql
sql/benchmarks/tpcds/Tests/24a.reqtests
sql/benchmarks/tpcds/Tests/24a.sql
sql/benchmarks/tpcds/Tests/24b.reqtests
sql/benchmarks/tpcds/Tests/24b.sql
sql/benchmarks/tpcds/Tests/25.reqtests
sql/benchmarks/tpcds/Tests/25.sql
sql/benchmarks/tpcds/Tests/26.reqtests
sql/benchmarks/tpcds/Tests/26.sql
sql/benchmarks/tpcds/Tests/27.reqtests
sql/benchmarks/tpcds/Tests/27.sql
sql/benchmarks/tpcds/Tests/28.reqtests
sql/benchmarks/tpcds/Tests/28.sql
sql/benchmarks/tpcds/Tests/29.reqtests
sql/benchmarks/tpcds/Tests/29.sql
sql/benchmarks/tpcds/Tests/30.reqtests
sql/benchmarks/tpcds/Tests/30.sql
sql/benchmarks/tpcds/Tests/31.reqtests
sql/benchmarks/tpcds/Tests/31.sql
sql/benchmarks/tpcds/Tests/32.reqtests
sql/benchmarks/tpcds/Tests/32.sql
sql/benchmarks/tpcds/Tests/33.reqtests
sql/benchmarks/tpcds/Tests/33.sql
sql/benchmarks/tpcds/Tests/34.reqtests
sql/benchmarks/tpcds/Tests/34.sql
sql/benchmarks/tpcds/Tests/35.reqtests
sql/benchmarks/tpcds/Tests/35.sql
sql/benchmarks/tpcds/Tests/36.reqtests
sql/benchmarks/tpcds/Tests/36.sql
sql/benchmarks/tpcds/Tests/37.reqtests
sql/benchmarks/tpcds/Tests/37.sql
sql/benchmarks/tpcds/Tests/38.reqtests
sql/benchmarks/tpcds/Tests/38.sql
sql/benchmarks/tpcds/Tests/39a.reqtests
sql/benchmarks/tpcds/Tests/39a.sql
sql/benchmarks/tpcds/Tests/39b.reqtests
sql/benchmarks/tpcds/Tests/39b.sql
sql/benchmarks/tpcds/Tests/40.reqtests
sql/benchmarks/tpcds/Tests/40.sql
sql/benchmarks/tpcds/Tests/41.reqtests
sql/benchmarks/tpcds/Tests/41.sql
sql/benchmarks/tpcds/Tests/42.reqtests
sql/benchmarks/tpcds/Tests/42.sql
sql/benchmarks/tpcds/Tests/43.reqtests
sql/benchmarks/tpcds/Tests/43.sql
sql/benchmarks/tpcds/Tests/44.reqtests
sql/benchmarks/tpcds/Tests/44.sql
sql/benchmarks/tpcds/Tests/45.reqtests
  

MonetDB: Oct2020 - Tackling tpcds q72 performance degradation. A...

2021-01-22 Thread Pedro Ferreira
Changeset: a15254a6d04b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a15254a6d04b
Modified Files:
sql/server/rel_optimizer.c
Branch: Oct2020
Log Message:

Tackling tpcds q72 performance degradation. At rel_push_func_down, create 
projection only on the side where functions will be pushed down


diffs (78 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1388,17 +1388,20 @@ can_push_func(sql_exp *e, sql_rel *rel, 
 }
 
 static int
-exps_can_push_func(list *exps, sql_rel *rel)
-{
-   for(node *n = exps->h; n; n = n->next) {
+exps_can_push_func(list *exps, sql_rel *rel, bool *push_left, bool *push_right)
+{
+   for(node *n = exps->h; n && !*push_left && !*push_right; n = n->next) {
sql_exp *e = n->data;
-   int must = 0, mustl = 0, mustr = 0;
-
-   if (is_joinop(rel->op) && ((can_push_func(e, rel->l, &mustl) && 
mustl) || (can_push_func(e, rel->r, &mustr) && mustr)))
-   return 1;
-   else if (is_select(rel->op) && can_push_func(e, rel->l, &must) 
&& must)
-   return 1;
-   }
+   int mustl = 0, mustr = 0;
+
+   if ((is_joinop(rel->op) || is_select(rel->op)) && 
((can_push_func(e, rel->l, &mustl) && mustl)))
+   *push_left = true;
+   
+   if (is_joinop(rel->op) && can_push_func(e, rel->r, &mustr) && 
mustr)
+   *push_right = true;
+   }
+   if (*push_left || *push_right)
+   return 1;
return 0;
 }
 
@@ -1512,19 +1515,20 @@ rel_push_func_down(visitor *v, sql_rel *
if ((is_select(rel->op) || is_joinop(rel->op)) && rel->l && rel->exps 
&& !(rel_is_ref(rel))) {
list *exps = rel->exps;
sql_rel *l = rel->l, *r = rel->r;
+   bool push_left = false, push_right = false;
 
/* only push down when is useful */
if ((is_select(rel->op) && list_length(rel->exps) <= 1) || 
rel_is_ref(l) || (is_joinop(rel->op) && rel_is_ref(r)))
return rel;
-   if (exps_can_push_func(exps, rel) && exps_need_push_down(exps)) 
{
+   if (exps_can_push_func(exps, rel, &push_left, &push_right) && 
exps_need_push_down(exps)) {
sql_rel *nrel, *ol = l, *or = r;
visitor nv = { .sql = v->sql, .parent = v->parent, 
.value_based_opt = v->value_based_opt, .storage_based_opt = 
v->storage_based_opt };
 
/* we need a full projection, group by's and unions 
cannot be extended
 * with more expressions */
-   if (!is_simple_project(l->op) || !l->l)
+   if (push_left && !is_simple_project(l->op))
rel->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (is_joinop(rel->op) && (!is_simple_project(r->op) || 
!r->l))
+   if (push_right && !is_simple_project(r->op))
rel->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
nrel = rel_project(v->sql->sa, rel, 
rel_projections(v->sql, rel, NULL, 1, 1));
 
@@ -1543,14 +1547,15 @@ rel_push_func_down(visitor *v, sql_rel *
}
if (is_simple_project(rel->op) && rel->l && rel->exps) {
sql_rel *pl = rel->l;
-
-   if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel)) {
+   bool push_left = false, push_right = false;
+
+   if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel, 
&push_left, &push_right)) {
sql_rel *l = pl->l, *r = pl->r;
list *nexps = new_exp_list(v->sql->sa);
 
-   if (!is_simple_project(l->op) || !l->l)
+   if (push_left && !is_simple_project(l->op))
pl->l = l = rel_project(v->sql->sa, l, 
rel_projections(v->sql, l, NULL, 1, 1));
-   if (is_joinop(rel->op) && (!is_simple_project(r->op) || 
!r->l))
+   if (push_right && !is_simple_project(r->op))
pl->r = r = rel_project(v->sql->sa, r, 
rel_projections(v->sql, r, NULL, 1, 1));
for (node *n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - output errors on write conflicts

2021-01-22 Thread Niels Nes
Changeset: b26ee19d5589 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b26ee19d5589
Modified Files:
sql/backends/monet5/sql.c
Branch: nospare
Log Message:

output errors on write conflicts


diffs (19 lines):

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
@@ -1813,11 +1813,15 @@ mvc_modify_prep(Client cntxt, MalBlkPtr 
if (c == NULL)
throw(SQL, "sql.modify_prep", SQLSTATE(42S02) 
"Column missing %s.%s.%s", sname, tname, cname);
*cookie_out = colprep(m->session->tr, c);
+   if (!(*cookie_out))
+   throw(SQL, "sql.modify_prep", SQLSTATE(42000) 
"Transaction conflict on %s.%s.%s", sname, tname, cname);
} else {
sql_idx *i = mvc_bind_idx(m, s, cname + 1);
if (i == NULL)
throw(SQL, "sql.modify_prep", SQLSTATE(42S02) 
"Index missing %s.%s.%s", sname, tname, cname);
*cookie_out = idxprep(m->session->tr, i);
+   if (!(*cookie_out))
+   throw(SQL, "sql.modify_prep", SQLSTATE(42000) 
"Transaction conflict on %s.%s.%s", sname, tname, cname);
}
}
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - approved output

2021-01-22 Thread Niels Nes
Changeset: da6ce0622a4b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da6ce0622a4b
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
Branch: nospare
Log Message:

approved output


diffs (84 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9359,12 +9359,12 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "export_table", "unsafe pattern sql.export_table(X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str], 
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int], X_13:any...):int 
",   "mvc_export_row_wrap;", ""  ]
 [ "sql",   "export_table", "unsafe pattern sql.export_table(X_1:str, 
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str], 
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int], 
X_13:bat[:any]...):int ", "mvc_export_table_wrap;",   ""  ]
 [ "sql",   "first_value",  "pattern sql.first_value(X_1:any_1, X_2:bit, 
X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ",   "SQLfirst_value;",  ""   
   ]
-[ "sql",   "flush_log","unsafe command sql.flush_log():void ", 
"SQLflush_log;",""  ]
+[ "sql",   "flush_log","unsafe pattern sql.flush_log():void ", 
"SQLflush_log;",""  ]
 [ "sql",   "getVariable",  "pattern sql.getVariable(X_1:int, X_2:str, 
X_3:str):any_1 ","getVariable;", ""  ]
 [ "sql",   "getVersion",   "command sql.getVersion(X_1:int):lng ", 
"mvc_getVersion;",  ""  ]
 [ "sql",   "get_value","pattern sql.get_value(X_1:str, X_2:str):lng ", 
"mvc_get_value;",   ""  ]
 [ "sql",   "grow", "pattern sql.grow(X_1:bat[:oid], X_2:any_1):int ",  
"mvc_grow_wrap;",   ""  ]
-[ "sql",   "hot_snapshot", "unsafe command sql.hot_snapshot(X_1:str):void 
",   "SQLhot_snapshot;", ""  ]
+[ "sql",   "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str):void 
",   "SQLhot_snapshot;", ""  ]
 [ "sql",   "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str, 
X_2:bit):void ",  "SQLhot_snapshot_wrap;",""  ]
 [ "sql",   "importColumn", "pattern sql.importColumn(X_2:str, X_3:bit, 
X_4:str, X_5:int, X_6:oid) (X_0:bat[:any], X_1:oid) ",  
"mvc_bin_import_column_wrap;",  ""  ]
 [ "sql",   "importTable",  "unsafe pattern sql.importTable(X_1:str, 
X_2:str, X_3:int, X_4:bit, X_5:str...):bat[:any]... ", 
"mvc_bin_import_table_wrap;",   ""  ]
@@ -9418,7 +9418,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "resultSet","unsafe pattern sql.resultSet(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int], X_6:any...):int ",  
   "mvc_row_result_wrap;", ""  ]
 [ "sql",   "resultSet","unsafe pattern sql.resultSet(X_1:str, X_2:str, 
X_3:str, X_4:int, X_5:int, X_6:int, X_7:any):int ", 
"mvc_scalar_value_wrap;",   ""  ]
 [ "sql",   "resultSet","unsafe pattern sql.resultSet(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int], 
X_6:bat[:any]...):int ",   "mvc_table_result_wrap;",   ""  ]
-[ "sql",   "resume_log_flushing",  "unsafe command 
sql.resume_log_flushing():void ",   "SQLresume_log_flushing;",  ""  
]
+[ "sql",   "resume_log_flushing",  "unsafe pattern 
sql.resume_log_flushing():void ",   "SQLresume_log_flushing;",  ""  
]
 [ "sql",   "reuse","unsafe pattern sql.reuse(X_1:str, 
X_2:str):void ", "SQLreuse;",""  ]
 [ "sql",   "row_number",   "pattern sql.row_number(X_1:any_1, X_2:bit, 
X_3:bit):int ", "SQLrow_number;",   ""  ]
 [ "sql",   "rt_credentials",   "pattern sql.rt_credentials(X_3:str) 
(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str]) ",   "sql_rt_credentials_wrap;",  
   ""  ]
@@ -9461,7 +9461,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",   "sum",  "pattern sql.sum(X_1:int, X_2:bit, X_3:bit, X_4:int, 
X_5:oid, X_6:oid):lng ",   "SQLsum;",  ""  ]
 [ "sql",   "sum",  "pattern sql.sum(X_1:lng, X_2:bit, X_3:bit, X_4:int, 
X_5:oid, X_6:oid):lng ",   "SQLsum;",  ""  ]
 [ "sql",   "sum",  "pattern sql.sum(X_1:sht, X_2:bit, X_3:bit, X_4:int, 
X_5:oid, X_6:oid):lng ",   "SQLsum;",  ""  ]
-[ "sql",   "suspend_log_flushing", "unsafe command 
sql.suspend_log_flushing():void ",  "SQLsuspend_log_flushing;", ""  
]
+[ "sql",   "suspend_log_flushing", "unsafe pattern 
sql.suspend_log_flushing():void ",  "SQLsuspend_log_flushing;", ""  
]
 [ "sql",   "tid",  "pattern sql.tid(X_1:int, X_2:str, X_3:str):bat[:oid] 
","SQLtid;",  ""  ]
 [ "sql",   "tid",  "pattern sql.tid(X_1:int, X_2:str, X_3:str, X_4:int, 
X_5:int):bat

MonetDB: nospare - merged with default

2021-01-22 Thread Niels Nes
Changeset: 6be408cbaaa7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6be408cbaaa7
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
Branch: nospare
Log Message:

merged with default


diffs (truncated from 645 to 300 lines):

diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -197,7 +197,6 @@ typedef enum operator_type {
 #define is_simple_project(op)  (op == op_project)
 #define is_project(op) (op == op_project || op == op_groupby 
|| is_set(op))
 #define is_groupby(op) (op == op_groupby)
-#define is_sort(rel)   (((rel)->op == op_project && (rel)->r) || 
(rel)->op == op_topn)
 #define is_topn(op)(op == op_topn)
 #define is_modify(op)  (op == op_insert || op == op_update || op == 
op_delete || op == op_truncate)
 #define is_sample(op)  (op == op_sample)
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2087,6 +2087,7 @@ rel_push_topn_and_sample_down(visitor *v
ur = func(v->sql->sa, ur, sum_limit_offset(v->sql, 
rel));
 
u = rel_setop(v->sql->sa, ul, ur, op_union);
+   /* TODO the list of expressions of u don't match ul and 
ur */
u->exps = exps_alias(v->sql, r->exps);
u->nrcols = list_length(u->exps);
set_processed(u);
@@ -4111,7 +4112,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
sql_table *mt = (bt)?bt->r:NULL;
if (c && mt && 
list_find(c->t->pkey->k.columns, c, cmp) != NULL) {
v->changes++;
-   return rel_inplace_setop(rel, 
ul, ur, op_union,
+   return 
rel_inplace_setop(v->sql, rel, ul, ur, op_union,
   rel_projections(v->sql, 
rel, NULL, 1, 1));
}
}
@@ -5069,7 +5070,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
} else if (is_union(l->op) && !need_distinct(l) &&
   is_union(r->op) && !need_distinct(r)) {
sql_rel *nl, *nr;
@@ -5112,7 +5113,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
} else if (!is_union(l->op) &&
   is_union(r->op) && !need_distinct(r) &&
   !is_semi(rel->op)) {
@@ -5141,7 +5142,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
/* {semi}join ( A1, union (A2, B)) [A1.partkey = A2.partkey] ->
 * {semi}join ( A1, A2 )
 * and
@@ -5471,7 +5472,7 @@ rel_push_select_down_union(visitor *v, s
ul->exps = exps_copy(v->sql, s->exps);
ur->exps = exps_copy(v->sql, s->exps);
 
-   rel = rel_inplace_setop(rel, ul, ur, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   rel = rel_inplace_setop(v->sql, rel, ul, ur, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
v->changes++;
return rel;
}
@@ -5600,7 +5601,7 @@ rel_push_project_down_union(visitor *v, 
 

MonetDB: nospare - we no-longer have the list ukey->keys -- rkey...

2021-01-22 Thread Niels Nes
Changeset: 6de41a7ee41f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6de41a7ee41f
Modified Files:
sql/backends/monet5/rel_bin.c
sql/include/sql_catalog.h
sql/server/rel_optimizer.c
sql/server/rel_updates.c
sql/storage/store.c
Branch: nospare
Log Message:

we no-longer have the list ukey->keys -- rkey<-fkey, as object list/object 
available (because maintaining that in the multi-version
tree is a problem)
Therefor we keep a objectset (on ids) of all keys (sofar).
and use the dependencies to retrieve the list when needed.


diffs (truncated from 422 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
@@ -4332,10 +4332,11 @@ static stmt *
 join_updated_pkey(backend *be, sql_key * k, stmt *tids, stmt **updates)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
char *msg = NULL;
int nulls = 0;
node *m, *o;
-   sql_key *rk = (sql_key*)os_find_id(k->t->s->keys, be->mvc->session->tr, 
((sql_fkey*)k)->rkey);
+   sql_key *rk = (sql_key*)os_find_id(tr->cat->objects, tr, 
((sql_fkey*)k)->rkey);
stmt *s = NULL, *dels = stmt_tid(be, rk->t, 0), *fdels, *cnteqjoin;
stmt *null = NULL, *rows;
sql_subtype *lng = sql_bind_localtype("lng");
@@ -4397,10 +4398,11 @@ static stmt*
 sql_delete_set_Fkeys(backend *be, sql_key *k, stmt *ftids /* to be updated 
rows of fkey table */, int action)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
list *l = NULL;
int len = 0;
node *m, *o;
-   sql_key *rk = (sql_key*)os_find_id(k->t->s->keys, be->mvc->session->tr, 
((sql_fkey*)k)->rkey);
+   sql_key *rk = (sql_key*)os_find_id(tr->cat->objects, tr, 
((sql_fkey*)k)->rkey);
stmt **new_updates;
sql_table *t = mvc_bind_table(sql, k->t->s, k->t->base.name);
 
@@ -4439,10 +4441,11 @@ static stmt*
 sql_update_cascade_Fkeys(backend *be, sql_key *k, stmt *utids, stmt **updates, 
int action)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
list *l = NULL;
int len = 0;
node *m, *o;
-   sql_key *rk = (sql_key*)os_find_id(k->t->s->keys, be->mvc->session->tr, 
((sql_fkey*)k)->rkey);
+   sql_key *rk = (sql_key*)os_find_id(tr->cat->objects, tr, 
((sql_fkey*)k)->rkey);
stmt **new_updates;
stmt *rows;
sql_table *t = mvc_bind_table(sql, k->t->s, k->t->base.name);
@@ -4500,20 +4503,22 @@ cascade_ukey(backend *be, stmt **updates
 {
/* now iterate over all keys */
sql_trans *tr = be->mvc->session->tr;
-   struct os_iter oi;
-   os_iterator(&oi, k->t->s->keys, tr, NULL);
-   for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
-   sql_key *fk = (sql_key*)b;
-   sql_fkey *rk = (sql_fkey*)b;
-
-   if (fk->type != fkey || rk->rkey != k->base.id)
-   continue;
-
-   /* All rows of the foreign key table which are
-  affected by the primary key update should all
-  match one of the updated primary keys again.
-*/
-   switch (((sql_fkey*)fk)->on_update) {
+   list *keys = sql_trans_get_dependencies(tr, k->base.id, 
FKEY_DEPENDENCY, NULL);
+   if (keys) {
+   for (node *n = keys->h; n; n = n->next->next) {
+   sqlid fkey_id = *(sqlid*)n->data;
+   sql_base *b = os_find_id(tr->cat->objects, tr, fkey_id);
+   sql_key *fk = (sql_key*)b;
+   sql_fkey *rk = (sql_fkey*)b;
+
+   if (fk->type != fkey || rk->rkey != k->base.id)
+   continue;
+
+   /* All rows of the foreign key table which are
+  affected by the primary key update should all
+  match one of the updated primary keys again.
+*/
+   switch (((sql_fkey*)fk)->on_update) {
case ACT_NO_ACTION:
break;
case ACT_SET_NULL:
@@ -4525,7 +4530,9 @@ cascade_ukey(backend *be, stmt **updates
default:/*RESTRICT*/
if (!join_updated_pkey(be, fk, tids, updates))
return -1;
+   }
}
+   list_destroy(keys);
}
return 0;
 }
@@ -4602,8 +4609,9 @@ static stmt *
 join_idx_update(backend *be, sql_idx * i, stmt *ftids, stmt **updates, int 
updcol)
 {
mvc *sql = be->mvc;
+   sql_trans *tr = sql->session->tr;
node *m, *o;
-   sql_key *rk = (sql_key*)os_find_id(i->t->s->keys, be->mvc->session->tr, 
((sql_fkey*)i->key)->rkey);
+   sql_key *rk = (sql_key*)os_find_id(tr->cat->obj

MonetDB: default - Merged with Oct2020 and converted tests

2021-01-22 Thread Pedro Ferreira
Changeset: 5d454d2623a0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d454d2623a0
Removed Files:
sql/test/SQLancer/Tests/sqlancer02.sql
Modified Files:
sql/include/sql_relation.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/test/SQLancer/Tests/sqlancer02.test
sql/test/merge-partitions/Tests/mergepart31.test
Branch: default
Log Message:

Merged with Oct2020 and converted tests


diffs (truncated from 645 to 300 lines):

diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -197,7 +197,6 @@ typedef enum operator_type {
 #define is_simple_project(op)  (op == op_project)
 #define is_project(op) (op == op_project || op == op_groupby 
|| is_set(op))
 #define is_groupby(op) (op == op_groupby)
-#define is_sort(rel)   (((rel)->op == op_project && (rel)->r) || 
(rel)->op == op_topn)
 #define is_topn(op)(op == op_topn)
 #define is_modify(op)  (op == op_insert || op == op_update || op == 
op_delete || op == op_truncate)
 #define is_sample(op)  (op == op_sample)
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2077,6 +2077,7 @@ rel_push_topn_and_sample_down(visitor *v
ur = func(v->sql->sa, ur, sum_limit_offset(v->sql, 
rel));
 
u = rel_setop(v->sql->sa, ul, ur, op_union);
+   /* TODO the list of expressions of u don't match ul and 
ur */
u->exps = exps_alias(v->sql, r->exps);
u->nrcols = list_length(u->exps);
set_processed(u);
@@ -4100,7 +4101,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
sql_table *mt = (bt)?bt->r:NULL;
if (c && mt && 
list_find(c->t->pkey->k.columns, c, cmp) != NULL) {
v->changes++;
-   return rel_inplace_setop(rel, 
ul, ur, op_union,
+   return 
rel_inplace_setop(v->sql, rel, ul, ur, op_union,
   rel_projections(v->sql, 
rel, NULL, 1, 1));
}
}
@@ -5058,7 +5059,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
} else if (is_union(l->op) && !need_distinct(l) &&
   is_union(r->op) && !need_distinct(r)) {
sql_rel *nl, *nr;
@@ -5101,7 +5102,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
} else if (!is_union(l->op) &&
   is_union(r->op) && !need_distinct(r) &&
   !is_semi(rel->op)) {
@@ -5130,7 +5131,7 @@ rel_push_join_down_union(visitor *v, sql
nl = rel_project(v->sql->sa, nl, 
rel_projections(v->sql, nl, NULL, 1, 1));
nr = rel_project(v->sql->sa, nr, 
rel_projections(v->sql, nr, NULL, 1, 1));
v->changes++;
-   return rel_inplace_setop(rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+   return rel_inplace_setop(v->sql, rel, nl, nr, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
/* {semi}join ( A1, union (A2, B)) [A1.partkey = A2.partkey] ->
 * {semi}join ( A1, A2 )
 * and
@@ -5460,7 +5461,7 @@ rel_push_select_down_union(visitor *v, s
ul->exps = exps_copy(v->sql, s->exps);
ur->exps = exps_copy(v->sql, s->exps);
 
-   rel = rel_inplace_setop(rel, ul, ur, op_union, 
rel_projections(v->sql, rel, NULL, 1, 1));
+