Changeset: 9a586a10cd6a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9a586a10cd6a
Modified Files:
        monetdb5/modules/mal/manifold.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_support.c
Branch: default
Log Message:

more manifold fixing, don't use a lastmsg at all. Directly break on errors (sql 
semantics).


diffs (98 lines):

diff --git a/monetdb5/modules/mal/manifold.c b/monetdb5/modules/mal/manifold.c
--- a/monetdb5/modules/mal/manifold.c
+++ b/monetdb5/modules/mal/manifold.c
@@ -66,9 +66,8 @@ typedef struct{
        Type *v = (Type*) mut->args[0].first;           \
        for( ; p<q ; p += mut->args[mut->fvar].size){   \
                msg = (*mut->pci->fcn)(v, __VA_ARGS__); \
-               if (lastmsg)                            \
-                       GDKfree(msg);                   \
-               lastmsg = msg;                          \
+               if (msg)                                \
+                       break;                          \
                for( i = mut->fvar; i<= mut->lvar; i++) {       \
                        if( ATOMstorage(mut->args[i].type) != TYPE_str){ \
                                args[i] += mut->args[i].size;            \
@@ -93,22 +92,23 @@ case TYPE_oid: ManifoldLoop(oid,__VA_ARG
 case TYPE_flt: ManifoldLoop(flt,__VA_ARGS__); break;\
 case TYPE_dbl: ManifoldLoop(dbl,__VA_ARGS__); break;\
 case TYPE_str: \
-       for( ; p< q ; p += mut->args[mut->fvar].size){\
-               msg = (*mut->pci->fcn)(&y, __VA_ARGS__);\
-               bunfastins(mut->args[0].b, (void*) 0, (void*) y);\
-               if( msg == MAL_SUCCEED && y) GDKfree(y);\
-               if( lastmsg) GDKfree(msg); lastmsg = msg; \
-               for( i = mut->fvar; i<= mut->lvar; i++)\
-               if( ATOMstorage(mut->args[i].type) !=  TYPE_str){\
-                       args[i] += mut->args[i].size;\
-               } else {\
-                       mut->args[i].s = (str*) BUNtail(mut->args[i].bi, 
mut->args[i].o);\
-                       args[i] =  (void*) & mut->args[i].s; \
-                       mut->args[i].o++;\
-               }\
-       }\
-       break;\
-default:\
+       for( ; p< q ; p += mut->args[mut->fvar].size){          \
+               msg = (*mut->pci->fcn)(&y, __VA_ARGS__);        \
+               if (msg)                                        \
+                       break;                                  \
+               bunfastins(mut->args[0].b, (void*) 0, (void*) y);       \
+               for( i = mut->fvar; i<= mut->lvar; i++) {       \
+                       if( ATOMstorage(mut->args[i].type) !=  TYPE_str){\
+                               args[i] += mut->args[i].size;   \
+                       } else {                                \
+                               mut->args[i].s = (str*) 
BUNtail(mut->args[i].bi, mut->args[i].o);\
+                               args[i] =  (void*) & mut->args[i].s;    \
+                               mut->args[i].o++;               \
+                       }                                       \
+               }                                               \
+       }                                                       \
+       break;                                                  \
+default:                                                       \
        msg= createException(MAL,"mal.manifold","manifold call limitation 
(unknown type?) ");\
 }
 
@@ -120,7 +120,7 @@ MANIFOLDjob(MULTItask *mut)
 {      int i;
        char *p, *q;
        char **args;
-       str y, lastmsg = MAL_SUCCEED, msg= MAL_SUCCEED;
+       str y, msg= MAL_SUCCEED;
 
        args = (char**) GDKzalloc(sizeof(char*) * mut->pci->argc);
        if( args == NULL)
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -159,7 +159,7 @@ opt_export  str min_no_nilRef;
 opt_export  str minRef;
 opt_export  str subminRef;
 opt_export  str mirrorRef;
-opt_export     str mitosisRef;
+opt_export  str mitosisRef;
 opt_export  str mkeyRef;
 opt_export  str mmathRef;
 opt_export  str multiplexRef;
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -710,6 +710,9 @@ hasSideEffects(InstrPtr p, int strict)
        if (getFunctionId(p) == depositRef)
                return TRUE;
 
+       if (getModuleId(p) == malRef && getFunctionId(p) == multiplexRef)
+               return FALSE;
+
        if( getModuleId(p) == ioRef ||
                getModuleId(p) == streamsRef ||
                getModuleId(p) == bstreamRef ||
@@ -722,7 +725,7 @@ hasSideEffects(InstrPtr p, int strict)
                getModuleId(p) == semaRef ||
                getModuleId(p) == recycleRef ||
                getModuleId(p) == alarmRef)
-                       return TRUE;
+               return TRUE;
 
        if (getModuleId(p) == sqlRef){
                if (getFunctionId(p) == tidRef) return FALSE;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to