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

Reply via email to