Changeset: 36412f77a7fa for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/36412f77a7fa Modified Files: sql/backends/monet5/dict.c sql/include/sql_catalog.h sql/server/sql_mvc.c sql/storage/sql_catalog.c sql/storage/store.c Branch: default Log Message:
for local tmps' we need to look inside the tables for keys, idxs, and triggers diffs (268 lines): diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c --- a/sql/backends/monet5/dict.c +++ b/sql/backends/monet5/dict.c @@ -19,6 +19,9 @@ static void BATnegateprops(BAT *b) { /* disable all properties here */ + b->tnonil = false; + b->tnil = false; + b->tsorted = false; b->tsorted = false; b->trevsorted = false; b->tnosorted = 0; 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 @@ -766,9 +766,11 @@ extern node *list_find_base_id(list *l, extern sql_key *find_sql_key(sql_table *t, const char *kname); extern sql_key *sql_trans_find_key(sql_trans *tr, sqlid id); +extern sql_key *schema_find_key(sql_trans *tr, sql_schema *s, const char *name); extern sql_idx *find_sql_idx(sql_table *t, const char *kname); extern sql_idx *sql_trans_find_idx(sql_trans *tr, sqlid id); +extern sql_idx *schema_find_idx(sql_trans *tr, sql_schema *s, const char *name); extern sql_column *find_sql_column(sql_table *t, const char *cname); @@ -786,6 +788,7 @@ extern sql_type *sql_trans_bind_type(sql extern sql_type *sql_trans_find_type(sql_trans *tr, sql_schema *s /*optional */, sqlid id); extern sql_func *sql_trans_find_func(sql_trans *tr, sqlid id); extern sql_trigger *sql_trans_find_trigger(sql_trans *tr, sqlid id); +extern sql_trigger *schema_find_trigger(sql_trans *tr, sql_schema *s, const char *name); extern void find_partition_type(sql_subtype *tpe, sql_table *mt); extern void *sql_values_list_element_validate_and_insert(void *v1, void *v2, void *tpe, int* res); diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -290,7 +290,7 @@ mvc_init(int debug, store_type store_tpe for (int i = 0; i < 9; i++) { sql_column *col = NULL; - + mvc_create_column_(&col, m, t, tview[i].name, tview[i].type, tview[i].digits); if (col == NULL) { mvc_destroy(m); @@ -999,10 +999,9 @@ mvc_first_column(mvc *m, sql_table *t) sql_key * mvc_bind_key(mvc *m, sql_schema *s, const char *kname) { - sql_base *b = os_find_name(s->keys, m->session->tr, kname); - sql_key *k = (sql_key*)b; + sql_key *k = schema_find_key(m->session->tr, s, kname); - if (!b) + if (!k) return NULL; TRC_DEBUG(SQL_TRANS, "Bind key: %s.%s\n", s->base.name, kname); return k; @@ -1011,11 +1010,10 @@ mvc_bind_key(mvc *m, sql_schema *s, cons sql_idx * mvc_bind_idx(mvc *m, sql_schema *s, const char *iname) { - sql_base *b = os_find_name(s->idxs, m->session->tr, iname); + sql_idx *i = schema_find_idx(m->session->tr, s, iname); - if (!b) + if (!i) return NULL; - sql_idx *i = (sql_idx*)b; TRC_DEBUG(SQL_TRANS, "Bind index: %s.%s\n", s->base.name, iname); return i; } @@ -1060,13 +1058,12 @@ mvc_bind_ukey(sql_table *t, list *colnam sql_trigger * mvc_bind_trigger(mvc *m, sql_schema *s, const char *tname) { - sql_base *b = os_find_name(s->triggers, m->session->tr, tname); + sql_trigger *t = schema_find_trigger(m->session->tr, s, tname); - if (!b) + if (!t) return NULL; - sql_trigger *trigger = (sql_trigger*)b; TRC_DEBUG(SQL_TRANS, "Bind trigger: %s.%s\n", s->base.name, tname); - return trigger; + return t; } int 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 @@ -166,6 +166,22 @@ sql_trans_find_key(sql_trans *tr, sqlid return NULL; } +sql_key * +schema_find_key(sql_trans *tr, sql_schema *s, const char *name) +{ + sql_base *b = os_find_name(s->keys, tr, name); + + if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search tables */ + for(node *n = tr->localtmps.set->h; n; n = n->next) { + sql_table *t = n->data; + sql_key *o = find_sql_key(t, name); + if (o) + return o; + } + } + return (sql_key*)b; +} + sql_idx * find_sql_idx(sql_table *t, const char *iname) { @@ -189,6 +205,22 @@ sql_trans_find_idx(sql_trans *tr, sqlid return NULL; } +sql_idx * +schema_find_idx(sql_trans *tr, sql_schema *s, const char *name) +{ + sql_base *b = os_find_name(s->idxs, tr, name); + + if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search tables */ + for(node *n = tr->localtmps.set->h; n; n = n->next) { + sql_table *t = n->data; + sql_idx *o = find_sql_idx(t, name); + if (o) + return o; + } + } + return (sql_idx*)b; +} + sql_column * find_sql_column(sql_table *t, const char *cname) { @@ -311,6 +343,15 @@ sql_trans_find_func(sql_trans *tr, sqlid return NULL; } +static sql_trigger * +find_sql_trigger(sql_table *t, const char *tname) +{ + node *n = ol_find_name(t->triggers, tname); + if (n) + return n->data; + return NULL; +} + sql_trigger * sql_trans_find_trigger(sql_trans *tr, sqlid id) { @@ -325,6 +366,22 @@ sql_trans_find_trigger(sql_trans *tr, sq return NULL; } +sql_trigger * +schema_find_trigger(sql_trans *tr, sql_schema *s, const char *name) +{ + sql_base *b = os_find_name(s->triggers, tr, name); + + if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search tables */ + for(node *n = tr->localtmps.set->h; n; n = n->next) { + sql_table *t = n->data; + sql_trigger *o = find_sql_trigger(t, name); + if (o) + return o; + } + } + return (sql_trigger*)b; +} + void* sql_values_list_element_validate_and_insert(void *v1, void *v2, void *tpe, int* res) { diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -2139,37 +2139,6 @@ store_init(int debug, store_type store_t return store; } -// All this must only be accessed while holding the store->flush. -// The exception is flush_now, which can be set by anyone at any -// time and therefore needs some special treatment. -static struct { - // These two are inputs, set from outside the store_manager - bool enabled; - ATOMIC_TYPE flush_now; - // These are state set from within the store_manager - bool working; - int countdown_ms; - unsigned int cycle; - char *reason_to; - char *reason_not_to; -} flusher = { - .flush_now = ATOMIC_VAR_INIT(0), - .enabled = true, -}; - -static void -flusher_new_cycle(void) -{ - int cycle_time = GDKdebug & FORCEMITOMASK ? 500 : 50000; - - // do not touch .enabled and .flush_now, those are inputs - flusher.working = false; - flusher.countdown_ms = cycle_time; - flusher.cycle += 1; - flusher.reason_to = NULL; - flusher.reason_not_to = NULL; -} - void store_exit(sqlstore *store) { @@ -2233,14 +2202,11 @@ store_apply_deltas(sqlstore *store) { int res = LOG_OK; - flusher.working = true; - store_lock(store); ulng oldest = store_oldest_pending(store); store_unlock(store); if (oldest) res = store->logger_api.flush(store, oldest-1); - flusher.working = false; return res; } @@ -2248,7 +2214,6 @@ void store_suspend_log(sqlstore *store) { MT_lock_set(&store->lock); - flusher.enabled = false; MT_lock_unset(&store->lock); } @@ -2256,7 +2221,6 @@ void store_resume_log(sqlstore *store) { MT_lock_set(&store->flush); - flusher.enabled = true; MT_lock_unset(&store->flush); } @@ -2352,7 +2316,6 @@ store_manager(sqlstore *store) const int sleeptime = 100; MT_lock_unset(&store->flush); MT_sleep_ms(sleeptime); - flusher.countdown_ms -= sleeptime; MT_lock_set(&store->commit); MT_lock_set(&store->flush); if (store->logger_api.changes(store) <= 0) { @@ -2373,7 +2336,6 @@ store_manager(sqlstore *store) if (GDKexiting()) break; - flusher_new_cycle(); MT_thread_setworking("sleeping"); TRC_DEBUG(SQL_STORE, "Store flusher done\n"); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org