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