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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to