Changeset: f9df9cfbcdea for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f9df9cfbcdea Modified Files: sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_gencode.h sql/common/sql_backend.c sql/common/sql_backend.h sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_psm.c sql/storage/store.c Branch: privfuncs Log Message:
Functions have many boolean properties. Pack them diffs (200 lines): diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -984,7 +984,7 @@ monet5_freecode(const char *mod, int cli /* the function 'f' may not have the 'imp' field set yet */ int -monet5_resolve_function(ptr M, sql_func *f, const char *fimp, bit *side_effect) +monet5_resolve_function(ptr M, sql_func *f, const char *fimp, bool *side_effect) { Client c; Module m; @@ -1016,7 +1016,7 @@ monet5_resolve_function(ptr M, sql_func int argc = sig->argc - sig->retc, nfargs = list_length(f->ops), nfres = list_length(f->res); if ((sig->varargs & VARARGS) == VARARGS || f->vararg || f->varres) { - *side_effect = (bit) s->def->unsafeProp; + *side_effect = (bool) s->def->unsafeProp; MT_lock_unset(&sql_gencodeLock); return 1; } else if (nfargs == argc && (nfres == sig->retc || (sig->retc == 1 && (IS_FILT(f) || IS_PROC(f))))) { @@ -1053,7 +1053,7 @@ monet5_resolve_function(ptr M, sql_func } } if (all_match)*/ - *side_effect = (bit) s->def->unsafeProp; + *side_effect = (bool) s->def->unsafeProp; MT_lock_unset(&sql_gencodeLock); return 1; } @@ -1145,7 +1145,7 @@ int backend_create_mal_func(mvc *m, sql_func *f) { char *F = NULL, *fn = NULL; - bit old_side_effect = f->side_effect, new_side_effect = 0; + bool old_side_effect = f->side_effect, new_side_effect = 0; int clientid = m->clientid; str fimp = NULL; diff --git a/sql/backends/monet5/sql_gencode.h b/sql/backends/monet5/sql_gencode.h --- a/sql/backends/monet5/sql_gencode.h +++ b/sql/backends/monet5/sql_gencode.h @@ -21,7 +21,7 @@ extern int backend_dumpproc(backend *be, extern int backend_dumpstmt(backend *be, MalBlkPtr mb, sql_rel *r, int top, int addend, const char *query); extern int monet5_has_module(ptr M, char *module); extern void monet5_freecode(const char *mod, int clientid, const char *name); -extern int monet5_resolve_function(ptr M, sql_func *f, const char *fimp, bit *side_effect); +extern int monet5_resolve_function(ptr M, sql_func *f, const char *fimp, bool *side_effect); extern int backend_create_mal_func(mvc *m, sql_func *f); extern int backend_create_subfunc(backend *be, sql_subfunc *f, list *ops); diff --git a/sql/common/sql_backend.c b/sql/common/sql_backend.c --- a/sql/common/sql_backend.c +++ b/sql/common/sql_backend.c @@ -99,7 +99,7 @@ backend_schema_user_dependencies(ptr tra } int -backend_resolve_function(ptr M, sql_func *f, const char *fimp, bit *side_effect) +backend_resolve_function(ptr M, sql_func *f, const char *fimp, bool *side_effect) { if (be_funcs.fresolve_function != NULL) return be_funcs.fresolve_function(M, f, fimp, side_effect); diff --git a/sql/common/sql_backend.h b/sql/common/sql_backend.h --- a/sql/common/sql_backend.h +++ b/sql/common/sql_backend.h @@ -24,7 +24,7 @@ typedef int (*alter_user_fptr) (ptr mvc typedef int (*rename_user_fptr) (ptr mvc, str olduser, str newuser); typedef void* (*schema_user_dependencies) (ptr mvc, int schema_id); typedef void (*create_function) (ptr mvc, str name, sql_rel *rel, sql_table *t); -typedef int (*resolve_function) (ptr mvc, sql_func *f, const char *fimp, bit *side_effect); +typedef int (*resolve_function) (ptr mvc, sql_func *f, const char *fimp, bool *side_effect); typedef int (*has_module_function) (ptr mvc, char *name); typedef void *(*create_sub_backend) (void *mvc, void *client); @@ -54,7 +54,7 @@ extern int backend_schema_has_user(ptr extern int backend_alter_user(ptr mvc, str user, str passwd, char enc, sqlid schema_id, char *schema_path, str oldpasswd); extern int backend_rename_user(ptr mvc, str olduser, str newuser); extern void* backend_schema_user_dependencies(ptr trans, sqlid schema_id); -extern int backend_resolve_function(ptr trans, sql_func *f, const char *fimp, bit *side_effect); +extern int backend_resolve_function(ptr trans, sql_func *f, const char *fimp, bool *side_effect); extern int backend_has_module(ptr M, char *name); extern backend_functions be_funcs; diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -660,8 +660,12 @@ sql_create_func_(sql_allocator *sa, cons list_append(funcs, t); /* grouping aggregate doesn't have a backend */ - if (strlen(imp) != 0 && strlen(mod) != 0) - backend_resolve_function(&(int){0}, t, t->imp, &(t->side_effect)); /* backend_resolve_function sets 'side_effect' flag */ + if (strlen(imp) != 0 && strlen(mod) != 0) { + bool se = t->side_effect; + int res = backend_resolve_function(&(int){0}, t, t->imp, &se); /* backend_resolve_function sets 'side_effect' flag */ + t->side_effect = se; + assert(res); + } return t; } 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 @@ -492,12 +492,13 @@ typedef struct sql_func { list *res; /* list of results */ sql_flang lang; char *query; /* sql code */ - bit semantics; /*When set to true, function incorporates some kind of null semantics.*/ - bit side_effect; - bit varres; /* variable output result */ - bit vararg; /* variable input arguments */ - bit system; /* system function */ - bit instantiated; /* if the function is instantiated */ + bool + semantics:1, /* When set to true, function incorporates some kind of null semantics */ + side_effect:1, /* if the function has side-effects */ + varres:1, /* variable output result */ + vararg:1, /* variable input arguments */ + system:1, /* system function */ + instantiated:1; /* if the function is instantiated */ int fix_scale; /* SCALE_NOFIX/SCALE_NONE => nothing diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -1018,8 +1018,10 @@ rel_create_func(sql_query *query, dlist break; } /* instantiate MAL functions while being created. This also sets the side-effects flag */ - if (!backend_resolve_function(&clientid, f, fnme, &(f->side_effect))) + bool se = f->side_effect; + if (!backend_resolve_function(&clientid, f, fnme, &se)) return sql_error(sql, 02, SQLSTATE(3F000) "CREATE %s: external name %s.%s not bound (%s.%s)", F, fmod, fnme, s->base.name, fname ); + f->side_effect = se; f->instantiated = TRUE; } else if (!sf) { return sql_error(sql, 01, SQLSTATE(42000) "CREATE %s: external name %s.%s not bound (%s.%s)", F, fmod, fnme, s->base.name, fname ); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -926,11 +926,11 @@ 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->instantiated = 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); - t->side_effect = (bit) store->table_api.column_find_bte(tr, find_sql_column(funcs, "side_effect"), rid); - 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->side_effect = (bool) store->table_api.column_find_bte(tr, find_sql_column(funcs, "side_effect"), rid); + t->varres = (bool) store->table_api.column_find_bte(tr, find_sql_column(funcs, "varres"), rid); + t->vararg = (bool) store->table_api.column_find_bte(tr, find_sql_column(funcs, "vararg"), rid); + t->system = (bool) store->table_api.column_find_bte(tr, find_sql_column(funcs, "system"), rid); + t->semantics = (bool) store->table_api.column_find_bte(tr, find_sql_column(funcs, "semantics"), rid); t->res = NULL; t->s = s; t->fix_scale = SCALE_EQ; @@ -1453,8 +1453,9 @@ insert_functions(sql_trans *tr, sql_tabl sql_func *f = n->data; int number = 0, ftype = (int) f->type, flang = (int) FUNC_LANG_INT; sqlid next_schema = f->s ? f->s->base.id : 0; - - if ((res = store->table_api.table_insert(tr, sysfunc, &f->base.id, &f->base.name, &f->imp, &f->mod, &flang, &ftype, &f->side_effect, &f->varres, &f->vararg, &next_schema, &f->system, &f->semantics))) + bit se = f->side_effect, vares = f->varres, varg = f->vararg, system = f->system, sem = f->semantics; + + if ((res = store->table_api.table_insert(tr, sysfunc, &f->base.id, &f->base.name, &f->imp, &f->mod, &flang, &ftype, &se, &vares, &varg, &next_schema, &system, &sem))) return res; if (f->res && (res = insert_args(tr, sysarg, f->res, f->base.id, "res_%d", &number))) return res; @@ -4898,6 +4899,7 @@ sql_trans_create_func(sql_func **fres, s sql_table *sysarg = find_sql_table(tr, find_sql_schema(tr, "sys"), "args"); node *n; int number = 0, ftype = (int) type, flang = (int) lang, res = LOG_OK; + bit semantics = TRUE; sql_func *t = SA_ZNEW(tr->sa, sql_func); base_init(tr->sa, &t->base, next_oid(tr->store), true, func); @@ -4907,7 +4909,7 @@ sql_trans_create_func(sql_func **fres, s t->type = type; t->lang = lang; t->instantiated = lang != FUNC_LANG_SQL && lang != FUNC_LANG_MAL; - t->semantics = TRUE; + t->semantics = semantics; t->side_effect = side_effect; t->varres = varres; t->vararg = vararg; @@ -4926,8 +4928,8 @@ sql_trans_create_func(sql_func **fres, s if ((res = os_add(s->funcs, tr, t->base.name, &t->base))) return res; - if ((res = store->table_api.table_insert(tr, sysfunc, &t->base.id, &t->base.name, query?(char**)&query:&t->imp, &t->mod, &flang, &ftype, &t->side_effect, - &t->varres, &t->vararg, &s->base.id, &t->system, &t->semantics))) + if ((res = store->table_api.table_insert(tr, sysfunc, &t->base.id, &t->base.name, query?(char**)&query:&t->imp, &t->mod, &flang, &ftype, &side_effect, + &varres, &vararg, &s->base.id, &system, &semantics))) return res; if (t->res) for (n = t->res->h; n; n = n->next, number++) { sql_arg *a = n->data; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org