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

Reply via email to