Changeset: 23e1231ada99 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23e1231ada99
Modified Files:
        monetdb5/modules/atoms/uuid.mal
        sql/storage/store.c
Branch: Aug2018
Log Message:

fixes for bug 6645, ie make sure we call uuid per row (do not reduce
the number of calls using any of the common expression optimizers)


diffs (49 lines):

diff --git a/monetdb5/modules/atoms/uuid.mal b/monetdb5/modules/atoms/uuid.mal
--- a/monetdb5/modules/atoms/uuid.mal
+++ b/monetdb5/modules/atoms/uuid.mal
@@ -13,10 +13,15 @@ command write() address UUIDwrite;
 command prelude():void address UUIDprelude;
 uuid.prelude();
 
-command new() :uuid
+# unsafe is to prevent optimizers to reuse common expressions
+unsafe command new() :uuid
 address UUIDgenerateUuid
 comment "Generate a new uuid";
 
+unsafe command new(d:int) :uuid
+address UUIDgenerateUuid
+comment "Generate a new uuid (dummy version for side effect free multiplex 
loop)";
+
 command uuid(s:str):uuid
 address UUIDstr2uuid
 comment "Coerce a string to a uuid, validating its format";
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -808,6 +808,7 @@ load_func(sql_trans *tr, sql_schema *s, 
        }
        if (t->type == F_FUNC && !t->res)
                t->type = F_PROC;
+       t->side_effect = (t->type==F_FILT || (t->res && (t->lang==FUNC_LANG_SQL 
|| !list_empty(t->ops))))?FALSE:TRUE;
        return t;
 }
 
@@ -4171,7 +4172,7 @@ create_sql_func(sql_allocator *sa, const
        t->type = type;
        t->lang = lang;
        t->sql = (lang==FUNC_LANG_SQL||lang==FUNC_LANG_MAL);
-       t->side_effect = (type==F_FILT||res)?FALSE:TRUE;
+       t->side_effect = (type==F_FILT || (res && (lang==FUNC_LANG_SQL || 
!list_empty(args))))?FALSE:TRUE;
        t->varres = varres;
        t->vararg = vararg;
        t->ops = args;
@@ -4199,7 +4200,7 @@ sql_trans_create_func(sql_trans *tr, sql
        t->type = type;
        t->lang = lang;
        t->sql = (lang==FUNC_LANG_SQL||lang==FUNC_LANG_MAL);
-       se = t->side_effect = (type==F_FILT||res)?FALSE:TRUE;
+       se = t->side_effect = (type==F_FILT || (res && (lang==FUNC_LANG_SQL || 
!list_empty(args))))?FALSE:TRUE;
        t->varres = varres;
        t->vararg = vararg;
        t->ops = sa_list(tr->sa);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to