Changeset: 8481cbadd976 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8481cbadd976 Modified Files: MonetDB.spec gdk/gdk_logger.c gdk/gdk_utils.c sql/test/BugTracker-2020/Tests/All Branch: oscar Log Message:
Merge with Jun2020 branch. diffs (239 lines): diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -753,7 +753,7 @@ fi %files selinux %defattr(-,root,root,0755) -%doc buildtools/selinux/* +%doc buildtools/selinux/monetdb.* %{_datadir}/selinux/*/monetdb.pp %endif diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -97,7 +97,7 @@ #define NAME(name,tpe,id) (name?name:"tpe id") -#define LOG_DISABLED(lg) ((lg)->debug&128) +#define LOG_DISABLED(lg) ((lg)->debug&128 || (lg)->inmemory) static const char *log_commands[] = { NULL, @@ -1069,9 +1069,9 @@ logger_open(logger *lg) char id[BUFSIZ]; char *filename; - if (lg->inmemory || LOG_DISABLED(lg)) { + if (LOG_DISABLED(lg)) { lg->end = 0; - if (lg->id) /* go back too last used id */ + if (lg->id) /* go back to last used id */ lg->id--; return GDK_SUCCEED; } @@ -1104,7 +1104,7 @@ logger_open(logger *lg) static inline void logger_close(logger *lg) { - if (!lg->inmemory) + if (!LOG_DISABLED(lg)) close_stream(lg->log); lg->log = NULL; } @@ -1691,7 +1691,7 @@ logger_load(int debug, const char *fn, c bool needcommit = false; int dbg = GDKdebug; - if (!lg->inmemory && !LOG_DISABLED(lg)) { + if (!LOG_DISABLED(lg)) { if ((filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL)) == NULL) goto error; len = snprintf(filename, FILENAME_MAX, "%s", filenamestr); @@ -1721,7 +1721,7 @@ logger_load(int debug, const char *fn, c lg->seqs_val = NULL; lg->dseqs = NULL; - if (!lg->inmemory && !LOG_DISABLED(lg)) { + if (!LOG_DISABLED(lg)) { /* try to open logfile backup, or failing that, the file * itself. we need to know whether this file exists when * checking the database consistency later on */ @@ -1808,7 +1808,7 @@ logger_load(int debug, const char *fn, c goto error; } - if (!lg->inmemory && !LOG_DISABLED(lg)) { + if (!LOG_DISABLED(lg)) { if (GDKcreatedir(filename) != GDK_SUCCEED) { GDKerror("cannot create directory for log file %s\n", filename); @@ -2466,8 +2466,12 @@ logger_exit(logger *lg) char filename[FILENAME_MAX]; int len, farmid; - if (lg->inmemory || LOG_DISABLED(lg)) { + if (LOG_DISABLED(lg)) { logger_close(lg); + if (logger_commit(lg) != GDK_SUCCEED) { + TRC_CRITICAL(GDK, "logger_commit failed\n"); + return GDK_FAIL; + } lg->changes = 0; return GDK_SUCCEED; } @@ -2567,7 +2571,7 @@ logger_cleanup(logger *lg) char buf[BUFSIZ]; FILE *fp = NULL; - if (lg->inmemory || LOG_DISABLED(lg)) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; farmid = BBPselectfarm(PERSISTENT, 0, offheap); @@ -2682,7 +2686,7 @@ log_bat_persists(logger *lg, BAT *b, con l.flag = (l.flag == LOG_USE)?LOG_USE_ID:LOG_CREATE_ID; l.tid = lg->tid; lg->changes++; - if (!lg->inmemory && !LOG_DISABLED(lg)) { + if (!LOG_DISABLED(lg)) { if (log_write_format(lg, &l) != GDK_SUCCEED || log_write_string(lg, name) != GDK_SUCCEED || (tpe && log_write_id(lg, tpe, id) != GDK_SUCCEED)) @@ -2715,7 +2719,7 @@ log_bat_persists(logger *lg, BAT *b, con } return GDK_SUCCEED; } - if (lg->inmemory || LOG_DISABLED(lg)) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; ha = "vid"; @@ -2774,7 +2778,7 @@ log_bat_transient(logger *lg, const char // assert(lg->tid == tid); } - if (lg->inmemory || LOG_DISABLED(lg)) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; if (log_write_format(lg, &l) != GDK_SUCCEED || @@ -2801,7 +2805,7 @@ log_delta(logger *lg, BAT *uid, BAT *uva l.nr = (BUNlast(uval)); lg->changes += l.nr; - if (LOG_DISABLED(lg) || lg->inmemory) { + if (LOG_DISABLED(lg)) { /* logging is switched off */ return GDK_SUCCEED; } @@ -2870,7 +2874,7 @@ log_bat(logger *lg, BAT *b, const char * l.nr = (BUNlast(b) - b->batInserted); lg->changes += (b->batInserted)?l.nr:1; /* initial large inserts is counted as 1 change */ - if (LOG_DISABLED(lg) || lg->inmemory) { + if (LOG_DISABLED(lg)) { /* logging is switched off */ return GDK_SUCCEED; } @@ -2916,7 +2920,7 @@ log_bat_clear(logger *lg, const char *na l.tid = lg->tid; lg->changes += l.nr; - if (LOG_DISABLED(lg) || lg->inmemory) { + if (LOG_DISABLED(lg)) { /* logging is switched off */ return GDK_SUCCEED; } @@ -2937,7 +2941,7 @@ log_tstart(logger *lg) { logformat l; - if (LOG_DISABLED(lg) || lg->inmemory) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; l.flag = LOG_START; @@ -2959,7 +2963,7 @@ static gdk_return pre_allocate(logger *lg) { // FIXME: this causes serious issues on Windows at least with MinGW - assert(!lg->inmemory && !LOG_DISABLED(lg)); + assert(!LOG_DISABLED(lg)); #ifndef WIN32 lng p; p = (lng) getfilepos(getFile(lg->log)); @@ -3018,7 +3022,7 @@ log_tend(logger *lg) lg->snapshots_tid, NULL, NULL, lg->dsnapshots, NULL, lg->debug); BBPunfix(bids->batCacheid); } - if (LOG_DISABLED(lg) || lg->inmemory) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; l.flag = LOG_END; l.tid = lg->tid; @@ -3040,7 +3044,7 @@ log_abort(logger *lg) { logformat l; - if (LOG_DISABLED(lg) || lg->inmemory) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; if (lg->debug & 1) fprintf(stderr, "#log_abort %d\n", lg->tid); @@ -3060,7 +3064,7 @@ log_sequence_(logger *lg, int seq, lng v { logformat l; - if (LOG_DISABLED(lg) || lg->inmemory) + if (LOG_DISABLED(lg)) return GDK_SUCCEED; l.flag = LOG_SEQ; l.tid = lg->tid; diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1360,10 +1360,7 @@ GDKusec(void) return (lng) (f.QuadPart / 10); #elif defined(HAVE_CLOCK_GETTIME) struct timespec ts; -#ifdef CLOCK_REALTIME_COARSE - if (clock_gettime(CLOCK_REALTIME_COARSE, &ts) < 0) -#endif - (void) clock_gettime(CLOCK_REALTIME, &ts); + clock_gettime(CLOCK_REALTIME, &ts); return (lng) (ts.tv_sec * LL_CONSTANT(1000000) + ts.tv_nsec / 1000); #elif defined(HAVE_GETTIMEOFDAY) struct timeval tv; diff --git a/sql/test/BugTracker-2020/Tests/All b/sql/test/BugTracker-2020/Tests/All --- a/sql/test/BugTracker-2020/Tests/All +++ b/sql/test/BugTracker-2020/Tests/All @@ -16,3 +16,4 @@ copy-decimal-with-space.Bug-6917 isauuid.Bug-6934 tpch-cube.Bug-6938 HAVE_PYMONETDB?remote-table-like.Bug-6841 +KNOWNFAIL?copy-empty-blob.Bug-6948 diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql @@ -0,0 +1,13 @@ +start transaction; +create table blobtbl (i int, b blob); + +-- the following COPY INTO should succeed +copy into blobtbl from stdin delimiters ',','\n','"'; +0,NULL +1,12ff +2,"" +3, + +-- This should return 4 rows +select * form blobtbl; +rollback; diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err new file mode 100644 diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out new file mode 100644 _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list