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