Changeset: 411c2c2b849a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/411c2c2b849a
Modified Files:
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: iso
Log Message:
merged with jul2021
diffs (truncated from 719 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
@@ -2358,7 +2358,7 @@ decref(bat i, bool logical, bool release
}
}
}
- if (b && b->batCount > b->batInserted) {
+ if (b && b->batCount > b->batInserted && !isVIEW(b)) {
/* if batCount is larger than batInserted and the dirty
* bits are off, it may be that a (sub)commit happened
* in parallel to an update; we must undo the turning
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -1069,7 +1069,7 @@ HASHprobe(const Hash *h, const void *v)
}
}
-inline void
+void
HASHappend_locked(BAT *b, BUN i, const void *v)
{
Hash *h = b->thash;
@@ -1140,7 +1140,7 @@ HASHappend(BAT *b, BUN i, const void *v)
}
/* insert value v at position p into the hash table of b */
-inline void
+void
HASHinsert_locked(BAT *b, BUN p, const void *v)
{
Hash *h = b->thash;
@@ -1223,7 +1223,7 @@ HASHinsert(BAT *b, BUN p, const void *v)
}
/* delete value v at position p from the hash table of b */
-inline void
+void
HASHdelete_locked(BAT *b, BUN p, const void *v)
{
Hash *h = b->thash;
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -168,9 +168,6 @@ gdk_return GDKunlink(int farmid, const c
__attribute__((__visibility__("hidden")));
void HASHappend(BAT *b, BUN i, const void *v)
__attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
void HASHappend_locked(BAT *b, BUN i, const void *v)
__attribute__((__visibility__("hidden")));
void HASHfree(BAT *b)
@@ -179,16 +176,10 @@ bool HASHgonebad(BAT *b, const void *v)
__attribute__((__visibility__("hidden")));
void HASHdelete(BAT *b, BUN p, const void *v)
__attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
void HASHdelete_locked(BAT *b, BUN p, const void *v)
__attribute__((__visibility__("hidden")));
void HASHinsert(BAT *b, BUN p, const void *v)
__attribute__((__visibility__("hidden")));
-#ifdef _MSC_VER
-inline
-#endif
void HASHinsert_locked(BAT *b, BUN p, const void *v)
__attribute__((__visibility__("hidden")));
BUN HASHmask(BUN cnt)
diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c
--- a/sql/common/sql_changeset.c
+++ b/sql/common/sql_changeset.c
@@ -32,21 +32,21 @@ cs_destroy(changeset * cs, void *data)
}
void
-cs_add(changeset * cs, void *elm, int flags)
+cs_add(changeset * cs, void *elm, bool isnew)
{
if (!cs->set)
cs->set = list_new(cs->sa, cs->destroy);
list_append(cs->set, elm);
- if (newFlagSet(flags) && !cs->nelm)
+ if (isnew && !cs->nelm)
cs->nelm = cs->set->t;
}
void
-cs_del(changeset * cs, void *gdata, node *elm, int flags)
+cs_del(changeset * cs, void *gdata, node *elm, bool isnew)
{
if (cs->nelm == elm)
cs->nelm = elm->next;
- if (newFlagSet(flags)) { /* remove just added */
+ if (isnew) { /* remove just added */
list_remove_node(cs->set, gdata, elm);
} else {
if (!cs->dset)
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -156,11 +156,11 @@ bool is_commutative(const char *fnm)
}
void
-base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags, const char
*name)
+base_init(sql_allocator *sa, sql_base * b, sqlid id, bool isnew, const char
*name)
{
*b = (sql_base) {
.id = id,
- .flags = flags,
+ .new = isnew,
.refcnt = 1,
.name = (name) ? SA_STRDUP(sa, name) : NULL,
};
@@ -603,7 +603,7 @@ sql_create_type(sql_allocator *sa, const
{
sql_type *t = SA_ZNEW(sa, sql_type);
- base_init(sa, &t->base, local_id++, 0, sqlname);
+ base_init(sa, &t->base, local_id++, false, sqlname);
t->impl = sa_strdup(sa, impl);
t->digits = digits;
t->scale = scale;
@@ -653,7 +653,7 @@ sql_create_func_(sql_allocator *sa, cons
}
if (res)
fres = create_arg(sa, NULL, sql_create_subtype(sa, res, 0, 0),
ARG_OUT);
- base_init(sa, &t->base, local_id++, 0, name);
+ base_init(sa, &t->base, local_id++, false, name);
t->imp = sa_strdup(sa, imp);
t->mod = sa_strdup(sa, mod);
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
@@ -87,9 +87,6 @@ typedef enum sql_dependency {
#define INOUT 6 /* output type equals input type */
#define SCALE_EQ 7 /* user defined functions need equal scales */
-/* Warning TR flags is a bitmask */
-#define TR_NEW 1
-
#define RDONLY 0
#define RD_INS 1
#define RD_UPD_ID 2
@@ -196,20 +193,17 @@ typedef int sqlid;
typedef void *sql_store;
typedef struct sql_base {
- int flags; /* todo change into bool new */
- unsigned char
+ unsigned int
new:1,
- deleted:1;
- int refcnt;
+ deleted:1,
+ refcnt:30;
sqlid id;
char *name;
} sql_base;
-#define newFlagSet(x) (((x) & TR_NEW) == TR_NEW)
-#define removeNewFlag(x) ((x)->base.flags &= ~TR_NEW)
-#define isNew(x) (newFlagSet((x)->base.flags))
+#define isNew(x) ((x)->base.new)
-extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags,
const char *name);
+extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, bool isnew,
const char *name);
typedef struct changeset {
sql_allocator *sa;
@@ -275,8 +269,8 @@ extern node *ol_rehash(objlist *ol, cons
extern void cs_new(changeset * cs, sql_allocator *sa, fdestroy destroy);
extern void cs_destroy(changeset * cs, void *data);
-extern void cs_add(changeset * cs, void *elm, int flag);
-extern void cs_del(changeset * cs, void *gdata, node *elm, int flag);
+extern void cs_add(changeset * cs, void *elm, bool isnew);
+extern void cs_del(changeset * cs, void *gdata, node *elm, bool isnew);
extern int cs_size(changeset * cs);
extern node *cs_find_id(changeset * cs, sqlid id);
diff --git a/sql/server/sql_qc.c b/sql/server/sql_qc.c
--- a/sql/server/sql_qc.c
+++ b/sql/server/sql_qc.c
@@ -158,7 +158,7 @@ qc_insert(qc *cache, sql_allocator *sa,
.ops = params,
.res = res,
};
- base_init(sa, &f->base, 0, TR_NEW, NULL);
+ base_init(sa, &f->base, 0, true, NULL);
f->base.new = 1;
f->base.id = n->id;
f->base.name = f->imp = name;
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
@@ -969,6 +969,16 @@ cs_update_bat( sql_trans *tr, column_sto
if (!otids)
return LOG_ERR;
}
+ if (updates && (updates->ttype == TYPE_msk || mask_cand(updates))) {
+ oupdates = BATunmask(updates);
+ if (!oupdates)
+ return LOG_ERR;
+ }
+ if (updates && updates->ttype == TYPE_void) { /* dense later use
optimized log structure */
+ oupdates = COLcopy(updates, TYPE_oid, true /* make sure we get
a oid col */, TRANSIENT);
+ if (!oupdates)
+ return LOG_ERR;
+ }
/* When we go to smaller grained update structures we should check for
concurrent updates on this column ! */
/* currently only one update delta is possible */
lock_table(tr->store, t->base.id);
@@ -985,8 +995,11 @@ cs_update_bat( sql_trans *tr, column_sto
if (otids != tids)
bat_destroy(otids);
otids = sorted;
- oupdates = BATproject(order, oupdates);
+ BAT *noupdates = BATproject(order, oupdates);
bat_destroy(order);
+ if (oupdates != updates)
+ bat_destroy(oupdates);
+ oupdates = noupdates;
if (!oupdates) {
bat_destroy(otids);
unlock_table(tr->store, t->base.id);
@@ -1255,6 +1268,7 @@ cs_update_val( sql_trans *tr, column_sto
if (cs_real_update_bats(cs, &ui, &uv) != LOG_OK)
return LOG_ERR;
+ assert(uv->ttype);
assert(BATcount(ui) == BATcount(uv));
if (BUNappend(ui, (ptr) &rid, true) != GDK_SUCCEED ||
BUNappend(uv, (ptr) upd, true) != GDK_SUCCEED) {
@@ -2187,7 +2201,7 @@ static int
commit_create_col_( sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
{
int ok = LOG_OK;
- (void)tr; (void)oldest;
+ (void)oldest;
if(!isTempTable(c->t)) {
sql_delta *delta = ATOMIC_PTR_GET(&c->data);
@@ -2198,7 +2212,8 @@ commit_create_col_( sql_trans *tr, sql_c
if (!delta->cs.alter)
ok = merge_delta(delta);
delta->cs.alter = 0;
- c->base.flags = 0;
+ if (!tr->parent)
+ c->base.new = 0;
}
return ok;
}
@@ -2207,7 +2222,8 @@ static int
commit_create_col( sql_trans *tr, sql_change *change, ulng commit_ts, ulng
oldest)
{
sql_column *c = (sql_column*)change->obj;
- c->base.flags = 0;
+ if (!tr->parent)
+ c->base.new = 0;
return commit_create_col_( tr, c, commit_ts, oldest);
}
@@ -2287,7 +2303,7 @@ static int
commit_create_idx_( sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
{
int ok = LOG_OK;
- (void)tr; (void)oldest;
+ (void)oldest;
if(!isTempTable(i->t)) {
sql_delta *delta = ATOMIC_PTR_GET(&i->data);
@@ -2296,7 +2312,8 @@ commit_create_idx_( sql_trans *tr, sql_i
assert(delta->next == NULL);
ok = merge_delta(delta);
- i->base.flags = 0;
+ if (!tr->parent)
+ i->base.new = 0;
}
return ok;
}
@@ -2305,7 +2322,8 @@ static int
commit_create_idx( sql_trans *tr, sql_change *change, ulng commit_ts, ulng
oldest)
{
sql_idx *i = (sql_idx*)change->obj;
- i->base.flags = 0;
+ if (!tr->parent)
+ i->base.new = 0;
return commit_create_idx_(tr, i, commit_ts, oldest);
}
@@ -2514,10 +2532,12 @@ commit_create_del( sql_trans *tr, sql_ch
ok = commit_create_idx_(tr, i,
commit_ts, oldest);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list