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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list