MonetDB: Jun2020 - cleanup
Changeset: 176a7541df64 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=176a7541df64 Modified Files: sql/storage/bat/bat_storage.c Branch: Jun2020 Log Message: cleanup diffs (32 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 @@ -2083,20 +2083,6 @@ clear_del(sql_trans *tr, sql_table *t) } static int -check_deltas( sql_delta *c ) -{ - for (sql_delta *i = c; i; i = i->next) { - if (!i->next) - break; - for (sql_delta *j = i->next; j; j = j->next) { - if (j == i) - return 1; - } - } - return 0; -} - -static int gtr_update_delta( sql_trans *tr, sql_delta *cbat, int *changes, int id, int tpe) { int ok = LOG_OK, cleared = 0; @@ -2104,7 +2090,6 @@ gtr_update_delta( sql_trans *tr, sql_del (void)tr; assert(ATOMIC_GET(_nr_active)==0); - assert(check_deltas(cbat) == 0); if (!cbat->bid) { cleared = 1; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - cleanup old delta/dbat structures earlier
Changeset: 8fb0eb7ed19f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8fb0eb7ed19f Modified Files: sql/storage/bat/bat_storage.c Branch: Jun2020 Log Message: cleanup old delta/dbat structures earlier (more stable select count(*) from bbp()) diffs (166 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 @@ -327,6 +327,7 @@ delta_update_bat( sql_delta *bat, BAT *t } if (BATappend(ui, tids, o, true) != GDK_SUCCEED || BATappend(uv, updates, o, true) != GDK_SUCCEED) { + bat_destroy(o); bat_destroy(ui); bat_destroy(uv); return LOG_ERR; @@ -551,6 +552,7 @@ dup_delta(sql_trans *tr, sql_delta *obat return LOG_ERR; bat_set_access(b, BAT_READ); bat->ibid = temp_create(b); + bat_destroy(b); } } else { /* old column */ bat->ibid = ebat_copy(bat->ibid, bat->ibase, 0); @@ -715,8 +717,7 @@ delta_append_bat( sql_delta *bat, BAT *i if (isVIEW(i) && b->batCacheid == VIEWtparent(i)) { BAT *ic = COLcopy(i, i->ttype, true, TRANSIENT); if (ic == NULL || BATappend(b, ic, NULL, true) != GDK_SUCCEED) { - if(ic) - bat_destroy(ic); + bat_destroy(ic); bat_destroy(b); return LOG_ERR; } @@ -1339,8 +1340,10 @@ log_create_delta(sql_delta *bat, char tp bat->uvbid = e_bat(b->ttype); if (bat->uibid == BID_NIL || bat->uvbid == BID_NIL) res = LOG_ERR; - if (GDKinmemory()) + if (GDKinmemory()) { + bat_destroy(b); return res; + } ok = logger_add_bat(bat_logger, b, bat->name, tpe, id); if (ok == GDK_SUCCEED) @@ -1976,8 +1979,7 @@ clear_delta(sql_trans *tr, sql_delta *ba bat_clear(b); BATcommit(b); } - if (b) - bat_destroy(b); + bat_destroy(b); } if (bat->bid) { b = temp_descriptor(bat->bid); @@ -2001,8 +2003,7 @@ clear_delta(sql_trans *tr, sql_delta *ba bat_clear(b); BATcommit(b); } - if (b) - bat_destroy(b); + bat_destroy(b); } if (bat->uvbid) { b = temp_descriptor(bat->uvbid); @@ -2010,8 +2011,7 @@ clear_delta(sql_trans *tr, sql_delta *ba bat_clear(b); BATcommit(b); } - if (b) - bat_destroy(b); + bat_destroy(b); } bat->cleared = 1; bat->ibase = 0; @@ -2689,9 +2689,8 @@ static int update_table(sql_trans *tr, sql_table *ft, sql_table *tt) { sql_trans *oldest = oldest_active_transaction(); - sql_table *ot = NULL; int ok = LOG_OK; - node *n, *m, *o = NULL; + node *n, *m; if (ATOMIC_GET(_nr_active) == 1 || ft->base.allocated) { if (ATOMIC_GET(_nr_active) > 1 && ft->data) { /* move delta */ @@ -2710,9 +2709,7 @@ update_table(sql_trans *tr, sql_table *f } while (b && b->wtime >= oldest->stime) b = b->next; - /* find table t->base.stime */ - ot = tr_find_table(oldest, tt); - if (b && ot && b->wtime < ot->base.stime) { + if (b && b->next) { /* anything older can go */ delayed_destroy_dbat(b->next); b->next = NULL; @@ -2737,9 +2734,7 @@ update_table(sql_trans *tr, sql_table *f ft->data = NULL; } } - if (ot) - o = ot->columns.set->h; - for (n = ft->columns.set->h, m = tt->columns.set->h; ok == LOG_OK && n && m; n = n->next, m = m->next, o=(o?o->next:NULL)) { + for (n = ft->columns.set->h, m = tt->columns.set->h; ok == LOG_OK && n && m; n = n->next, m = m->next) { sql_column *cc = n->data; // TODO: either stick to to/from terminology or old/current terminology sql_column *oc = m->data; @@ -2747,7 +2742,6 @@ update_table(sql_trans *tr, sql_table *f assert(!cc->base.wtime || oc->base.wtime < cc->base.wtime || (oc->base.wtime == cc->base.wtime &&
MonetDB: Jun2020 - Cleanup
Changeset: b10b0c380a1a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b10b0c380a1a Modified Files: sql/server/sql_atom.c Branch: Jun2020 Log Message: Cleanup diffs (39 lines): diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c --- a/sql/server/sql_atom.c +++ b/sql/server/sql_atom.c @@ -576,30 +576,21 @@ atom2sql(atom *a, int timezone) switch (ec) { case EC_TIME: - case EC_TIME_TZ: { - char *n = stpcpy(val1, "TIME"); + case EC_TIME_TZ: + case EC_TIMESTAMP: + case EC_TIMESTAMP_TZ: { + char *n = stpcpy(val1, (ec == EC_TIME || ec == EC_TIME_TZ) ? "TIME" : "TIMESTAMP"); if (a->tpe.digits) { char str[16]; sprintf(str, "%u", a->tpe.digits); n = stpcpy(stpcpy(stpcpy(n, " ("), str), ")"); } - if (ec == EC_TIME_TZ) + if (ec == EC_TIME_TZ || ec == EC_TIMESTAMP_TZ) stpcpy(n, " WITH TIME ZONE"); } break; case EC_DATE: strcpy(val1, "DATE"); break; - case EC_TIMESTAMP: - case EC_TIMESTAMP_TZ: { - char *n = stpcpy(val1, "TIMESTAMP"); - if (a->tpe.digits) { - char str[16]; - sprintf(str, "%u", a->tpe.digits); - n = stpcpy(stpcpy(stpcpy(n, " ("), str), ")"); - } - if (ec == EC_TIMESTAMP_TZ) - stpcpy(n, " WITH TIME ZONE"); - } break; default: assert(0); } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - cleanup
Changeset: 946211cedad2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=946211cedad2 Modified Files: sql/backends/monet5/rel_bin.c Branch: Jun2020 Log Message: cleanup diffs (27 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 @@ -1098,23 +1098,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l s = stmt_unop(be, s, a); s->cand = cand; } -#if 0 - } else if (((e->flag&3) != 3) /* both sides closed use between implementation */ && l->nrcols > 0 && r->nrcols > 0 && r2->nrcols > 0) { - s = stmt_uselect(be, l, r, range2lcompare(e->flag), - stmt_uselect(be, l, r2, range2rcompare(e->flag), sel, is_anti(e), 0), is_anti(e), 0); -#endif } else { - /* done in stmt_uselect2 - if (sel && ((l->cand && l->nrcols) || (r->cand && r->nrcols) || (r2->cand && r->nrcols))) { - if (!l->cand && l->nrcols) - l = stmt_project(be, sel, l); - if (!r->cand && r->nrcols) - r = stmt_project(be, sel, r); - if (!r2->cand && r2->nrcols) - r2 = stmt_project(be, sel, r2); - sel = NULL; - } - */ if (l->nrcols == 0) l = stmt_const(be, bin_first_column(be, left), l); s = stmt_uselect2(be, l, r, r2, (comp_type)e->flag, sel, is_anti(e)); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup. Removed mark_exists and mark_notexis...
Changeset: 226e2185680a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=226e2185680a Modified Files: sql/backends/monet5/rel_bin.c sql/include/sql_catalog.h sql/rel.txt sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_optimizer.c Branch: Jun2020 Log Message: Cleanup. Removed mark_exists and mark_notexists because they were never used. Cleaned equality joins only detection diffs (158 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 @@ -2181,7 +2181,7 @@ split_join_exps(sql_rel *rel, list *join int left_reference = 0, right_reference = 0; /* we can handle thetajoins, rangejoins and filter joins (like) */ - /* ToDo how about mark_exists/not_exists and atom expressions? */ + /* ToDo how about atom expressions? */ if (e->type == e_cmp) { int flag = e->flag & ~CMP_BETWEEN; /* check if its a select or join expression, ie use only expressions of one relation left and of the other right (than join) */ @@ -2231,7 +2231,7 @@ split_join_exps(sql_rel *rel, list *join } } -#define is_priority_exp(e) ((e)->type == e_cmp && (e)->flag == cmp_equal) +#define is_priority_exp(e) ((e)->flag == cmp_equal) static list * get_equi_joins_first(mvc *sql, list *exps, int *equality_only) @@ -2240,17 +2240,17 @@ get_equi_joins_first(mvc *sql, list *exp for( node *n = exps->h; n; n = n->next ) { sql_exp *e = n->data; - if (is_priority_exp(e)) { + + assert(e->type == e_cmp && e->flag != cmp_in && e->flag != cmp_notin && e->flag != cmp_or); + if (is_priority_exp(e)) list_append(new_exps, e); - *equality_only &= (e->flag == cmp_equal); - } + *equality_only &= (e->flag == cmp_equal || e->flag == mark_in || e->flag == mark_notin); } for( node *n = exps->h; n; n = n->next ) { sql_exp *e = n->data; - if (!is_priority_exp(e)) { + + if (!is_priority_exp(e)) list_append(new_exps, e); - *equality_only &= (e->flag == mark_in || e->flag == mark_notin); - } } return new_exps; } @@ -2471,9 +2471,7 @@ rel2bin_join(backend *be, sql_rel *rel, static int exp_is_mark(sql_exp *e) { - if (e->type == e_cmp && - (e->flag == mark_in || e->flag == mark_notin || -e->flag == mark_exists || e->flag == mark_notexists)) + if (e->type == e_cmp && (e->flag == mark_in || e->flag == mark_notin)) return 1; return 0; } 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 @@ -164,15 +164,13 @@ typedef enum comp_type { mark_in = 10, /* mark joins */ mark_notin = 11, - mark_exists = 12, - mark_notexists = 13, /* The followin cmp_* are only used within stmt (not sql_exp) */ - cmp_all = 14, /* special case for crossproducts */ - cmp_project = 15, /* special case for projection joins */ - cmp_joined = 16,/* special case already joined */ - cmp_left = 17, /* special case equi join, keep left order */ - cmp_left_project = 18 /* last step of outer join */ + cmp_all = 12, /* special case for crossproducts */ + cmp_project = 13, /* special case for projection joins */ + cmp_joined = 14,/* special case already joined */ + cmp_left = 15, /* special case equi join, keep left order */ + cmp_left_project = 16 /* last step of outer join */ } comp_type; /* for ranges we keep the requirment for symmetric */ diff --git a/sql/rel.txt b/sql/rel.txt --- a/sql/rel.txt +++ b/sql/rel.txt @@ -128,15 +128,13 @@ e_cmp mark_in = 10, /* mark joins */ mark_notin = 11, - mark_exists = 12, - mark_notexists = 13, /* The followin cmp_* are only used within stmt (not sql_exp) */ - cmp_all = 14, /* special case for crossproducts */ - cmp_project = 15, /* special case for projection joins */ - cmp_joined = 16,/* special case already joined */ - cmp_left = 17, /* special case equi join, keep left order */ - cmp_left_project
MonetDB: Jun2020 - cleanup rel2bin_join, ie first split in list ...
Changeset: c3a8ef159903 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c3a8ef159903 Modified Files: sql/backends/monet5/rel_bin.c Branch: Jun2020 Log Message: cleanup rel2bin_join, ie first split in list of join and select (+ too complex mal-join cases) diffs (truncated from 303 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 @@ -890,9 +890,9 @@ exp_bin(backend *be, sql_exp *e, stmt *l for( n = args->h; n; n = n->next ) { s = NULL; if (!swapped) - s = exp_bin(be, n->data, left, NULL, grp, ext, cnt, NULL, NULL, depth+1, reduce); + s = exp_bin(be, n->data, left, NULL, grp, ext, cnt, NULL, NULL, depth+1, 0); if (!s && (first || swapped)) { - s = exp_bin(be, n->data, right, NULL, grp, ext, cnt, NULL, NULL, depth+1, reduce); + s = exp_bin(be, n->data, right, NULL, grp, ext, cnt, NULL, NULL, depth+1, 0); swapped = 1; } if (!s) @@ -906,7 +906,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l ops = sa_list(sql->sa); args = e->r; for( n = args->h; n; n = n->next ) { - s = exp_bin(be, n->data, (swapped || !right)?left:right, NULL, grp, ext, cnt, NULL, NULL, depth+1, reduce); + s = exp_bin(be, n->data, (swapped || !right)?left:right, NULL, grp, ext, cnt, NULL, NULL, depth+1, 0); if (!s) return s; list_append(ops, s); @@ -1016,27 +1016,27 @@ exp_bin(backend *be, sql_exp *e, stmt *l sql->opt_stats[0]++; if (!l) { - l = exp_bin(be, e->l, left, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + l = exp_bin(be, e->l, left, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); swapped = 0; } if (!l && right) { - l = exp_bin(be, e->l, right, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + l = exp_bin(be, e->l, right, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); swapped = 1; } if (swapped || !right) - r = exp_bin(be, re, left, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + r = exp_bin(be, re, left, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); else - r = exp_bin(be, re, right, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + r = exp_bin(be, re, right, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); if (!r && !swapped) { - r = exp_bin(be, re, left, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + r = exp_bin(be, re, left, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); is_select = 1; } if (!r && swapped) { - r = exp_bin(be, re, right, NULL, grp, ext, cnt, sel, NULL, depth+1, reduce); + r = exp_bin(be, re, right, NULL, grp, ext, cnt, sel, NULL, depth+1, 0); is_select = 1; } if (re2) - r2 = exp_bin(be, re2, left, right, grp, ext, cnt, sel, NULL, depth+1, reduce); + r2 = exp_bin(be, re2, left, right, grp, ext, cnt, sel, NULL, depth+1, 0); if (!l || !r || (re2 && !r2)) { TRC_ERROR(SQL_EXECUTION, "Query: '%s'\n", sql->query); @@ -1066,7 +1066,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l } } else { if (r2) { - if (depth || !reduce || (l->nrcols == 0 && r->nrcols == 0 && r2->nrcols == 0)) { + if (!reduce || (l->nrcols == 0 && r->nrcols == 0 && r2->nrcols == 0)) { sql_subtype *bt = sql_bind_localtype("bit"); sql_subfunc *lf = sql_bind_func(sql->sa, sql->session->schema, compare_func(range2lcompare(e->flag), 0), @@ -1109,7 +1109,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l } } else { /* value compare or select */ - if (depth || !reduce ||
MonetDB: Jun2020 - Cleanup layout.
Changeset: b6ead7de4477 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b6ead7de4477 Modified Files: gdk/gdk_hash.c Branch: Jun2020 Log Message: Cleanup layout. diffs (106 lines): diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c --- a/gdk/gdk_hash.c +++ b/gdk/gdk_hash.c @@ -35,7 +35,7 @@ #include "gdk.h" #include "gdk_private.h" -static int +static uint8_t HASHwidth(BUN hashsize) { if (hashsize <= (BUN) BUN2_NONE) @@ -1007,51 +1007,57 @@ HASHprobe(const Hash *h, const void *v) } } -void -HASHins(BAT *b, BUN i, const void *v) +static void +HASHins_locked(BAT *b, BUN i, const void *v) { - MT_lock_set(>batIdxLock); Hash *h = b->thash; if (h == NULL) { - /* nothing to do */ - } else if (h == (Hash *) 1) { - GDKunlink(BBPselectfarm(b->batRole, b->ttype, hashheap), - BATDIR, - BBP_physical(b->batCacheid), - "thash"); + return; + } + if (h == (Hash *) 1) { b->thash = NULL; - } else if ((ATOMsize(b->ttype) > 2 && - HASHgrowbucket(b) != GDK_SUCCEED) || - ((i + 1) * h->width > h->heaplink.size && - HEAPextend(>heaplink, - i * h->width + GDK_mmap_pagesize, - true) != GDK_SUCCEED)) { + doHASHdestroy(b, h); + return; + } + if ((ATOMsize(b->ttype) > 2 && +HASHgrowbucket(b) != GDK_SUCCEED) || + ((i + 1) * h->width > h->heaplink.size && +HEAPextend(>heaplink, + i * h->width + GDK_mmap_pagesize, + true) != GDK_SUCCEED)) { b->thash = NULL; HEAPfree(>heapbckt, true); HEAPfree(>heaplink, true); GDKfree(h); - } else { - h->Link = h->heaplink.base; - BUN c = HASHprobe(h, v); - h->heaplink.free += h->width; - BUN hb = HASHget(h, c); - BUN hb2; - BATiter bi = bat_iterator(b); - for (hb2 = hb; -hb2 != HASHnil(h); -hb2 = HASHgetlink(h, hb2)) { - if (ATOMcmp(h->type, - v, - BUNtail(bi, hb2)) == 0) - break; - } - h->nheads += hb == HASHnil(h); - h->nunique += hb2 == HASHnil(h); - HASHputlink(h, i, hb); - HASHput(h, c, i); - h->heapbckt.dirty = true; - h->heaplink.dirty = true; + return; } + h->Link = h->heaplink.base; + BUN c = HASHprobe(h, v); + h->heaplink.free += h->width; + BUN hb = HASHget(h, c); + BUN hb2; + BATiter bi = bat_iterator(b); + for (hb2 = hb; +hb2 != HASHnil(h); +hb2 = HASHgetlink(h, hb2)) { + if (ATOMcmp(h->type, + v, + BUNtail(bi, hb2)) == 0) + break; + } + h->nheads += hb == HASHnil(h); + h->nunique += hb2 == HASHnil(h); + HASHputlink(h, i, hb); + HASHput(h, c, i); + h->heapbckt.dirty = true; + h->heaplink.dirty = true; +} + +void +HASHins(BAT *b, BUN i, const void *v) +{ + MT_lock_set(>batIdxLock); + HASHins_locked(b, i, v); MT_lock_unset(>batIdxLock); } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup existing transaction before returning
Changeset: 7c286a75c046 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c286a75c046 Modified Files: sql/backends/monet5/sql_user.c Branch: Jun2020 Log Message: Cleanup existing transaction before returning diffs (17 lines): diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c --- a/sql/backends/monet5/sql_user.c +++ b/sql/backends/monet5/sql_user.c @@ -522,8 +522,12 @@ monet5_user_set_def_schema(mvc *m, oid u users_schema = find_sql_column(user_info, "default_schema"); rid = table_funcs.column_find_row(m->session->tr, users_name, username, NULL); - if (is_oid_nil(rid)) + if (is_oid_nil(rid)) { + if (m->session->tr->active && (other = mvc_rollback(m, 0, NULL, false)) != MAL_SUCCEED) + freeException(other); + GDKfree(username); return NULL; + } p = table_funcs.column_find_value(m->session->tr, users_schema, rid); assert(p); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup and propagate not through comparison ...
Changeset: 7e044dae5c3e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e044dae5c3e Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_select.c sql/server/sql_parser.y Branch: Jun2020 Log Message: Cleanup and propagate not through comparison symbols diffs (105 lines): diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -67,6 +67,42 @@ swap_compare( comp_type t ) } comp_type +negate_compare( comp_type t ) +{ + switch(t) { + case cmp_equal: + return cmp_notequal; + case cmp_notequal: + return cmp_equal; + case cmp_lt: + return cmp_gte; + case cmp_lte: + return cmp_gt; + case cmp_gte: + return cmp_lt; + case cmp_gt: + return cmp_lte; + + case cmp_in: + return cmp_notin; + case cmp_notin: + return cmp_in; + + case mark_in: + return mark_notin; + case mark_notin: + return mark_in; + case mark_exists: + return mark_notexists; + case mark_notexists: + return mark_exists; + + default: + return t; + } +} + +comp_type range2lcompare( int r ) { if (r&1) { diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -25,6 +25,7 @@ extern comp_type compare_str2type(const char *compare_op); extern comp_type swap_compare( comp_type t ); +extern comp_type negate_compare( comp_type t ); extern comp_type range2lcompare( int r ); extern comp_type range2rcompare( int r ); extern int compare2range( int l, int r ); diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -2243,6 +2243,14 @@ rel_in_exp(sql_query *query, sql_rel *re case SQL_NOT: /* nested NOTs eliminate each other */ \ sc->data.sym = sc->data.sym->data.sym; \ return NEXT_CALL; \ + case SQL_COMPARE: { \ + dnode *cmp_n = sc->data.sym->data.lval->h; \ + comp_type neg_cmp_type = negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the comparator */ \ + cmp_n->next->data.sval = sa_strdup(sql->sa, compare_func(neg_cmp_type, 0)); \ + if (cmp_n->next->next->next) /* negating ANY/ALL */ \ + cmp_n->next->next->next->data.i_val = cmp_n->next->next->next->data.i_val == 0 ? 1 : 0; \ + return NEXT_CALL; \ + } \ default: \ break; \ } diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -3622,24 +3622,8 @@ predicate: ; pred_exp: -NOT pred_exp - { $$ = $2; - - if ($$->token == SQL_EXISTS) - $$->token = SQL_NOT_EXISTS; - else if ($$->token == SQL_NOT_EXISTS) - $$->token = SQL_EXISTS; - else if ($$->token == SQL_NOT_BETWEEN) - $$->token = SQL_BETWEEN; - else if ($$->token == SQL_BETWEEN) - $$->token = SQL_NOT_BETWEEN; - else if ($$->token == SQL_NOT_LIKE) - $$->token = SQL_LIKE; - else if ($$->token == SQL_LIKE) - $$->token = SQL_NOT_LIKE; - else - $$ = _symbol_create_symbol(SQL_NOT, $2); } - | predicate { $$ = $1; } +NOT pred_exp { $$ = _symbol_create_symbol(SQL_NOT, $2); } + | predicate { $$ = $1; } ; comparison_predicate: ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup: GCC version 2 is really old.
Changeset: 80322c98c153 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=80322c98c153 Modified Files: common/stream/stream.h Branch: Jun2020 Log Message: Cleanup: GCC version 2 is really old. diffs (23 lines): diff --git a/common/stream/stream.h b/common/stream/stream.h --- a/common/stream/stream.h +++ b/common/stream/stream.h @@ -54,18 +54,11 @@ typedef __int128_t hge; /* Defines to help the compiler check printf-style format arguments. * These defines are also in our config.h, but we repeat them here so * that we don't need that for this file.*/ -#if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +#ifndef __GNUC__ /* This feature is available in gcc versions 2.5 and later. */ # ifndef __attribute__ # define __attribute__(Spec) /* empty */ # endif -#else -/* The __-protected variants of `format' and `printf' attributes are - * accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ -# if !defined(__format__) && (__GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)) -# define __format__ format -# define __printf__ printf -# endif #endif #if !defined(_MSC_VER) && !defined(_In_z_) # define _In_z_ ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup some crypt stuff.
Changeset: 3a473a6e2111 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3a473a6e2111 Modified Files: common/utils/mcrypt.c common/utils/mcrypt.h configure.ag Branch: Jun2020 Log Message: Cleanup some crypt stuff. diffs (200 lines): diff --git a/common/utils/mcrypt.c b/common/utils/mcrypt.c --- a/common/utils/mcrypt.c +++ b/common/utils/mcrypt.c @@ -84,7 +84,7 @@ mcrypt_getHashAlgorithms(void) char * mcrypt_MD5Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) +#ifndef HAVE_EMBEDDED MD5_CTX c; unsigned char md[MD5_DIGEST_LENGTH]; char *ret; @@ -114,6 +114,7 @@ mcrypt_MD5Sum(const char *string, size_t } #endif +#ifdef HAVE_SHA1_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-1 hash of the given string. @@ -121,7 +122,7 @@ mcrypt_MD5Sum(const char *string, size_t char * mcrypt_SHA1Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_SHA1_UPDATE) +#ifndef HAVE_EMBEDDED SHA_CTX c; unsigned char md[SHA_DIGEST_LENGTH]; char *ret; @@ -149,7 +150,9 @@ mcrypt_SHA1Sum(const char *string, size_ return NULL; #endif } +#endif +#ifdef HAVE_SHA224_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-224 hash of the given string. @@ -157,7 +160,7 @@ mcrypt_SHA1Sum(const char *string, size_ char * mcrypt_SHA224Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_SHA224_UPDATE) +#ifndef HAVE_EMBEDDED SHA256_CTX c; unsigned char md[SHA224_DIGEST_LENGTH]; char *ret; @@ -188,7 +191,9 @@ mcrypt_SHA224Sum(const char *string, siz return NULL; #endif } +#endif +#ifdef HAVE_SHA256_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-256 hash of the given string. @@ -196,7 +201,7 @@ mcrypt_SHA224Sum(const char *string, siz char * mcrypt_SHA256Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_SHA256_UPDATE) +#ifndef HAVE_EMBEDDED SHA256_CTX c; unsigned char md[SHA256_DIGEST_LENGTH]; char *ret; @@ -229,7 +234,9 @@ mcrypt_SHA256Sum(const char *string, siz return NULL; #endif } +#endif +#ifdef HAVE_SHA384_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-384 hash of the given string. @@ -237,7 +244,7 @@ mcrypt_SHA256Sum(const char *string, siz char * mcrypt_SHA384Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_SHA384_UPDATE) +#ifndef HAVE_EMBEDDED SHA512_CTX c; unsigned char md[SHA384_DIGEST_LENGTH]; char *ret; @@ -274,7 +281,9 @@ mcrypt_SHA384Sum(const char *string, siz return NULL; #endif } +#endif +#ifdef HAVE_SHA512_UPDATE /** * Returns a malloced string representing the hex representation of * the SHA-512 hash of the given string. @@ -282,7 +291,7 @@ mcrypt_SHA384Sum(const char *string, siz char * mcrypt_SHA512Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_SHA512_UPDATE) +#ifndef HAVE_EMBEDDED SHA512_CTX c; unsigned char md[SHA512_DIGEST_LENGTH]; char *ret; @@ -321,11 +330,12 @@ mcrypt_SHA512Sum(const char *string, siz #else (void) string; (void) len; - fprintf(stderr, "No SHA512 digest function available.\n"); return NULL; #endif } +#endif +#ifdef HAVE_RIPEMD160_UPDATE /** * Returns a malloced string representing the hex representation of * the RIPEMD-160 hash of the given string. @@ -333,7 +343,7 @@ mcrypt_SHA512Sum(const char *string, siz char * mcrypt_RIPEMD160Sum(const char *string, size_t len) { -#if !defined(HAVE_EMBEDDED) && defined(HAVE_RIPEMD160_UPDATE) +#ifndef HAVE_EMBEDDED RIPEMD160_CTX c; unsigned char md[RIPEMD160_DIGEST_LENGTH]; char *ret; @@ -358,10 +368,10 @@ mcrypt_RIPEMD160Sum(const char *string, #else (void) string; (void) len; - fprintf(stderr, "No RIPEMD160 digest function available.\n"); return NULL; #endif } +#endif /** * Returns a malloced string representing the hex representation of @@ -377,7 +387,6 @@ mcrypt_BackendSum(const char *string, si #else (void) string; (void) len; - fprintf(stderr, "No digest function available.\n"); return NULL; #endif } diff --git a/common/utils/mcrypt.h b/common/utils/mcrypt.h --- a/common/utils/mcrypt.h +++ b/common/utils/mcrypt.h @@ -21,13 +21,27 @@ mcrypt_export const char *mcrypt_getHashAlgorithms(void) __attribute__((__const__)); +#ifdef HAVE_MD5_UPDATE mcrypt_export char *mcrypt_MD5Sum(const char *string, size_t len); +#endif +#ifdef HAVE_SHA1_UPDATE mcrypt_export char *mcrypt_SHA1Sum(const char *string, size_t len); +#endif +#ifdef HAVE_SHA224_UPDATE mcrypt_export char *mcrypt_SHA224Sum(const char *string,
MonetDB: Jun2020 - Cleanup. Find redudant relation names in the ...
Changeset: b1fc17098c61 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b1fc17098c61 Modified Files: sql/server/rel_updates.c Branch: Jun2020 Log Message: Cleanup. Find redudant relation names in the from clause of updates. Also cleaned table aliasing in updates diffs (151 lines): diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -12,6 +12,7 @@ #include "rel_select.h" #include "rel_rel.h" #include "rel_exp.h" +#include "rel_schema.h" #include "sql_privileges.h" #include "rel_unnest.h" #include "rel_optimizer.h" @@ -1104,26 +1105,22 @@ update_table(sql_query *query, dlist *qn t = mvc_bind_table(sql, NULL, tname); } if (update_allowed(sql, t, tname, "UPDATE", "update", 0) != NULL) { - sql_rel *r = NULL, *bt = rel_basetable(sql, t, t->base.name), *res = bt; + sql_rel *r = NULL, *bt = rel_basetable(sql, t, alias ? alias : t->base.name), *res = bt; - if (alias) { - for (node *nn = res->exps->h ; nn ; nn = nn->next) - exp_setname(sql->sa, (sql_exp*) nn->data, alias, NULL); //the last parameter is optional, hence NULL - } if (opt_from) { dlist *fl = opt_from->data.lval; - dnode *n = NULL; - sql_rel *fnd = NULL; + list *names = list_append(new_exp_list(sql->sa), (char*) rel_name(bt)); - for (n = fl->h; n && res; n = n->next) { - fnd = table_ref(query, NULL, n->data.sym, 0); + for (dnode *n = fl->h; n && res; n = n->next) { + char *nrame = NULL; + sql_rel *fnd = table_ref(query, NULL, n->data.sym, 0); + if (fnd) { - if (alias) { - for (node *nn = fnd->exps->h ; nn ; nn = nn->next) { - sql_exp* ee = (sql_exp*) nn->data; - if (exp_relname(ee) && !strcmp(exp_relname(ee), alias)) - return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: multiple references into table '%s'", alias); - } + if ((nrame = (char*) rel_name(fnd))) { + if (list_find(names, nrame, (fcmp) )) + return sql_error(sql, 02, SQLSTATE(42000) "UPDATE: multiple references into table '%s'", nrame); + else + list_append(names, nrame); } res = rel_crossproduct(sql->sa, res, fnd, op_join); } else @@ -1221,16 +1218,12 @@ delete_table(sql_query *query, dlist *qn r = rel_logical_exp(query, NULL, opt_where, sql_where); if (r) { /* simple predicate which is not using the to be updated table. We add a select all */ - sql_rel *l = rel_basetable(sql, t, t->base.name ); + sql_rel *l = rel_basetable(sql, t, alias ? alias : t->base.name); r = rel_crossproduct(sql->sa, l, r, op_join); } else { sql->errstr[0] = 0; sql->session->status = status; - r = rel_basetable(sql, t, t->base.name ); - if (alias) { - for (node *nn = r->exps->h ; nn ; nn = nn->next) - exp_setname(sql->sa, (sql_exp*) nn->data, alias, NULL); //the last parameter is optional, hence NULL - } + r = rel_basetable(sql, t, alias ? alias : t->base.name); r = rel_logical_exp(query, r, opt_where, sql_where); } if (!r) @@ -1271,8 +1264,6 @@ truncate_table(mvc *sql, dlist *qname, i #define MERGE_UPDATE_DELETE 1 #define MERGE_INSERT2 -extern sql_rel *rel_list(sql_allocator *sa, sql_rel *l, sql_rel *r); - static sql_rel * validate_merge_update_delete(mvc *sql, sql_table *t, str alias, sql_rel *joined_table, tokens upd_token, sql_rel *upd_del, sql_rel *bt, sql_rel *extra_selection) @@ -1323,12 +1314,13 @@
MonetDB: Jun2020 - Cleanup: we do not use sharedstatedir.
Changeset: 46dad74e2aea for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46dad74e2aea Modified Files: NT/Makefile NT/rules.msc NT/winconfig.py buildtools/autogen/autogen/am.py buildtools/autogen/autogen/msc.py testing/Mtest.py.in Branch: Jun2020 Log Message: Cleanup: we do not use sharedstatedir. diffs (76 lines): diff --git a/NT/Makefile b/NT/Makefile --- a/NT/Makefile +++ b/NT/Makefile @@ -64,7 +64,6 @@ targetdirs: if not exist "$(libexecdir)"$(MKDIR) "$(libexecdir)" if not exist "$(datadir)" $(MKDIR) "$(datadir)" if not exist "$(sysconfdir)"$(MKDIR) "$(sysconfdir)" - if not exist "$(sharedstatedir)"$(MKDIR) "$(sharedstatedir)" if not exist "$(localstatedir)" $(MKDIR) "$(localstatedir)" if not exist "$(libdir)"$(MKDIR) "$(libdir)" if not exist "$(infodir)" $(MKDIR) "$(infodir)" diff --git a/NT/rules.msc b/NT/rules.msc --- a/NT/rules.msc +++ b/NT/rules.msc @@ -218,7 +218,6 @@ sbindir = $(exec_prefix)\sbin libexecdir = $(exec_prefix)\libexec datadir = $(prefix)\share sysconfdir = $(prefix)\etc -sharedstatedir = $(prefix)\com localstatedir = $(prefix)\var libdir = $(exec_prefix)\lib infodir = $(prefix)\info diff --git a/NT/winconfig.py b/NT/winconfig.py --- a/NT/winconfig.py +++ b/NT/winconfig.py @@ -18,7 +18,6 @@ subs = [("@exec_prefix@", r'%prefix%'), ("@datadir@", r'%prefix%\share'), ("@datarootdir@", r'%prefix%\share'), ("@sysconfdir@", r'%prefix%\etc'), -("@sharedstatedir@", r'%prefix%\com'), ("@localstatedir@", r'%prefix%\var'), ("@libdir@", r'%exec_prefix%\lib'), ("@infodir@", r'%prefix%\info'), diff --git a/buildtools/autogen/autogen/am.py b/buildtools/autogen/autogen/am.py --- a/buildtools/autogen/autogen/am.py +++ b/buildtools/autogen/autogen/am.py @@ -853,7 +853,7 @@ def am_translate_dir(path, am): 'libdir', 'libexecdir', 'localstatedir', 'mandir', 'oldincludedir', 'pkgbindir', 'pkgdatadir', 'pkgincludedir', 'pkglibdir', 'pkglocalstatedir', 'pkgsysconfdir', 'sbindir', - 'sharedstatedir', 'srcdir', 'sysconfdir', 'top_builddir', + 'srcdir', 'sysconfdir', 'top_builddir', 'top_srcdir', 'prefix'): dir = "$("+dir+")" dir = dir + rest diff --git a/buildtools/autogen/autogen/msc.py b/buildtools/autogen/autogen/msc.py --- a/buildtools/autogen/autogen/msc.py +++ b/buildtools/autogen/autogen/msc.py @@ -147,7 +147,7 @@ def msc_translate_dir(path, msc): 'libdir', 'libexecdir', 'localstatedir', 'mandir', 'oldincludedir', 'pkgbindir', 'pkgdatadir', 'pkgincludedir', 'pkglibdir', 'pkglocalstatedir', 'pkgsysconfdir', 'sbindir', - 'sharedstatedir', 'srcdir', 'sysconfdir', 'top_builddir', + 'srcdir', 'sysconfdir', 'top_builddir', 'top_srcdir', 'prefix'): dir = "$("+dir+")" if rest: diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in --- a/testing/Mtest.py.in +++ b/testing/Mtest.py.in @@ -156,7 +156,6 @@ def _configure(str): ('${datarootdir}', '@QXdatarootdir@'), ('${datadir}', '@QXdatadir@'), ('${sysconfdir}', '@QXsysconfdir@'), -##('${sharedstatedir}', '@QXsharedstatedir@'), ('${localstatedir}', '@QXlocalstatedir@'), ('${libdir}', '@QXlibdir@'), ('${includedir}', '@QXincludedir@'), @@ -169,7 +168,6 @@ def _configure(str): ('${Qdatarootdir}', '@QXdatarootdir@'), ('${Qdatadir}', '@QXdatadir@'), ('${Qsysconfdir}', '@QXsysconfdir@'), -##('${Qsharedstatedir}', '@QXsharedstatedir@'), ('${Qlocalstatedir}', '@QXlocalstatedir@'), ('${Qlibdir}', '@QXlibdir@'), ('${Qincludedir}', '@QXincludedir@'), ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Cleanup code.
Changeset: f0394c6adf9e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f0394c6adf9e Modified Files: clients/mapiclient/mclient.c Branch: Jun2020 Log Message: Cleanup code. diffs (122 lines): diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1987,13 +1987,12 @@ doRequest(Mapi mid, const char *buf) return errseen; } -#define CHECK_RESULT(mid, hdl, break_or_continue, buf, fp) \ +#define CHECK_RESULT(mid, hdl, buf, fp)\ switch (mapi_error(mid)) { \ - case MOK: \ - /* everything A OK */ \ + case MOK: /* everything A OK */ \ break; \ - case MERROR:\ - /* some error, but try to continue */ \ + case MERROR:/* some error, but try to continue */ \ + case MTIMEOUT: /* lost contact with the server */ \ if (formatter == TABLEformatter) { \ mapi_noexplain(mid, "");\ } else {\ @@ -2006,21 +2005,8 @@ doRequest(Mapi mid, const char *buf) } else \ mapi_explain(mid, stderr); \ errseen = true; \ - break_or_continue; \ - case MTIMEOUT: \ - /* lost contact with the server */ \ - if (formatter == TABLEformatter) { \ - mapi_noexplain(mid, "");\ - } else {\ - mapi_noexplain(mid, NULL); \ - } \ - if (hdl) { \ - mapi_explain_query(hdl, stderr);\ - mapi_close_handle(hdl); \ - hdl = NULL; \ - } else \ - mapi_explain(mid, stderr); \ - errseen = true; \ + if (mapi_error(mid) == MERROR) \ + continue; /* why not in do-while */ \ timerEnd(); \ if (buf)\ free(buf); \ @@ -2072,12 +2058,12 @@ doFileBulk(Mapi mid, stream *fp) timerResume(); if (hdl == NULL) { hdl = mapi_query_prep(mid); - CHECK_RESULT(mid, hdl, continue, buf, fp); + CHECK_RESULT(mid, hdl, buf, fp); } assert(hdl != NULL); mapi_query_part(hdl, buf, (size_t) length); - CHECK_RESULT(mid, hdl, continue, buf, fp); + CHECK_RESULT(mid, hdl, buf, fp); /* if not at EOF, make sure there is a newline in the * buffer */ @@ -2096,14 +2082,14 @@ doFileBulk(Mapi mid, stream *fp) (length > 0 || mapi_query_done(hdl) == MMORE)) continue; /* get more data */ - CHECK_RESULT(mid, hdl, continue, buf, fp); + CHECK_RESULT(mid, hdl, buf, fp); rc = format_result(mid, hdl, false); if (rc == MMORE && (length > 0 || mapi_query_done(hdl) != MOK)) continue; /* get more data */ - CHECK_RESULT(mid, hdl, continue, buf, fp); + CHECK_RESULT(mid, hdl, buf, fp); mapi_close_handle(hdl); hdl = NULL; @@ -2610,7 +2596,7 @@ doFile(Mapi mid, stream *fp, bool useins hdl = mapi_query(mid, query); free(query); - CHECK_RESULT(mid, hdl, continue, buf, fp); + CHECK_RESULT(mid, hdl, buf, fp); while (fetch_row(hdl) == 3) { char *type = mapi_fetch_field(hdl, 0); char *name = mapi_fetch_field(hdl, 1); @@ -2859,7 +2845,7 @@ doFile(Mapi mid, stream *fp, bool useins if
MonetDB: Jun2020 - Cleanup of tracer: do more inside function, e...
Changeset: 913260853ccb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=913260853ccb Modified Files: clients/Tests/exports.stable.out gdk/gdk.h gdk/gdk_delta.h gdk/gdk_private.h gdk/gdk_tracer.c gdk/gdk_tracer.h monetdb5/mal/mal_function.c monetdb5/mal/mal_function.h monetdb5/mal/mal_listing.c monetdb5/mal/mal_listing.h Branch: Jun2020 Log Message: Cleanup of tracer: do more inside function, export less, use lowercase. diffs (truncated from 658 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -217,7 +217,6 @@ BUN BUNfnd(BAT *b, const void *right); gdk_return BUNinplace(BAT *b, BUN p, const void *right, bool force) __attribute__((__warn_unused_result__)); BAT *COLcopy(BAT *b, int tt, bool writable, role_t role); BAT *COLnew(oid hseq, int tltype, BUN capacity, role_t role) __attribute__((__warn_unused_result__)); -const char *COMPONENT_STR[]; size_t GDK_mem_maxsize; size_t GDK_vm_maxsize; gdk_return GDKanalytical_correlation(BAT *r, BAT *b1, BAT *b2, BAT *s, BAT *e, int tpe); @@ -304,8 +303,7 @@ str GDKstrndup(const char *s, size_t n) void GDKsyserror(_In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 1, 2))); gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level); gdk_return GDKtracer_flush_buffer(void); -char *GDKtracer_get_timestamp(const char *fmt, char *buf, size_t sz); -gdk_return GDKtracer_log(LOG_LEVEL level, const char *fmt, ...) __attribute__((__format__(__printf__, 2, 3))); +gdk_return GDKtracer_log(const char *file, const char *func, int lineno, log_level_t lvl, component_t comp, const char *format, ...) __attribute__((__format__(__printf__, 6, 7))); void GDKtracer_reinit_basic(int sig); gdk_return GDKtracer_reset_adapter(void); gdk_return GDKtracer_reset_component_level(const char *comp); @@ -335,8 +333,6 @@ size_t HEAPmemsize(Heap *h); size_t HEAPvmsize(Heap *h); void IMPSdestroy(BAT *b); lng IMPSimprintsize(BAT *b); -const char *LEVEL_STR[]; -LOG_LEVEL LVL_PER_COMPONENT[]; int MT_check_nr_cores(void); int MT_create_thread(MT_Id *t, void (*function)(void *), void *arg, enum MT_thr_detach d, const char *threadname); void MT_exiting_thread(void); @@ -521,6 +517,7 @@ gdk_return logger_restart(logger *lg); int logger_sequence(logger *lg, int seq, lng *id); gdk_return logger_upgrade_bat(logger *lg, const char *name, char tpe, oid id) __attribute__((__warn_unused_result__)); void logger_with_ids(logger *lg); +log_level_t lvl_per_component[]; void *mdlopen(const char *library, int mode); const char *mercurial_revision(void) __attribute__((__const__)); int mo_add_option(opt **Set, int setlen, opt_kind kind, const char *name, const char *value); @@ -2612,8 +2609,8 @@ str thetajoinRef; str thetaselectRef; str tidRef; str timestampRef; -void traceFunction(COMPONENT comp, MalBlkPtr mb, MalStkPtr stk, int flg); -void traceInstruction(COMPONENT comp, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int flg); +void traceFunction(component_t comp, MalBlkPtr mb, MalStkPtr stk, int flg); +void traceInstruction(component_t comp, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int flg); str transactionRef; str transaction_abortRef; str transaction_beginRef; diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1646,6 +1646,7 @@ gdk_export gdk_return BATorderidx(BAT *b gdk_export gdk_return GDKmergeidx(BAT *b, BAT**a, int n_ar); gdk_export bool BATcheckorderidx(BAT *b); +#include "gdk_tracer.h" #include "gdk_delta.h" #include "gdk_hash.h" #include "gdk_bbp.h" diff --git a/gdk/gdk_delta.h b/gdk/gdk_delta.h --- a/gdk/gdk_delta.h +++ b/gdk/gdk_delta.h @@ -9,8 +9,6 @@ #ifndef _GDK_DELTA_H_ #define _GDK_DELTA_H_ -#include "gdk_tracer.h" - /* * We make sure here that the BUNs section of a BAT at least starts 4 * bytes from the BUN start. This ensures that the first data item of diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -19,7 +19,6 @@ #define PERSISTENTIDX 1 #include "gdk_system_private.h" -#include "gdk_tracer.h" enum heaptype { offheap, diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -29,32 +29,36 @@ MT_Lock lock = MT_LOCK_INITIALIZER("GDKt static char file_name[FILENAME_MAX]; -static ATOMIC_TYPE CUR_ADAPTER = ATOMIC_VAR_INIT(DEFAULT_ADAPTER); +static ATOMIC_TYPE cur_adapter = ATOMIC_VAR_INIT(DEFAULT_ADAPTER); -static LOG_LEVEL CUR_FLUSH_LEVEL = DEFAULT_FLUSH_LEVEL; +static log_level_t cur_flush_level = DEFAULT_FLUSH_LEVEL; #define GENERATE_LOG_LEVEL(COMP) DEFAULT_LOG_LEVEL, -LOG_LEVEL LVL_PER_COMPONENT[] = { +log_level_t lvl_per_component[] = { FOREACH_COMP(GENERATE_LOG_LEVEL) }; -const char *ADAPTER_STR[] = { +static
MonetDB: Jun2020 - cleanup leak fix.
Changeset: 1f69d764822d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1f69d764822d Modified Files: sql/storage/store.c Branch: Jun2020 Log Message: cleanup leak fix. diffs (113 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -170,6 +170,31 @@ table_destroy(sql_table *t) store_funcs.destroy_del(NULL, t); } +static void +table_cleanup(sql_table *t) +{ + if (t->keys.dset) { + list_destroy(t->keys.dset); + t->keys.dset = NULL; + } + if (t->idxs.dset) { + list_destroy(t->idxs.dset); + t->idxs.dset = NULL; + } + if (t->triggers.dset) { + list_destroy(t->triggers.dset); + t->triggers.dset = NULL; + } + if (t->columns.dset) { + list_destroy(t->columns.dset); + t->columns.dset = NULL; + } + if (t->members.dset) { + list_destroy(t->members.dset); + t->members.dset = NULL; + } +} + void schema_destroy(sql_schema *s) { @@ -185,6 +210,26 @@ schema_destroy(sql_schema *s) } static void +schema_cleanup(sql_schema *s) +{ + if (s->tables.set) + for (node *n = s->tables.set->h; n; n = n->next) + table_cleanup(n->data); + if (s->tables.dset) { + list_destroy(s->tables.dset); + s->tables.dset = NULL; + } + if (s->funcs.dset) { + list_destroy(s->funcs.dset); + s->funcs.dset = NULL; + } + if (s->types.dset) { + list_destroy(s->types.dset); + s->types.dset = NULL; + } +} + +static void trans_drop_tmp(sql_trans *tr) { sql_schema *tmp; @@ -234,6 +279,17 @@ sql_trans_destroy(sql_trans *t, bool try } static void +trans_cleanup(sql_trans *t) +{ + for (node *m = t->schemas.set->h; m; m = m->next) + schema_cleanup(m->data); + if (t->schemas.dset) { + list_destroy(t->schemas.dset); + t->schemas.dset = NULL; + } +} + +static void destroy_spare_transactions(void) { int i, s = spares; @@ -2200,31 +2256,7 @@ store_apply_deltas(bool not_locked) /* make sure we reset all transactions on re-activation */ gtrans->wstime = timestamp(); /* cleanup drop tables, columns and idxs first */ - for (node *m = gtrans->schemas.set->h; m; m = m->next) { - sql_schema *s = m->data; - - if (s->tables.set) - for (node *n = s->tables.set->h; n; n = n->next) { - sql_table *t = n->data; - - if (t->columns.dset) { - list_destroy(t->columns.dset); - t->columns.dset = NULL; - } - if (t->idxs.dset) { - list_destroy(t->idxs.dset); - t->idxs.dset = NULL; - } - } - if (s->tables.dset) { - list_destroy(s->tables.dset); - s->tables.dset = NULL; - } - } - if (gtrans->schemas.dset) { - list_destroy(gtrans->schemas.dset); - gtrans->schemas.dset = NULL; - } + trans_cleanup(gtrans); if (store_funcs.gtrans_update) store_funcs.gtrans_update(gtrans); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list