Changeset: f8174cbbe776 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f8174cbbe776 Added Files: sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.sql sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.stable.err sql/test/BugTracker-2018/Tests/in-subquery-having-Bug-6651.stable.out sql/test/BugTracker-2018/Tests/prepared-statement-with-udf.Bug-6650.sql Modified Files: MonetDB.spec gdk/gdk_logger.c gdk/gdk_logger.h gdk/gdk_qsort.c gdk/gdk_qsort_impl.h sql/server/sql_parser.y sql/test/BugTracker-2018/Tests/All testing/Mtest.py.in testing/listexports.py.in tools/mserver/monet_version.c.in Branch: analytics Log Message:
Merge with default diffs (truncated from 835 to 300 lines): diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -878,10 +878,10 @@ Group: Applications/Databases %if "%{?_selinux_policy_version}" != "" Requires: selinux-policy >= %{?_selinux_policy_version} %endif -Requires(post): MonetDB5-server = %{version}-%{release} -Requires(postun): MonetDB5-server -Requires(post): %{name}-SQL-server5 = %{version}-%{release} -Requires(postun): %{name}-SQL-server5 +Requires(post): MonetDB5-server%{?_isa} = %{version}-%{release} +Requires(postun): MonetDB5-server%{?_isa} = %{version}-%{release} +Requires(post): %{name}-SQL-server5%{?_isa} = %{version}-%{release} +Requires(postun): %{name}-SQL-server5%{?_isa} = %{version}-%{release} Requires(post): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles Requires(postun): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles BuildArch: noarch diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -936,8 +936,6 @@ tr_commit(logger *lg, trans *tr) return tr_destroy(tr); } -static gdk_return log_sequence_nrs(logger *lg); - #ifdef _MSC_VER #define access(file, mode) _access(file, mode) #endif @@ -991,7 +989,6 @@ logger_open(logger *lg) { char id[BUFSIZ]; char *filename; - bat bid; snprintf(id, sizeof(id), LLFMT, lg->id); filename = GDKfilepath(BBPselectfarm(lg->dbfarm_role, 0, offheap), lg->dir, LOGFILE, id); @@ -1003,36 +1000,12 @@ logger_open(logger *lg) } lg->end = 0; - if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) != GDK_SUCCEED) { + if (lg->log == NULL || mnstr_errnr(lg->log)) { fprintf(stderr, "!ERROR: logger_open: creating %s failed\n", filename); GDKfree(filename); return GDK_FAIL; } GDKfree(filename); - if ((bid = logger_find_bat(lg, "seqs_id", 0, 0)) != 0) { - int dbg = GDKdebug; - BAT *b; - GDKdebug &= ~CHECKMASK; - if ((b = BATdescriptor(bid)) == NULL || - BATmode(b, TRANSIENT) != GDK_SUCCEED || - logger_del_bat(lg, bid) != GDK_SUCCEED) { - logbat_destroy(b); - return GDK_FAIL; - } - logbat_destroy(b); - b = NULL; - if ((bid = logger_find_bat(lg, "seqs_val", 0, 0)) == 0 || - (b = BATdescriptor(bid)) == NULL || - BATmode(b, TRANSIENT) != GDK_SUCCEED || - logger_del_bat(lg, bid) != GDK_SUCCEED) { - logbat_destroy(b); - return GDK_FAIL; - } - logbat_destroy(b); - GDKdebug = dbg; - if (bm_commit(lg) != GDK_SUCCEED) - return GDK_FAIL; - } return GDK_SUCCEED; } @@ -1044,7 +1017,7 @@ logger_close(logger *lg) } static gdk_return -logger_readlog(logger *lg, char *filename) +logger_readlog(logger *lg, char *filename, bool *filemissing) { trans *tr = NULL; logformat l; @@ -1067,6 +1040,7 @@ logger_readlog(logger *lg, char *filenam close_stream(lg->log); lg->log = NULL; GDKdebug = dbg; + *filemissing = true; return GDK_SUCCEED; } short byteorder; @@ -1276,7 +1250,7 @@ logger_readlogs(logger *lg, FILE *fp, ch fprintf(stderr, "#logger_readlogs logger id is " LLFMT "\n", lg->id); } - while (fgets(id, sizeof(id), fp) != NULL) { + if (fgets(id, sizeof(id), fp) != NULL) { char log_filename[FILENAME_MAX]; lng lid = strtoll(id, NULL, 10); @@ -1285,13 +1259,20 @@ logger_readlogs(logger *lg, FILE *fp, ch } if (!lg->shared && lid >= lg->id) { + bool filemissing = false; + lg->id = lid; - snprintf(log_filename, sizeof(log_filename), "%s." LLFMT, filename, lg->id); - res = logger_readlog(lg, log_filename); + while (res == GDK_SUCCEED && !filemissing) { + snprintf(log_filename, sizeof(log_filename), "%s." LLFMT, filename, lg->id); + res = logger_readlog(lg, log_filename, &filemissing); + if (!filemissing) + lg->id++; + } } else { + bool filemissing = false; while (lid >= lg->id && res == GDK_SUCCEED) { snprintf(log_filename, sizeof(log_filename), "%s." LLFMT, filename, lg->id); - if ((res = logger_readlog(lg, log_filename)) != GDK_SUCCEED && lg->shared && lg->id > 1) { + if ((res = logger_readlog(lg, log_filename, &filemissing)) != GDK_SUCCEED && lg->shared && lg->id > 1) { /* The only special case is if * the file is missing * altogether and the logger @@ -1327,24 +1308,9 @@ logger_readlogs(logger *lg, FILE *fp, ch static gdk_return logger_commit(logger *lg) { - int id = LOG_SID; - BUN p; - if (lg->debug & 1) fprintf(stderr, "#logger_commit\n"); - p = log_find(lg->seqs_id, lg->dseqs, id); - if (p >= lg->seqs_val->batInserted) { - if (BUNinplace(lg->seqs_val, p, &lg->id, false) != GDK_SUCCEED) - return GDK_FAIL; - } else { - oid pos = p; - if (BUNappend(lg->dseqs, &pos, false) != GDK_SUCCEED || - BUNappend(lg->seqs_id, &id, false) != GDK_SUCCEED || - BUNappend(lg->seqs_val, &lg->id, false) != GDK_SUCCEED) - return GDK_FAIL; - } - /* cleanup old snapshots */ if (BATcount(lg->snapshots_bid)) { if (BATclear(lg->snapshots_bid, true) != GDK_SUCCEED || @@ -1431,7 +1397,7 @@ static gdk_return bm_subcommit(logger *lg, BAT *list_bid, BAT *list_nme, BAT *catalog_bid, BAT *catalog_nme, BAT *catalog_tpe, BAT *catalog_oid, BAT *dcatalog, BAT *extra, int debug) { BUN p, q; - BUN nn = 10 + BATcount(list_bid) + (extra ? BATcount(extra) : 0); + BUN nn = 13 + BATcount(list_bid) + (extra ? BATcount(extra) : 0); bat *n = GDKmalloc(sizeof(bat) * nn); int i = 0; BATiter iter = (list_nme)?bat_iterator(list_nme):bat_iterator(list_bid); @@ -1475,6 +1441,7 @@ bm_subcommit(logger *lg, BAT *list_bid, n[i++] = catalog_oid->batCacheid; } n[i++] = dcatalog->batCacheid; + if (BATcount(dcatalog) > (BATcount(catalog_nme)/2) && catalog_bid == list_bid && catalog_nme == list_nme && @@ -1540,6 +1507,59 @@ bm_subcommit(logger *lg, BAT *list_bid, lg->catalog_tpe = catalog_tpe = tpes; lg->catalog_oid = catalog_oid = oids; } + if (lg->seqs_id && list_nme) { + n[i++] = lg->seqs_id->batCacheid; + n[i++] = lg->seqs_val->batCacheid; + n[i++] = lg->dseqs->batCacheid; + } + if (list_nme && lg->seqs_id && BATcount(lg->dseqs) > (BATcount(lg->seqs_id)/2)) { + BAT *tids, *ids, *vals; + + tids = bm_tids(lg->seqs_id, lg->dseqs); + if (tids == NULL) { + GDKfree(n); + return GDK_FAIL; + } + ids = logbat_new(TYPE_int, BATcount(tids), PERSISTENT); + vals = logbat_new(TYPE_lng, BATcount(tids), PERSISTENT); + + if (ids == NULL || vals == NULL) { + logbat_destroy(tids); + logbat_destroy(ids); + logbat_destroy(vals); + GDKfree(n); + return GDK_FAIL; + } + + if (BATappend(ids, lg->seqs_id, tids, true) != GDK_SUCCEED || + BATappend(vals, lg->seqs_val, tids, true) != GDK_SUCCEED) { + logbat_destroy(tids); + logbat_destroy(ids); + logbat_destroy(vals); + GDKfree(n); + return GDK_FAIL; + } + logbat_destroy(tids); + BATclear(lg->dseqs, true); + + if (logger_switch_bat(lg->seqs_id, ids, lg->fn, "seqs_id") != GDK_SUCCEED || + logger_switch_bat(lg->seqs_val, vals, lg->fn, "seqs_val") != GDK_SUCCEED) { + logbat_destroy(ids); + logbat_destroy(vals); + GDKfree(n); + return GDK_FAIL; + } + n[i++] = ids->batCacheid; + n[i++] = vals->batCacheid; + n[i++] = lg->dseqs->batCacheid; + + logbat_destroy(lg->seqs_id); + logbat_destroy(lg->seqs_val); + + lg->seqs_id = ids; + lg->seqs_val = vals; + } + assert((BUN) i <= nn); BATcommit(catalog_bid); BATcommit(catalog_nme); @@ -1606,13 +1626,14 @@ logger_set_logdir_path(char *filename, c static gdk_return logger_load(int debug, const char *fn, char filename[FILENAME_MAX], logger *lg) { - int id = LOG_SID; FILE *fp = NULL; char bak[FILENAME_MAX]; str filenamestr = NULL; log_bid snapshots_bid = 0; bat catalog_bid, catalog_nme, catalog_tpe, catalog_oid, dcatalog, bid; int farmid = BBPselectfarm(lg->dbfarm_role, 0, offheap); + bool needcommit = false; + int dbg = GDKdebug; if(!(filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL))) goto error; @@ -1904,24 +1925,6 @@ logger_load(int debug, const char *fn, c } snapshots_bid = logger_find_bat(lg, "snapshots_bid", 0, 0); if (snapshots_bid == 0) { - lg->seqs_id = logbat_new(TYPE_int, 1, TRANSIENT); - lg->seqs_val = logbat_new(TYPE_lng, 1, TRANSIENT); - lg->dseqs = logbat_new(TYPE_oid, 1, TRANSIENT); - if (lg->seqs_id == NULL || - lg->seqs_val == NULL || - lg->dseqs == NULL) { - GDKerror("Logger_new: cannot create seqs bats"); - goto error; - } - - /* create LOG_SID sequence number */ - if (BUNappend(lg->seqs_id, &id, false) != GDK_SUCCEED || - BUNappend(lg->seqs_val, &lg->id, false) != GDK_SUCCEED) { - GDKerror("logger_load: failed to append value to " - "sequences bat"); - goto error; - } - lg->snapshots_bid = logbat_new(TYPE_int, 1, PERSISTENT); lg->snapshots_tid = logbat_new(TYPE_int, 1, PERSISTENT); lg->dsnapshots = logbat_new(TYPE_oid, 1, PERSISTENT); @@ -1968,47 +1971,8 @@ logger_load(int debug, const char *fn, c goto error; } } else { - bat seqs_id = logger_find_bat(lg, "seqs_id", 0, 0); - bat seqs_val = logger_find_bat(lg, "seqs_val", 0, 0); bat snapshots_tid = logger_find_bat(lg, "snapshots_tid", 0, 0); bat dsnapshots = logger_find_bat(lg, "dsnapshots", 0, 0); - bool needcommit = false; - int dbg = GDKdebug; - - if (seqs_id) { - BAT *o_id; - BAT *o_val; - - /* don't check these bats since they will be fixed */ - GDKdebug &= ~CHECKMASK; - o_id = BATdescriptor(seqs_id); - o_val = BATdescriptor(seqs_val); - GDKdebug = dbg; - - if (o_id == NULL || o_val == NULL) { - GDKerror("Logger_new: inconsistent database: cannot find seqs bats"); - logbat_destroy(o_id); - logbat_destroy(o_val); - goto error; - } - - lg->seqs_id = COLcopy(o_id, TYPE_int, true, TRANSIENT); - lg->seqs_val = COLcopy(o_val, TYPE_lng, true, TRANSIENT); - BBPunfix(o_id->batCacheid); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list