Changeset: ef9745cc0f5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef9745cc0f5d
Modified Files:
        sql/backends/monet5/sql_user.c
        sql/server/sql_privileges.c
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/storage/store_dependency.c
Branch: default
Log Message:

Allocate less when possible


diffs (truncated from 357 to 300 lines):

diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -617,10 +617,7 @@ monet5_user_set_def_schema(mvc *m, oid u
                GDKfree(username);
                return NULL;
        }
-       p = store->table_api.column_find_value(m->session->tr, users_schema, 
rid);
-       assert(p);
-       schema_id = *(sqlid *) p;
-       _DELETE(p);
+       schema_id = store->table_api.column_find_sqlid(m->session->tr, 
users_schema, rid);
 
        p = store->table_api.column_find_value(m->session->tr, 
users_schema_path, rid);
        assert(p);
@@ -646,10 +643,7 @@ monet5_user_set_def_schema(mvc *m, oid u
        rid = store->table_api.column_find_row(m->session->tr, auths_name, 
username, NULL);
        if (!is_oid_nil(rid)) {
                sql_column *auths_id = find_sql_column(auths, "id");
-               sqlid id;
-               p = store->table_api.column_find_value(m->session->tr, 
auths_id, rid);
-               id = *(sqlid *) p;
-               _DELETE(p);
+               sqlid id = store->table_api.column_find_sqlid(m->session->tr, 
auths_id, rid);
 
                m->user_id = m->role_id = id;
        } else {
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -809,7 +809,7 @@ sql_drop_granted_users(mvc *sql, sqlid u
                A = store->table_api.rids_select(tr, find_sql_column(auths, 
"grantor"), &user_id, &user_id, NULL);
                /* remove them and continue the deletion */
                for(rid = store->table_api.rids_next(A); !is_oid_nil(rid); rid 
= store->table_api.rids_next(A)) {
-                       sqlid nuid = 
*(sqlid*)store->table_api.column_find_value(tr, find_sql_column(auths, "id"), 
rid);
+                       sqlid nuid = store->table_api.column_find_sqlid(tr, 
find_sql_column(auths, "id"), rid);
                        char* nname = store->table_api.column_find_value(tr, 
find_sql_column(auths, "name"), rid);
 
                        sql_drop_granted_users(sql, nuid, nname, deleted_users);
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
@@ -143,51 +143,34 @@ column_find_value(sql_trans *tr, sql_col
        return res;
 }
 
-static sqlid
-column_find_sqlid(sql_trans *tr, sql_column *c, oid rid)
-{
-       BUN q = BUN_NONE;
-       BAT *b;
-       sqlid res = -1;
-
-       b = full_column(tr, c);
-       if (b) {
-               if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b))
-                       q = BUN_NONE;
-               else
-                       q = rid - b->hseqbase;
-       }
-       if (q != BUN_NONE) {
-               BATiter bi = bat_iterator(b);
-
-               res = *(sqlid*)BUNtail(bi, q);
-       }
-       full_destroy(c, b);
-       return res;
+#define column_find_tpe(TPE) \
+static TPE \
+column_find_##TPE(sql_trans *tr, sql_column *c, oid rid) \
+{ \
+       BUN q = BUN_NONE; \
+       BAT *b; \
+       TPE res = -1; \
+ \
+       b = full_column(tr, c); \
+       if (b) { \
+               if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b)) \
+                       q = BUN_NONE; \
+               else \
+                       q = rid - b->hseqbase; \
+       } \
+       if (q != BUN_NONE) { \
+               BATiter bi = bat_iterator(b); \
+               res = *(TPE*)BUNtail(bi, q); \
+       } \
+       full_destroy(c, b); \
+       return res; \
 }
 
-static sqlid
-column_find_int(sql_trans *tr, sql_column *c, oid rid)
-{
-       BUN q = BUN_NONE;
-       BAT *b;
-       int res = -1;
-
-       b = full_column(tr, c);
-       if (b) {
-               if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b))
-                       q = BUN_NONE;
-               else
-                       q = rid - b->hseqbase;
-       }
-       if (q != BUN_NONE) {
-               BATiter bi = bat_iterator(b);
-
-               res = *(int*)BUNtail(bi, q);
-       }
-       full_destroy(c, b);
-       return res;
-}
+column_find_tpe(sqlid)
+column_find_tpe(bte)
+column_find_tpe(sht)
+column_find_tpe(int)
+column_find_tpe(lng)
 
 static int
 column_update_value(sql_trans *tr, sql_column *c, oid rid, void *value)
@@ -634,7 +617,10 @@ bat_table_init( table_functions *tf )
        tf->column_find_row = column_find_row;
        tf->column_find_value = column_find_value;
        tf->column_find_sqlid = column_find_sqlid;
+       tf->column_find_bte = column_find_bte;
+       tf->column_find_sht = column_find_sht;
        tf->column_find_int = column_find_int;
+       tf->column_find_lng = column_find_lng;
 
        tf->column_update_value = column_update_value;
        tf->table_insert = table_insert;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -42,7 +42,10 @@ struct sqlstore;
 typedef oid (*column_find_row_fptr)(sql_trans *tr, sql_column *c, const void 
*value, ...);
 typedef void *(*column_find_value_fptr)(sql_trans *tr, sql_column *c, oid rid);
 typedef sqlid (*column_find_sqlid_fptr)(sql_trans *tr, sql_column *c, oid rid);
+typedef bte (*column_find_bte_fptr)(sql_trans *tr, sql_column *c, oid rid);
+typedef sht (*column_find_sht_fptr)(sql_trans *tr, sql_column *c, oid rid);
 typedef int (*column_find_int_fptr)(sql_trans *tr, sql_column *c, oid rid);
+typedef lng (*column_find_lng_fptr)(sql_trans *tr, sql_column *c, oid rid);
 typedef int (*column_update_value_fptr)(sql_trans *tr, sql_column *c, oid rid, 
void *value);
 typedef int (*table_insert_fptr)(sql_trans *tr, sql_table *t, ...);
 typedef int (*table_delete_fptr)(sql_trans *tr, sql_table *t, oid rid);
@@ -89,7 +92,10 @@ typedef struct table_functions {
        column_find_row_fptr column_find_row;
        column_find_value_fptr column_find_value;
        column_find_sqlid_fptr column_find_sqlid;
+       column_find_bte_fptr column_find_bte;
+       column_find_sht_fptr column_find_sht;
        column_find_int_fptr column_find_int;
+       column_find_lng_fptr column_find_lng;
        column_update_value_fptr column_update_value;
        table_insert_fptr table_insert;
        table_delete_fptr table_delete;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -322,8 +322,7 @@ load_key(sql_trans *tr, sql_table *t, oi
                fk->on_delete = action & 255;
                fk->on_update = (action>>8) & 255;
 
-               v = store->table_api.column_find_value(tr, 
find_sql_column(keys, "rkey"), rid);
-               fk->rkey = *(sqlid *)v;                 _DELETE(v);
+               fk->rkey = store->table_api.column_find_sqlid(tr, 
find_sql_column(keys, "rkey"), rid);
        }
 
        kc_id = find_sql_column(objects, "id");
@@ -434,12 +433,9 @@ load_trigger(sql_trans *tr, sql_table *t
        v = store->table_api.column_find_value(tr, find_sql_column(triggers, 
"name"), rid);
        base_init(tr->sa, &nt->base, tid, 0, v);        _DELETE(v);
 
-       v = store->table_api.column_find_value(tr, find_sql_column(triggers, 
"time"), rid);
-       nt->time = *(sht*)v;                    _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(triggers, 
"orientation"),rid);
-       nt->orientation = *(sht*)v;             _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(triggers, 
"event"), rid);
-       nt->event = *(sht*)v;                   _DELETE(v);
+       nt->time = store->table_api.column_find_sht(tr, 
find_sql_column(triggers, "time"), rid);
+       nt->orientation = store->table_api.column_find_sht(tr, 
find_sql_column(triggers, "orientation"),rid);
+       nt->event = store->table_api.column_find_sht(tr, 
find_sql_column(triggers, "event"), rid);
 
        v = store->table_api.column_find_value(tr, find_sql_column(triggers, 
"old_name"), rid);
        if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), v) != 0)
@@ -505,8 +501,7 @@ load_column(sql_trans *tr, sql_table *t,
        if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), def) != 0)
                c->def = SA_STRDUP(tr->sa, def);
        _DELETE(def);
-       v = store->table_api.column_find_value(tr, find_sql_column(columns, 
"null"), rid);
-       c->null = *(bit *)v;                    _DELETE(v);
+       c->null = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(columns, "null"), rid);
        c->colnr = store->table_api.column_find_int(tr, 
find_sql_column(columns, "number"), rid);
        c->unique = 0;
        c->storage_type = NULL;
@@ -533,7 +528,7 @@ load_range_partition(sql_trans *tr, sql_
 
        rs = store->table_api.rids_select(tr, find_sql_column(ranges, 
"table_id"), &pt->member, &pt->member, NULL);
        if ((rid = store->table_api.rids_next(rs)) != oid_nil) {
-               void *v1, *v2, *v3;
+               void *v1, *v2;
                ValRecord vmin, vmax;
                ptr ok;
 
@@ -547,9 +542,7 @@ load_range_partition(sql_trans *tr, sql_
                _DELETE(v1);
                _DELETE(v2);
                if (ok) {
-                       v3 = store->table_api.column_find_value(tr, 
find_sql_column(ranges, "with_nulls"), rid);
-                       pt->with_nills = *((bit*)v3);
-                       _DELETE(v3);
+                       pt->with_nills = (bit) 
store->table_api.column_find_bte(tr, find_sql_column(ranges, "with_nulls"), 
rid);
 
                        pt->part.range.minvalue = SA_NEW_ARRAY(tr->sa, char, 
vmin.len);
                        pt->part.range.maxvalue = SA_NEW_ARRAY(tr->sa, char, 
vmax.len);
@@ -685,19 +678,15 @@ load_table(sql_trans *tr, sql_schema *s,
        if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), query) != 0)
                t->query = SA_STRDUP(tr->sa, query);
        _DELETE(query);
-       v = store->table_api.column_find_value(tr, find_sql_column(tables, 
"type"), rid);
-       t->type = *(sht *)v;                    _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(tables, 
"system"), rid);
-       t->system = *(bit *)v;                  _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(tables, 
"commit_action"),rid);
-       t->commit_action = (ca_t)*(sht *)v;     _DELETE(v);
+       t->type = store->table_api.column_find_sht(tr, find_sql_column(tables, 
"type"), rid);
+       t->system = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(tables, "system"), rid);
+       t->commit_action = (ca_t) store->table_api.column_find_sht(tr, 
find_sql_column(tables, "commit_action"),rid);
        t->persistence = SQL_PERSIST;
        if (t->commit_action)
                t->persistence = SQL_GLOBAL_TEMP;
        if (isRemote(t))
                t->persistence = SQL_REMOTE;
-       v = store->table_api.column_find_value(tr, find_sql_column(tables, 
"access"),rid);
-       t->access = *(sht*)v;   _DELETE(v);
+       t->access = store->table_api.column_find_sht(tr, 
find_sql_column(tables, "access"),rid);
 
        t->pkey = NULL;
        t->s = s;
@@ -722,19 +711,16 @@ load_table(sql_trans *tr, sql_schema *s,
        partitions_table_id = find_sql_column(partitions, "table_id");
        rs = store->table_api.rids_select(tr, partitions_table_id, &t->base.id, 
&t->base.id, NULL);
        if ((rid = store->table_api.rids_next(rs)) != oid_nil) {
-               v = store->table_api.column_find_value(tr, 
find_sql_column(partitions, "type"), rid);
-               t->properties |= *(bte*)v;
-               _DELETE(v);
+               t->properties |= store->table_api.column_find_bte(tr, 
find_sql_column(partitions, "type"), rid);
 
                if (isPartitionedByColumnTable(t)) {
                        pcolid = store->table_api.column_find_sqlid(tr, 
find_sql_column(partitions, "column_id"), rid);
                } else {
                        v = store->table_api.column_find_value(tr, 
find_sql_column(partitions, "expression"), rid);
-                       if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), v) == 0)
-                               assert(0);
+                       assert(ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), v) != 0);
                        exp = SA_STRDUP(tr->sa, v);
+                       _DELETE(v);
                }
-               _DELETE(v);
        }
        store->table_api.rids_destroy(rs);
 
@@ -842,8 +828,7 @@ load_arg(sql_trans *tr, sql_func * f, oi
        (void)f;
        v = store->table_api.column_find_value(tr, find_sql_column(args, 
"name"), rid);
        a->name = SA_STRDUP(tr->sa, v); _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(args, 
"inout"), rid);
-       a->inout = *(bte *)v;   _DELETE(v);
+       a->inout = store->table_api.column_find_bte(tr, find_sql_column(args, 
"inout"), rid);
        digits = store->table_api.column_find_int(tr, find_sql_column(args, 
"type_digits"), rid);
        scale = store->table_api.column_find_int(tr, find_sql_column(args, 
"type_scale"), rid);
 
@@ -894,18 +879,13 @@ load_func(sql_trans *tr, sql_schema *s, 
        t->lang = (sql_flang) store->table_api.column_find_int(tr, 
find_sql_column(funcs, "language"), rid);
        t->sql = (t->lang==FUNC_LANG_SQL||t->lang==FUNC_LANG_MAL);
        t->type = (sql_ftype) store->table_api.column_find_int(tr, 
find_sql_column(funcs, "type"), rid);
-       v = store->table_api.column_find_value(tr, find_sql_column(funcs, 
"side_effect"), rid);
-       t->side_effect = *(bit *)v;             _DELETE(v);
+       t->side_effect = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(funcs, "side_effect"), rid);
        if (t->type==F_FILT)
                t->side_effect=FALSE;
-       v = store->table_api.column_find_value(tr, find_sql_column(funcs, 
"varres"), rid);
-       t->varres = *(bit *)v;  _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(funcs, 
"vararg"), rid);
-       t->vararg = *(bit *)v;  _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(funcs, 
"system"), rid);
-       t->system = *(bit *)v;  _DELETE(v);
-       v = store->table_api.column_find_value(tr, find_sql_column(funcs, 
"semantics"), rid);
-       t->semantics = *(bit *)v;               _DELETE(v);
+       t->varres = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(funcs, "varres"), rid);
+       t->vararg = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(funcs, "vararg"), rid);
+       t->system = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(funcs, "system"), rid);
+       t->semantics = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(funcs, "semantics"), rid);
        t->res = NULL;
        t->s = s;
        t->fix_scale = SCALE_EQ;
@@ -958,18 +938,12 @@ load_seq(sql_trans *tr, sql_schema * s, 
        sid = store->table_api.column_find_sqlid(tr, find_sql_column(seqs, 
"id"), rid);
        v = store->table_api.column_find_value(tr, find_sql_column(seqs, 
"name"), rid);
        base_init(tr->sa, &seq->base, sid, 0, v); _DELETE(v);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to