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