Changeset: dfe73ef3ca90 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dfe73ef3ca90
Modified Files:
monetdb5/mal/mel.h
sql/backends/monet5/sql.c
sql/backends/monet5/sql.mal
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
sql/storage/store.c
tools/monetdbe/monetdbe.c
Branch: unlock
Log Message:
merged
diffs (truncated from 608 to 300 lines):
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -246,7 +246,7 @@ const char *
MT_thread_getname(void)
{
struct winthread *w = TlsGetValue(threadslot);
- return w ? w->threadname : "unknown thread";
+ return w ? w->threadname : UNKNOWN_THREAD;
}
void
@@ -579,7 +579,7 @@ MT_thread_getname(void)
struct posthread *p;
p = pthread_getspecific(threadkey);
- return p ? p->threadname : "unknown thread";
+ return p ? p->threadname : UNKNOWN_THREAD;
}
void
@@ -694,9 +694,9 @@ join_threads(void)
p->waiting = true;
pthread_mutex_unlock(&posthread_lock);
TRC_DEBUG(THRD, "Join thread \"%s\"\n",
p->threadname);
- self->joinwait = p;
+ if (self) self->joinwait = p;
pthread_join(p->tid, NULL);
- self->joinwait = NULL;
+ if (self) self->joinwait = NULL;
rm_posthread(p);
waited = true;
pthread_mutex_lock(&posthread_lock);
@@ -721,9 +721,9 @@ join_detached_threads(void)
p->waiting = true;
pthread_mutex_unlock(&posthread_lock);
TRC_DEBUG(THRD, "Join thread \"%s\"\n",
p->threadname);
- self->joinwait = p;
+ if (self) self->joinwait = p;
pthread_join(p->tid, NULL);
- self->joinwait = NULL;
+ if (self) self->joinwait = NULL;
rm_posthread(p);
waited = true;
pthread_mutex_lock(&posthread_lock);
@@ -836,9 +836,9 @@ MT_join_thread(MT_Id t)
return -1;
TRC_DEBUG(THRD, "Join thread \"%s\"\n", p->threadname);
struct posthread *self = pthread_getspecific(threadkey);
- self->joinwait = p;
+ if (self) self->joinwait = p;
ret = pthread_join(p->tid, NULL);
- self->joinwait = NULL;
+ if (self) self->joinwait = NULL;
if (ret != 0) {
GDKsyserr(ret, "Joining thread failed");
return -1;
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -140,6 +140,8 @@ typedef size_t MT_Id; /* thread number.
enum MT_thr_detach { MT_THR_JOINABLE, MT_THR_DETACHED };
#define MT_NAME_LEN 32 /* length of thread/semaphore/etc. names */
+#define UNKNOWN_THREAD "unknown thread"
+
gdk_export bool MT_thread_init(void);
gdk_export int MT_create_thread(MT_Id *t, void (*function) (void *),
void *arg, enum MT_thr_detach d,
diff --git a/monetdb5/mal/mel.h b/monetdb5/mal/mel.h
--- a/monetdb5/mal/mel.h
+++ b/monetdb5/mal/mel.h
@@ -46,6 +46,7 @@ typedef struct __attribute__((__designat
#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD,
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS }
#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD,
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS }
+/* ARGC = arg-count + ret-count */
//#define args(RETC,ARGC,...) (mel_arg[ARGC?ARGC:1]){__VA_ARGS__}, .retc=RETC,
.argc=ARGC
#define args(RETC,ARGC,...) (mel_arg[ARGC]){__VA_ARGS__}, .retc=RETC,
.argc=ARGC
#define noargs NULL, .retc=0, .argc=0
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
@@ -5263,21 +5263,6 @@ static mel_func sql_init_funcs[] = {
command("sql", "querylog_enable", QLOGenable, true, "", noargs),
command("sql", "querylog_enable", QLOGenableThreshold, true, "", args(0,1,
arg("thres",int))),
command("sql", "querylog_disable", QLOGdisable, true, "", noargs),
- /* use from sysmon, ie no need too rename
- pattern("sql", "sysmon_queue", SYSMONqueue, false, "", args(9,9,
batarg("tag",lng),batarg("sessionid",int),batarg("user",str),batarg("started",timestamp),batarg("status",str),batarg("query",str),batarg("finished",timestamp),batarg("workers",int),batarg("memory",int))),
- pattern("sql", "sysmon_pause", SYSMONpause, true, "", args(0,1,
arg("tag",bte))),
- pattern("sql", "sysmon_pause", SYSMONpause, true, "", args(0,1,
arg("tag",sht))),
- pattern("sql", "sysmon_pause", SYSMONpause, true, "", args(0,1,
arg("tag",int))),
- pattern("sql", "sysmon_pause", SYSMONpause, true, "", args(0,1,
arg("tag",lng))),
- pattern("sql", "sysmon_resume", SYSMONresume, true, "", args(0,1,
arg("tag",bte))),
- pattern("sql", "sysmon_resume", SYSMONresume, true, "", args(0,1,
arg("tag",sht))),
- pattern("sql", "sysmon_resume", SYSMONresume, true, "", args(0,1,
arg("tag",int))),
- pattern("sql", "sysmon_resume", SYSMONresume, true, "", args(0,1,
arg("tag",lng))),
- pattern("sql", "sysmon_stop", SYSMONstop, true, "", args(0,1,
arg("tag",bte))),
- pattern("sql", "sysmon_stop", SYSMONstop, true, "", args(0,1,
arg("tag",sht))),
- pattern("sql", "sysmon_stop", SYSMONstop, true, "", args(0,1,
arg("tag",int))),
- pattern("sql", "sysmon_stop", SYSMONstop, true, "", args(0,1,
arg("tag",lng))),
- */
pattern("sql", "prepared_statements", SQLsession_prepared_statements, false,
"Available prepared statements in the current session", args(5,5,
batarg("sessionid",int),batarg("user",str),batarg("statementid",int),batarg("statement",str),batarg("created",timestamp))),
pattern("sql", "prepared_statements_args",
SQLsession_prepared_statements_args, false, "Available prepared statements'
arguments in the current session", args(9,9,
batarg("statementid",int),batarg("type",str),batarg("digits",int),batarg("scale",int),batarg("inout",bte),batarg("number",int),batarg("schema",str),batarg("table",str),batarg("column",str))),
pattern("sql", "copy_rejects", COPYrejects, false, "", args(4,4,
batarg("rowid",lng),batarg("fldid",int),batarg("msg",str),batarg("inp",str))),
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -568,37 +568,6 @@ address QLOGenableThreshold;
unsafe command querylog_disable()
address QLOGdisable;
-pattern sysmon_queue()(tag:bat[:lng], sessionid:bat[:int], user:bat[:str],
started:bat[:timestamp],
-status:bat[:str], query:bat[:str], finished:bat[:timestamp],
workers:bat[:int], memory:bat[:int])
-address SYSMONqueue;
-
-unsafe pattern sysmon_pause(tag:bte)
-address SYSMONpause;
-unsafe pattern sysmon_pause(tag:sht)
-address SYSMONpause;
-unsafe pattern sysmon_pause(tag:int)
-address SYSMONpause;
-unsafe pattern sysmon_pause(tag:lng)
-address SYSMONpause;
-
-unsafe pattern sysmon_resume(tag:bte)
-address SYSMONresume;
-unsafe pattern sysmon_resume(tag:sht)
-address SYSMONresume;
-unsafe pattern sysmon_resume(tag:int)
-address SYSMONresume;
-unsafe pattern sysmon_resume(tag:lng)
-address SYSMONresume;
-
-unsafe pattern sysmon_stop(tag:bte)
-address SYSMONstop;
-unsafe pattern sysmon_stop(tag:sht)
-address SYSMONstop;
-unsafe pattern sysmon_stop(tag:int)
-address SYSMONstop;
-unsafe pattern sysmon_stop(tag:lng)
-address SYSMONstop;
-
pattern prepared_statements()(sessionid:bat[:int], user:bat[:str],
statementid:bat[:int], statement:bat[:str], created:bat[:timestamp])
address SQLsession_prepared_statements
comment "Available prepared statements in the current session";
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
@@ -241,7 +241,6 @@ typedef struct sql_trans {
int id; /* id of this transaction */
int stime; /* start of transaction */
int wstime; /* first write transaction time stamp */
- int rtime; /* timestamp of latest read performed in
transaction*/
int wtime; /* timestamp of latest write performed in
transaction*/
int atime;
int schema_number; /* schema timestamp */
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
@@ -283,7 +283,7 @@ bind_col(sql_trans *tr, sql_column *c, i
c->data = timestamp_delta(oc->data, c->base.stime);
}
if (tr && access != QUICK)
- c->base.rtime = c->t->base.rtime = c->t->s->base.rtime =
tr->rtime = tr->stime;
+ c->base.rtime = c->t->base.rtime = c->t->s->base.rtime =
tr->stime;
sql_delta *s = c->data;
if (access == RD_UPD_ID || access == RD_UPD_VAL) {
return cs_bind_ubat( &s->cs, access, c->type.type->localtype);
@@ -304,7 +304,7 @@ bind_idx(sql_trans *tr, sql_idx * i, int
i->data = timestamp_delta(oi->data, i->base.stime);
}
if (tr && access != QUICK)
- i->base.rtime = i->t->base.rtime = i->t->s->base.rtime =
tr->rtime = tr->stime;
+ i->base.rtime = i->t->base.rtime = i->t->s->base.rtime =
tr->stime;
sql_delta *s = i->data;
if (access == RD_UPD_ID || access == RD_UPD_VAL) {
return cs_bind_ubat( &s->cs, access,
(oid_index(i->type))?TYPE_oid:TYPE_lng);
@@ -326,7 +326,7 @@ bind_del(sql_trans *tr, sql_table *t, in
t->data = timestamp_dbat(ot->data, t->base.stime);
}
if (tr && access != QUICK)
- t->base.rtime = t->s->base.rtime = tr->rtime = tr->stime;
+ t->base.rtime = t->s->base.rtime = tr->stime;
storage *s = t->data;
if (access == RD_UPD_ID || access == RD_UPD_VAL) {
return cs_bind_ubat( &s->cs, access, TYPE_bit);
@@ -513,7 +513,7 @@ update_col(sql_trans *tr, sql_column *c,
bat = c->data;
bat->cs.wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime
= tr->wtime = tr->wstime;
assert(tr != gtrans);
- c->base.rtime = c->t->base.rtime = c->t->s->base.rtime = tr->rtime =
tr->stime;
+ c->base.rtime = c->t->base.rtime = c->t->s->base.rtime = tr->stime;
if (tpe == TYPE_bat)
return delta_update_bat(bat, tids, upd, isNew(c));
else
@@ -553,7 +553,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
bat = i->data;
bat->cs.wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime
= tr->wtime = tr->wstime;
assert(tr != gtrans);
- i->base.rtime = i->t->base.rtime = i->t->s->base.rtime = tr->rtime =
tr->stime;
+ i->base.rtime = i->t->base.rtime = i->t->s->base.rtime = tr->stime;
if (tpe == TYPE_bat)
return delta_update_bat(bat, tids, upd, isNew(i));
else
@@ -1030,6 +1030,7 @@ sorted_col(sql_trans *tr, sql_column *co
{
int sorted = 0;
+ assert(tr->active || tr == gtrans);
if (!isTable(col->t) || !col->t->s)
return 0;
/* fallback to central bat */
@@ -1040,16 +1041,38 @@ sorted_col(sql_trans *tr, sql_column *co
BAT *b = bind_col(tr, col, QUICK);
if (b)
- sorted = BATtordered(b);
+ sorted = BATtordered(b) || BATtrevordered(b);
}
return sorted;
}
static int
+unique_col(sql_trans *tr, sql_column *col)
+{
+ int distinct = 0;
+
+ assert(tr->active || tr == gtrans);
+ if (!isTable(col->t) || !col->t->s)
+ return 0;
+ /* fallback to central bat */
+ if (tr && tr->parent && !col->data && col->po)
+ col = col->po;
+
+ if (col && col->data) {
+ BAT *b = bind_col(tr, col, QUICK);
+
+ if (b)
+ distinct = b->tkey;
+ }
+ return distinct;
+}
+
+static int
double_elim_col(sql_trans *tr, sql_column *col)
{
int de = 0;
+ assert(tr->active || tr == gtrans);
if (!isTable(col->t) || !col->t->s)
return 0;
/* fallback to central bat */
@@ -2281,12 +2304,17 @@ bat_storage_init( store_functions *sf)
sf->count_idx = (count_idx_fptr)&count_idx;
sf->dcount_col = (dcount_col_fptr)&dcount_col;
sf->sorted_col = (prop_col_fptr)&sorted_col;
+ sf->unique_col = (prop_col_fptr)&unique_col;
sf->double_elim_col = (prop_col_fptr)&double_elim_col;
sf->create_col = (create_col_fptr)&create_col;
sf->create_idx = (create_idx_fptr)&create_idx;
sf->create_del = (create_del_fptr)&create_del;
+ sf->log_create_col = (create_col_fptr)&log_create_col;
+ sf->log_create_idx = (create_idx_fptr)&log_create_idx;
+ sf->log_create_del = (create_del_fptr)&log_create_del;
+
sf->dup_col = (dup_col_fptr)&dup_col;
sf->dup_idx = (dup_idx_fptr)&dup_idx;
sf->dup_del = (dup_del_fptr)&dup_del;
@@ -2295,17 +2323,13 @@ bat_storage_init( store_functions *sf)
sf->destroy_idx = (destroy_idx_fptr)&destroy_idx;
sf->destroy_del = (destroy_del_fptr)&destroy_del;
- sf->log_create_col = (create_col_fptr)&log_create_col;
- sf->log_create_idx = (create_idx_fptr)&log_create_idx;
- sf->log_create_del = (create_del_fptr)&log_create_del;
-
sf->log_destroy_col = (destroy_col_fptr)&log_destroy_col;
sf->log_destroy_idx = (destroy_idx_fptr)&log_destroy_idx;
sf->log_destroy_del = (destroy_del_fptr)&log_destroy_del;
sf->clear_table = (clear_table_fptr)&clear_table;
+ sf->update_table = (update_table_fptr)&update_table;
sf->log_table = (update_table_fptr)&log_table;
- sf->update_table = (update_table_fptr)&update_table;
sf->gtrans_minmax = (gtrans_update_fptr)&minmax;
sf->cleanup = (cleanup_fptr)&cleanup;
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -113,17 +113,6 @@ cs_find_id(changeset * cs, sqlid id)
return n;
}
}
- if (cs->dset) {
- l = cs->dset;
- for (n = l->h; n; n = n->next) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list