Changeset: cacec59223a4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cacec59223a4
Modified Files:
        sql/storage/bat/bat_table.c
        sql/storage/sql_catalog.c
        sql/storage/store.c
Branch: default
Log Message:

small startup optimizations (more dynamic hash tables for sql structures, ie 
properly handle the 20K tables case)


diffs (133 lines):

diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -105,7 +105,7 @@ delta_full_bat_( sql_trans *tr, sql_colu
        }
        (void)c;
        if (!bat->cached /*&& !tr->parent*/) 
-               bat->cached = temp_descriptor(b->batCacheid);
+               bat->cached = b;
        return b;
 }
 
@@ -113,7 +113,7 @@ static BAT *
 delta_full_bat( sql_trans *tr, sql_column *c, sql_delta *bat, int temp)
 {
        if (bat->cached /*&& !tr->parent*/) 
-               return temp_descriptor(bat->cached->batCacheid);
+               return bat->cached;
        return delta_full_bat_( tr, c, bat, temp);
 }
 
@@ -127,6 +127,15 @@ full_column(sql_trans *tr, sql_column *c
        return delta_full_bat(tr, c, c->data, isTemp(c));
 }
 
+static void
+full_destroy(sql_column *c, BAT *b)
+{
+       sql_delta *d = c->data;
+       assert(d);
+       if (d->cached != b)
+               bat_destroy(b);
+}
+
 static oid column_find_row(sql_trans *tr, sql_column *c, const void *value, 
...);
 static oid
 column_find_row(sql_trans *tr, sql_column *c, const void *value, ...)
@@ -141,7 +150,7 @@ column_find_row(sql_trans *tr, sql_colum
        r = BATsubselect(b, s, value, NULL, 1, 0, 0);
        bat_destroy(s);
        s = r;
-       bat_destroy(b);
+       full_destroy(c, b);
        while ((c = va_arg(va, sql_column *)) != NULL) {
                value = va_arg(va, void *);
 
@@ -149,7 +158,7 @@ column_find_row(sql_trans *tr, sql_colum
                r = BATsubselect(b, s, value, NULL, 1, 0, 0);
                bat_destroy(s);
                s = r;
-               bat_destroy(b);
+               full_destroy(c, b);
        }
        va_end(va);
        if (BATcount(s) == 1) {
@@ -176,11 +185,11 @@ column_find_value(sql_trans *tr, sql_col
 
                res = BUNtail(bi, q);
                sz = ATOMlen(b->ttype, res);
-               r = GDKzalloc(sz);
+               r = GDKmalloc(sz);
                memcpy(r,res,sz);
                res = r;
        }
-       bat_destroy(b);
+       full_destroy(c, b);
        return res;
 }
 
@@ -290,10 +299,12 @@ rids_select( sql_trans *tr, sql_column *
        if (!kvh && key_value_low != ATOMnilptr(b->ttype))
                kvh = ATOMnilptr(b->ttype);
        hi = (kvl == kvh);
+       if (!b->T->hash)
+               BAThash(b, 0);
        r = BATsubselect(b, s, kvl, kvh, 1, hi, 0);
        bat_destroy(s);
        s = r;
-       bat_destroy(b);
+       full_destroy(key, b);
        if (key_value_low || key_value_high) {
                va_start(va, key_value_high);
                while ((key = va_arg(va, sql_column *)) != NULL) {
@@ -309,7 +320,7 @@ rids_select( sql_trans *tr, sql_column *
                        r = BATsubselect(b, s, kvl, kvh, 1, hi, 0);
                        bat_destroy(s);
                        s = r;
-                       bat_destroy(b);
+                       full_destroy(key, b);
                }
                va_end(va);
        }
@@ -326,7 +337,7 @@ rids_orderby(sql_trans *tr, rids *r, sql
 
        b = full_column(tr, orderby_col);
        s = BATproject(r->data, b);
-       bat_destroy(b);
+       full_destroy(orderby_col, b);
        BATsubsort(NULL, &o, NULL, s, NULL, NULL, 0, 0);
        bat_destroy(s);
        s = BATproject(o, r->data);
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
@@ -18,7 +18,7 @@ static void *
 
        if (l) {
                MT_lock_set(&l->ht_lock, "_list_find_name");
-               if (!l->ht && list_length(l) > HASH_MIN_SIZE && l->sa) {
+               if ((!l->ht || l->ht->size*16 < list_length(l)) && 
list_length(l) > HASH_MIN_SIZE && l->sa) {
                        l->ht = hash_new(l->sa, list_length(l), 
(fkeyvalue)&base_key);
 
                        for (n = l->h; n; n = n->next ) {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2075,15 +2075,8 @@ sql_trans_copy_column( sql_trans *tr, sq
 static sql_table *
 schema_table_find(sql_schema *s, sql_table *ot)
 {
-       node *n;
-
        if (s) 
-       for (n = s->tables.set->h; n; n = n->next) {
-               sql_table *t = n->data;
-
-               if (t->base.id == ot->base.id)
-                       return t;
-       }
+               return find_sql_table(s, ot->base.name);
        assert(NULL);
        return NULL;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to