Changeset: a786271f0781 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a786271f0781
Modified Files:
        sql/backends/monet5/sql.c
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 697 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -393,10 +393,10 @@ recover_dir(int farmid, bool direxists)
                /* just try; don't care about these non-vital files */
                if (GDKunlink(farmid, BATDIR, "BBP", "bak") != GDK_SUCCEED)
                        TRC_WARNING(GDK, "unlink of BBP.bak failed\n");
-               if (GDKmove(farmid, BATDIR, "BBP", "dir", BATDIR, "BBP", "bak") 
!= GDK_SUCCEED)
+               if (GDKmove(farmid, BATDIR, "BBP", "dir", BATDIR, "BBP", "bak", 
false) != GDK_SUCCEED)
                        TRC_WARNING(GDK, "rename of BBP.dir to BBP.bak 
failed\n");
        }
-       return GDKmove(farmid, BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir");
+       return GDKmove(farmid, BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir", 
true);
 }
 
 static gdk_return BBPrecover(int farmid);
@@ -1088,7 +1088,7 @@ BBPinit(void)
                                        GDKfree(backupbbpdirstr);
                                        goto bailout;
                                }
-                       } else if (GDKmove(0, BATDIR, "BBP", "bak", BATDIR, 
"BBP", "dir") == GDK_SUCCEED)
+                       } else if (GDKmove(0, BATDIR, "BBP", "bak", BATDIR, 
"BBP", "dir", true) == GDK_SUCCEED)
                                TRC_DEBUG(IO_, "reverting to dir saved in 
BBP.bak.\n");
 
                        if ((fp = GDKfilelocate(0, "BBP", "r", "dir")) == NULL) 
{
@@ -2718,7 +2718,7 @@ dirty_bat(bat *i, bool subcommit)
 static gdk_return
 file_move(int farmid, const char *srcdir, const char *dstdir, const char 
*name, const char *ext)
 {
-       if (GDKmove(farmid, srcdir, name, ext, dstdir, name, ext) == 
GDK_SUCCEED) {
+       if (GDKmove(farmid, srcdir, name, ext, dstdir, name, ext, true) == 
GDK_SUCCEED) {
                return GDK_SUCCEED;
        } else {
                char *path;
@@ -2864,7 +2864,7 @@ BBPprepare(bool subcommit)
        }
        if (ret == GDK_SUCCEED && backup_dir != set) {
                /* a valid backup dir *must* at least contain BBP.dir */
-               if ((ret = GDKmove(0, backup_dir ? BAKDIR : BATDIR, "BBP", 
"dir", subcommit ? SUBDIR : BAKDIR, "BBP", "dir")) == GDK_SUCCEED) {
+               if ((ret = GDKmove(0, backup_dir ? BAKDIR : BATDIR, "BBP", 
"dir", subcommit ? SUBDIR : BAKDIR, "BBP", "dir", true)) == GDK_SUCCEED) {
                        backup_dir = set;
                }
        }
@@ -3294,7 +3294,7 @@ force_move(int farmid, const char *srcdi
                return ret;
        }
        /* try to rename it */
-       ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL);
+       ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL, false);
 
        if (ret != GDK_SUCCEED) {
                char *srcpath;
@@ -3312,7 +3312,7 @@ force_move(int farmid, const char *srcdi
                TRC_DEBUG(IO_, "remove %s = %d\n", dstpath, (int) ret);
 
                (void) GDKcreatedir(dstdir); /* if fails, move will fail */
-               ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL);
+               ret = GDKmove(farmid, srcdir, name, NULL, dstdir, name, NULL, 
true);
                TRC_DEBUG(IO_, "link %s %s = %d\n", srcpath, dstpath, (int) 
ret);
                GDKfree(dstpath);
                GDKfree(srcpath);
@@ -3467,7 +3467,7 @@ BBPrecover_subdir(void)
        while ((dent = readdir(dirp)) != NULL) {
                if (dent->d_name[0] == '.')
                        continue;
-               ret = GDKmove(0, SUBDIR, dent->d_name, NULL, BAKDIR, 
dent->d_name, NULL);
+               ret = GDKmove(0, SUBDIR, dent->d_name, NULL, BAKDIR, 
dent->d_name, NULL, true);
                if (ret == GDK_SUCCEED && strcmp(dent->d_name, "BBP.dir") == 0)
                        backup_dir = 1;
                if (ret != GDK_SUCCEED)
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -496,7 +496,7 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
                if (exists == 0 &&
                    (old->storage != STORE_MEM ||
                     GDKmove(old->farmid, BATDIR, old->filename, NULL,
-                            BAKDIR, filename, NULL) != GDK_SUCCEED)) {
+                            BAKDIR, filename, NULL, false) != GDK_SUCCEED)) {
                        int fd;
                        ssize_t ret = 0;
                        size_t size = n << b->tshift;
@@ -531,7 +531,7 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
                        }
                        /* move tmp file to backup directory (without .tmp
                         * extension) */
-                       if (GDKmove(old->farmid, BATDIR, old->filename, "tmp", 
BAKDIR, filename, NULL) != GDK_SUCCEED) {
+                       if (GDKmove(old->farmid, BATDIR, old->filename, "tmp", 
BAKDIR, filename, NULL, true) != GDK_SUCCEED) {
                                /* backup failed */
                                GDKunlink(old->farmid, BATDIR, old->filename, 
"tmp");
                                return GDK_FAIL;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1669,7 +1669,7 @@ logger_load(int debug, const char *fn, c
                        fclose(fp);
                        fp = NULL;
                        if (GDKunlink(0, lg->dir, LOGFILE, NULL) != GDK_SUCCEED 
||
-                           GDKmove(0, lg->dir, LOGFILE, "bak", lg->dir, 
LOGFILE, NULL) != GDK_SUCCEED)
+                           GDKmove(0, lg->dir, LOGFILE, "bak", lg->dir, 
LOGFILE, NULL, true) != GDK_SUCCEED)
                                goto error;
                } else if (errno != ENOENT) {
                        GDKsyserror("open %s failed", bak);
@@ -2017,7 +2017,9 @@ logger_destroy(logger *lg)
        if (LOG_DISABLED(lg)) {
                lg->saved_id = lg->id;
                lg->saved_tid = lg->tid;
+               logger_lock(lg);
                logger_commit(lg);
+               logger_unlock(lg);
        }
        if (lg->catalog_bid) {
                logger_lock(lg);
@@ -2120,9 +2122,10 @@ logger_flush(logger *lg, ulng ts)
                lg->saved_tid = lg->tid;
                if (lid)
                        logger_cleanup_range(lg);
-               if (logger_commit(lg) != GDK_SUCCEED) {
+               logger_lock(lg);
+               if (logger_commit(lg) != GDK_SUCCEED)
                        TRC_ERROR(GDK, "failed to commit");
-               }
+               logger_unlock(lg);
                return GDK_SUCCEED;
        }
        if (lg->saved_id >= lid)
@@ -2547,7 +2550,10 @@ log_tend(logger *lg, ulng commit_ts)
        l.id = lg->tid;
        if (lg->flushnow) {
                lg->flushnow = 0;
-               return logger_commit(lg);
+               logger_lock(lg);
+               gdk_return res = logger_commit(lg);
+               logger_unlock(lg);
+               return res;
        }
 
        if (lg->current) {
diff --git a/gdk/gdk_logger_old.c b/gdk/gdk_logger_old.c
--- a/gdk/gdk_logger_old.c
+++ b/gdk/gdk_logger_old.c
@@ -1750,7 +1750,7 @@ old_logger_destroy(old_logger *lg)
            BBPrename(lg->lg->dcatalog->batCacheid, bak) < 0) {
                return GDK_FAIL;
        }
-       if (GDKmove(0, lg->lg->dir, LOGFILE, NULL, lg->lg->dir, LOGFILE, "bak") 
!= GDK_SUCCEED) {
+       if (GDKmove(0, lg->lg->dir, LOGFILE, NULL, lg->lg->dir, LOGFILE, "bak", 
true) != GDK_SUCCEED) {
                TRC_CRITICAL(GDK, "logger_destroy failed\n");
                return GDK_FAIL;
        }
@@ -1765,7 +1765,7 @@ old_logger_destroy(old_logger *lg)
                return GDK_FAIL;
        }
        snprintf(bak, sizeof(bak), "bak-" LLFMT, lg->id);
-       if (GDKmove(0, lg->lg->dir, LOGFILE, "bak", lg->lg->dir, LOGFILE, bak) 
!= GDK_SUCCEED) {
+       if (GDKmove(0, lg->lg->dir, LOGFILE, "bak", lg->lg->dir, LOGFILE, bak, 
true) != GDK_SUCCEED) {
                TRC_CRITICAL(GDK, "logger_destroy failed\n");
                return GDK_FAIL;
        }
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -145,7 +145,7 @@ char *GDKload(int farmid, const char *nm
 void GDKlog(_In_z_ _Printf_format_string_ FILE * fl, const char *format, ...)
        __attribute__((__format__(__printf__, 2, 3)))
        __attribute__((__visibility__("hidden")));
-gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, const char 
*ext1, const char *dir2, const char *nme2, const char *ext2)
+gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, const char 
*ext1, const char *dir2, const char *nme2, const char *ext2, bool report)
        __attribute__((__warn_unused_result__))
        __attribute__((__visibility__("hidden")));
 void *GDKmremap(const char *path, int mode, void *old_address, size_t 
old_size, size_t *new_size)
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -315,7 +315,7 @@ GDKunlink(int farmid, const char *dir, c
  * A move routine is overloaded to deal with extensions.
  */
 gdk_return
-GDKmove(int farmid, const char *dir1, const char *nme1, const char *ext1, 
const char *dir2, const char *nme2, const char *ext2)
+GDKmove(int farmid, const char *dir1, const char *nme1, const char *ext1, 
const char *dir2, const char *nme2, const char *ext2, bool report)
 {
        char *path1;
        char *path2;
@@ -329,7 +329,7 @@ GDKmove(int farmid, const char *dir1, co
        path2 = GDKfilepath(farmid, dir2, nme2, ext2);
        if (path1 && path2) {
                ret = MT_rename(path1, path2);
-               if (ret < 0)
+               if (ret < 0 && report)
                        GDKsyserror("cannot rename %s to %s\n", path1, path2);
 
                TRC_DEBUG(IO_, "Move %s %s = %d (%dms)\n", path1, path2, ret, 
GDKms() - t0);
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
@@ -1277,7 +1277,7 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
        sql_table *t = mvc_bind_table(m, s, tname);
        sql_column *c = mvc_bind_column(m, t, cname);
        b = mvc_bind(m, sname, tname, cname, access);
-       if (b && b->ttype != coltype) {
+       if (b && b->ttype && b->ttype != coltype) {
                BBPunfix(b->batCacheid);
                throw(SQL,"sql.bind",SQLSTATE(42000) "Column type mismatch");
        }
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
@@ -32,7 +32,7 @@ static int tc_gc_col( sql_store Store, s
 static int tc_gc_idx( sql_store Store, sql_change *c, ulng oldest);
 static int tc_gc_del( sql_store Store, sql_change *c, ulng oldest);
 
-static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
+static int merge_delta( sql_delta *obat);
 
 /* valid
  * !deleted && VALID_4_READ(TS, tr)                            existing or 
newly created segment
@@ -1798,7 +1798,7 @@ static int
 commit_create_col_( sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       (void)oldest;
+       (void)tr; (void)oldest;
 
        if(!isTempTable(c->t)) {
                sql_delta *delta = ATOMIC_PTR_GET(&c->data);
@@ -1807,7 +1807,7 @@ commit_create_col_( sql_trans *tr, sql_c
 
                assert(delta->next == NULL);
                if (!delta->cs.alter)
-                       ok = tr_merge_delta(tr, delta);
+                       ok = merge_delta(delta);
                delta->cs.alter = 0;
                c->base.flags = 0;
        }
@@ -1898,7 +1898,7 @@ static int
 commit_create_idx_( sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
 {
        int ok = LOG_OK;
-       (void)oldest;
+       (void)tr; (void)oldest;
 
        if(!isTempTable(i->t)) {
                sql_delta *delta = ATOMIC_PTR_GET(&i->data);
@@ -1906,7 +1906,7 @@ commit_create_idx_( sql_trans *tr, sql_i
                delta->cs.ts = commit_ts;
 
                assert(delta->next == NULL);
-               ok = tr_merge_delta(tr, delta);
+               ok = merge_delta(delta);
                i->base.flags = 0;
        }
        return ok;
@@ -2297,13 +2297,13 @@ drop_idx(sql_trans *tr, sql_idx *i)
 
 
 static BUN
-clear_cs(sql_trans *tr, column_storage *cs)
+clear_cs(sql_trans *tr, column_storage *cs, bool renew)
 {
        BAT *b;
        BUN sz = 0;
 
        (void)tr;
-       if (cs->bid) {
+       if (cs->bid && renew) {
                b = temp_descriptor(cs->bid);
                if (b) {
                        sz += BATcount(b);
@@ -2335,34 +2335,34 @@ clear_cs(sql_trans *tr, column_storage *
 }
 
 static BUN
-clear_col(sql_trans *tr, sql_column *c)
+clear_col(sql_trans *tr, sql_column *c, bool renew)
 {
        bool update_conflict = false;
        sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
 
-       if ((delta = bind_col_data(tr, c, &update_conflict)) == NULL)
+       if ((delta = bind_col_data(tr, c, renew?&update_conflict:NULL)) == NULL)
                return update_conflict ? LOG_CONFLICT : LOG_ERR;
        if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t)) 
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
                trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col, 
isLocalTemp(c->t)?NULL:&log_update_col);
        if (delta)
-               return clear_cs(tr, &delta->cs);
+               return clear_cs(tr, &delta->cs, renew);
        return 0;
 }
 
 static BUN
-clear_idx(sql_trans *tr, sql_idx *i)
+clear_idx(sql_trans *tr, sql_idx *i, bool renew)
 {
        bool update_conflict = false;
        sql_delta *delta, *odelta = ATOMIC_PTR_GET(&i->data);
 
        if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns) 
<= 1) || !idx_has_column(i->type))
                return 0;
-       if ((delta = bind_idx_data(tr, i, &update_conflict)) == NULL)
+       if ((delta = bind_idx_data(tr, i, renew?&update_conflict:NULL)) == NULL)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to