MonetDB: nospare - Make rollback respect safepoints.
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
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
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
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...
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...
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
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
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
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.
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
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.
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...
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...
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
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_...
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.
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.
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.
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...
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
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
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
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...
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
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)); +