MonetDB: default - disabled until ceptipede matures...
Changeset: 7112dfe7e934 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7112dfe7e934 Modified Files: sql/test/centipede/Tests/All Branch: default Log Message: disabled until ceptipede matures... diffs (6 lines): diff --git a/sql/test/centipede/Tests/All b/sql/test/centipede/Tests/All --- a/sql/test/centipede/Tests/All +++ b/sql/test/centipede/Tests/All @@ -1,1 +1,1 @@ -NOT_WIN32?olap +#NOT_WIN32?olap ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jan2014 - fixed bugs 3505 and 3511
Changeset: 516d270cbe32 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=516d270cbe32 Added Files: sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.sql sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.stable.err sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.stable.out sql/test/BugTracker-2014/Tests/bug_in_cse.Bug-3511.sql sql/test/BugTracker-2014/Tests/bug_in_cse.Bug-3511.stable.err sql/test/BugTracker-2014/Tests/bug_in_cse.Bug-3511.stable.out Modified Files: sql/server/rel_exp.c sql/test/BugTracker-2014/Tests/All Branch: Jan2014 Log Message: fixed bugs 3505 and 3511 diffs (truncated from 308 to 300 lines): diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -738,6 +738,24 @@ exp_match_list( list *l, list *r) return match; } +static int +exps_equal( list *l, list *r) +{ + node *n, *m; + + if (!l || !r) + return l == r; + if (list_length(l) != list_length(r)) + return 0; + for (n = l->h, m = r->h; n && m; n = n->next, m = m->next) { + sql_exp *le = n->data, *re = m->data; + + if (!exp_match_exp(le,re)) + return 0; + } + return 1; +} + int exp_match_exp( sql_exp *e1, sql_exp *e2) { @@ -769,15 +787,15 @@ exp_match_exp( sql_exp *e1, sql_exp *e2) break; case e_aggr: if (!subaggr_cmp(e1->f, e2->f) && /* equal aggregation*/ - exp_match_list(e1->l, e2->l) && + exps_equal(e1->l, e2->l) && e1->flag == e2->flag) return 1; break; case e_func: if (!subfunc_cmp(e1->f, e2->f) && /* equal functions */ - exp_match_list(e1->l, e2->l) && + exps_equal(e1->l, e2->l) && /* optional order by expressions */ - exp_match_list(e1->r, e2->r)) + exps_equal(e1->r, e2->r)) return 1; break; case e_atom: diff --git a/sql/test/BugTracker-2014/Tests/All b/sql/test/BugTracker-2014/Tests/All --- a/sql/test/BugTracker-2014/Tests/All +++ b/sql/test/BugTracker-2014/Tests/All @@ -18,7 +18,9 @@ in_incorrect_multi.Bug-3462 crash_on_groupby_distinct_serial.Bug-3463 local-temp-1.Bug-3468 local-temp-2.Bug-3468 +boolean_not.Bug-3505 varchar_conversion_crash.Bug-3506 +bug_in_cse.Bug-3511 stringfloatshtcompare.Bug-3512 oid-table-assert.Bug-3514 round-properties.Bug-3515 diff --git a/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.sql b/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.sql @@ -0,0 +1,16 @@ +start transaction; +CREATE TABLE BOOLTBL1 (f1 bool); +INSERT INTO BOOLTBL1 (f1) VALUES (cast('true' AS boolean)); +INSERT INTO BOOLTBL1 (f1) VALUES ('true'); +INSERT INTO BOOLTBL1 (f1) VALUES ('false'); + +SELECT f1 FROM BOOLTBL1 WHERE f1 = NOT FALSE; +SELECT f1 FROM BOOLTBL1 WHERE f1 = NOT TRUE; + +SELECT f1 FROM BOOLTBL1 WHERE f1 = (NOT FALSE); +SELECT f1 FROM BOOLTBL1 WHERE NOT FALSE = f1; +SELECT f1 FROM BOOLTBL1 WHERE NOT f1 = FALSE; + +SELECT f1 FROM BOOLTBL1 WHERE f1 = (NOT TRUE); +SELECT f1 FROM BOOLTBL1 WHERE NOT TRUE = f1; +SELECT f1 FROM BOOLTBL1 WHERE NOT f1 = TRUE; diff --git a/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.stable.err b/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/boolean_not.Bug-3505.stable.err @@ -0,0 +1,35 @@ +stderr of test 'boolean_not.Bug-3505` in directory 'sql/test/BugTracker-2014` itself: + + +# 19:06:47 > +# 19:06:47 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38042" "--set" "mapi_usock=/var/tmp/mtest-25685/.s.monetdb.38042" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2014" "--set" "mal_listing=0" +# 19:06:47 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 5 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 38042 +# cmdline opt mapi_usock = /var/tmp/mtest-25685/.s.monetdb.38042 +# cmdline opt monet_prompt = +# c
MonetDB: Jan2014 - fixed bug 3523 (which also fixed 3526). Make ...
Changeset: 39b41810dc43 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39b41810dc43 Added Files: sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.sql sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.err sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out sql/test/BugTracker-2014/Tests/unsafe_project_push_down.Bug-3523.sql sql/test/BugTracker-2014/Tests/unsafe_project_push_down.Bug-3523.stable.err sql/test/BugTracker-2014/Tests/unsafe_project_push_down.Bug-3523.stable.out Modified Files: sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/test/BugTracker-2014/Tests/All Branch: Jan2014 Log Message: fixed bug 3523 (which also fixed 3526). Make sure we only push down a project without window functions diffs (truncated from 305 to 300 lines): diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1159,6 +1159,33 @@ exp_has_func( sql_exp *e ) return 0; } +int +exp_unsafe( sql_exp *e) +{ + if (!e) + return 0; + + if (e->type != e_func && e->type != e_convert) + return 0; + + if (e->type == e_func && e->card == CARD_AGGR) + return 1; + if (e->type == e_convert && e->l) + return exp_unsafe(e->l); + if (e->type == e_func && e->l) { + list *args = e->l; + node *n; + + for(n = args->h; n; n = n->next) { + sql_exp *e = n->data; + + if (exp_unsafe(e)) + return 1; + } + } + return 0; +} + static int exp_key( sql_exp *e ) { diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -113,6 +113,7 @@ extern int exp_is_join_exp(sql_exp *e); extern int exp_is_atom(sql_exp *e); extern int exps_are_atoms(list *exps); extern int exp_has_func(sql_exp *e); +extern int exp_unsafe(sql_exp *e); extern int rel_has_exp(sql_rel *rel, sql_exp *e); extern sql_rel *find_rel(list *rels, sql_exp *e); @@ -130,4 +131,5 @@ extern int exps_intern(list *exps); extern char *compare_func( comp_type t ); extern int is_identity( sql_exp *e, sql_rel *r); + #endif /* _REL_EXP_H_ */ diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -1292,7 +1292,7 @@ project_unsafe(sql_rel *rel) sql_exp *e = n->data; /* aggr func in project ! */ - if (e->type == e_func && e->card == CARD_AGGR) + if (exp_unsafe(e)) return 1; } return 0; diff --git a/sql/test/BugTracker-2014/Tests/All b/sql/test/BugTracker-2014/Tests/All --- a/sql/test/BugTracker-2014/Tests/All +++ b/sql/test/BugTracker-2014/Tests/All @@ -23,4 +23,6 @@ stringfloatshtcompare.Bug-3512 oid-table-assert.Bug-3514 round-properties.Bug-3515 union_with_subqueries.Bug-3518 +unsafe_project_push_down.Bug-3523 non_groupby_column.Bug-3524 +orderby_count.Bug-3526 diff --git a/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.sql b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.sql @@ -0,0 +1,9 @@ +start transaction; +create table a (k varchar(64),v boolean); +insert into a values ('one',true),('two',false),('one',false); +create table b (k varchar(64)); +insert into b values ('two'),('two'),('two'); +select * from a; +select * from b; +select k, v from a union all select k,NULL from b; +select k,count(*),count(v) from (select k,v from a union all select k,null from b) as t(k,v) group by k order by count(*) desc; diff --git a/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.err b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.err @@ -0,0 +1,35 @@ +stderr of test 'orderby_count.Bug-3526` in directory 'sql/test/BugTracker-2014` itself: + + +# 17:12:12 > +# 17:12:12 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33631" "--set" "mapi_usock=/var/tmp/mtest-917/.s.monetdb.33631" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2014" "--set" "mal_listing=0" +# 17:12:12 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 5 +# builtin opt mapi_open = false +# builtin opt mapi_autosense
MonetDB: default - fix manifold for fixed sized, external types
Changeset: dd2ab2bc72e9 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd2ab2bc72e9 Modified Files: gdk/gdk_cross.c monetdb5/modules/mal/manifold.c monetdb5/optimizer/opt_support.c Branch: default Log Message: fix manifold for fixed sized, external types diffs (98 lines): diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -63,6 +63,8 @@ BATcross1(BAT **r1p, BAT **r2p, BAT *l, bn2->tdense = bn2->tkey != 0; bn2->T->nil = 0; bn2->T->nonil = 1; + BATseqbase(BATmirror(bn1), l->hseqbase); + BATseqbase(BATmirror(bn2), r->hseqbase); *r1p = bn1; *r2p = bn2; return GDK_SUCCEED; 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 @@ -72,12 +72,16 @@ typedef struct{ if (msg)\ break; \ for( i = mut->fvar; i<= mut->lvar; i++) { \ - if(!ATOMvarsized(mut->args[i].type)){ \ + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] += mut->args[i].size; \ - } else {\ + } else if (ATOMvarsized(mut->args[i].type)) { \ mut->args[i].o++; \ mut->args[i].s = (str *) BUNtail(mut->args[i].bi, mut->args[i].o); \ args[i] = (void*) &mut->args[i].s; \ + } else { \ + mut->args[i].o++; \ + mut->args[i].s = (str *) Tloc(mut->args[i].b, mut->args[i].o); \ + args[i] = (void*) &mut->args[i].s; \ } \ } \ v++;\ @@ -102,11 +106,15 @@ default:\ break; \ bunfastapp(mut->args[0].b, (void*) y); \ for( i = mut->fvar; i<= mut->lvar; i++) { \ - if(!ATOMvarsized(mut->args[i].type)){ \ + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] += mut->args[i].size; \ + } else if(ATOMvarsized(mut->args[i].type)){ \ + mut->args[i].o++; \ + mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o);\ + args[i] = (void*) & mut->args[i].s;\ } else {\ mut->args[i].o++; \ - mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o);\ + mut->args[i].s = (str*) Tloc(mut->args[i].b, mut->args[i].o);\ args[i] = (void*) & mut->args[i].s;\ } \ } \ @@ -130,10 +138,13 @@ MANIFOLDjob(MULTItask *mut) // the mod.fcn arguments are ignored from the call for( i = mut->pci->retc+2; i< mut->pci->argc; i++) { if ( mut->args[i].b ){ - if (!ATOMvarsized(mut->args[i].type)) { + if(ATOMstorage(mut->args[i].type) < TYPE_str){ \ args[i] = (char*) mut->args[i].first; + } else if(ATOMvarsized(mut->args[i].type)){ \ + mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); + args[i] = (void*) & mut->args[i].s; } else { - mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); + mut->args[i].s = (str*) Tloc(mut->args[i].b, mut->args[i].o); args[i] = (void*) & mut->args[i].s; } } else { @@ -307,7 +318,7 @@ MANIFOLDevaluate(Client cntxt, MalBlkPtr freeInstruction(mut.pci); // consolidate the properties - if (!ATOMvarsized(mat[0].b->ttype)) + if (ATOMstorage(mat[0].b->ttype) < TYPE_str) BATsetcount(mat[0].b,cnt); BATsettrivprop(mat[0].b); BATderiveProps(mat[0].b, TRUE); 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 @@ -840,6 +840,7 @@ int isAllScalar(MalBlkPtr mb, InstrPtr p int isM
MonetDB: Jan2014 - fixed bug 3524, ie improved error message for...
Changeset: 8e2e4bcad4bb for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8e2e4bcad4bb Added Files: sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.sql sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.stable.err sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.stable.out Modified Files: sql/server/rel_select.c sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err sql/test/BugTracker-2014/Tests/All Branch: Jan2014 Log Message: fixed bug 3524, ie improved error message for using non group by columns in group by result diffs (147 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1771,8 +1771,12 @@ rel_column_ref(mvc *sql, sql_rel **rel, } if (!exp && var) return rel_var_ref(sql, name, 0); - if (!exp && !var) - return sql_error(sql, 02, "SELECT: identifier '%s' unknown", name); + if (!exp && !var) { + if (rel && *rel && (*rel)->card == CARD_AGGR && f == sql_sel) + return sql_error(sql, 02, "SELECT: cannot use non GROUP BY column '%s' in query results without an aggregate function", name); + else + return sql_error(sql, 02, "SELECT: identifier '%s' unknown", name); + } } else if (dlist_length(l) == 2) { char *tname = l->h->data.sval; @@ -1795,8 +1799,12 @@ rel_column_ref(mvc *sql, sql_rel **rel, exp = rel_bind_column(sql, *rel, cname, f); } } - if (!exp) - return sql_error(sql, 02, "42S22!SELECT: no such column '%s.%s'", tname, cname); + if (!exp) { + if (rel && *rel && (*rel)->card == CARD_AGGR && f == sql_sel) + return sql_error(sql, 02, "SELECT: cannot use non GROUP BY column '%s.%s' in query results without an aggregate function", tname, cname); + else + return sql_error(sql, 02, "42S22!SELECT: no such column '%s.%s'", tname, cname); + } } else if (dlist_length(l) >= 3) { return sql_error(sql, 02, "TODO: column names of level >= 3"); } diff --git a/sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err b/sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err --- a/sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err +++ b/sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err @@ -28,9 +28,9 @@ stderr of test 'cannot_use_columns_after # 20:54:49 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-27846" "--port=35773" # 20:54:49 > -MAPI = (monetdb) /var/tmp/mtest-27846/.s.monetdb.35773 +MAPI = (monetdb) /var/tmp/mtest-5110/.s.monetdb.34599 QUERY = select "function", (sum(fv.claim_tb) - sum(fv.used_tb)) * 100 / toc.total_overcapacity from sys.filer_volumes as fv, (select sum(claim_tb) - sum(used_tb) as total_overcapacity from sys.filer_volumes) as toc group by fv."function" order by fv."function"; -ERROR = !SELECT: no such column 'toc.total_overcapacity' +ERROR = !SELECT: cannot use non GROUP BY column 'toc.total_overcapacity' in query results without an aggregate function # 20:54:49 > # 20:54:49 > "Done." diff --git a/sql/test/BugTracker-2014/Tests/All b/sql/test/BugTracker-2014/Tests/All --- a/sql/test/BugTracker-2014/Tests/All +++ b/sql/test/BugTracker-2014/Tests/All @@ -23,3 +23,4 @@ stringfloatshtcompare.Bug-3512 oid-table-assert.Bug-3514 round-properties.Bug-3515 union_with_subqueries.Bug-3518 +non_groupby_column.Bug-3524 diff --git a/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.sql b/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.sql @@ -0,0 +1,4 @@ +start transaction; + +create table agg_error (a bool, b bool); +select max(a), b from agg_error group by a; diff --git a/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.stable.err b/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2014/Tests/non_groupby_column.Bug-3524.stable.err @@ -0,0 +1,38 @@ +stderr of test 'non_groupby_column.Bug-3524` in directory 'sql/test/BugTracker-2014` itself: + + +# 11:15:00 > +# 11:15:00 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=32287" "--set" "mapi_usock=/var/tmp/mtest-4352/.s.monetdb.32287" "--set" "monet_prompt=" "--force
MonetDB: default - merged
Changeset: 38ca25bf505a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=38ca25bf505a Modified Files: monetdb5/modules/mal/mal_init.mal Branch: default Log Message: merged diffs (11 lines): diff --git a/monetdb5/modules/mal/mal_init.mal b/monetdb5/modules/mal/mal_init.mal --- a/monetdb5/modules/mal/mal_init.mal +++ b/monetdb5/modules/mal/mal_init.mal @@ -47,7 +47,6 @@ include status; include groupby; include group; include aggr; -include array; include mkey; # Atom extensions ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - manifold should also work on external/varsize...
Changeset: 123fa0b0a7b0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=123fa0b0a7b0 Modified Files: monetdb5/modules/mal/manifold.c Branch: default Log Message: manifold should also work on external/varsized types diffs (152 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 @@ -30,12 +30,15 @@ /* The default iterator over known scalar commands. * It can be less efficient then the vector based implementations, * but saves quite some hacking in non-essential cases or - * expensive user defined functions.. + * expensive user defined functions. * * To keep things simple and reasonably performant we limit the * implementation to those cases where a single BAT is returned. * Arguments may be of any type. The MAL signature should be a COMMAND. * + * The functionality has been extended to also perform the manifold + * over aligned BATs, provided the underlying scalar function carries + * the 'manifold' property. */ typedef struct{ @@ -69,10 +72,10 @@ typedef struct{ 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;\ - } else {\ - mut->args[i].o++; \ + if(!ATOMvarsized(mut->args[i].type)){ \ + args[i] += mut->args[i].size; \ + } else {\ + mut->args[i].o++; \ mut->args[i].s = (str *) BUNtail(mut->args[i].bi, mut->args[i].o); \ args[i] = (void*) &mut->args[i].s; \ } \ @@ -92,13 +95,14 @@ 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: \ +default:\ for( ; p< q ; p += mut->args[mut->fvar].size){ \ msg = (*mut->pci->fcn)(&y, __VA_ARGS__);\ if (msg)\ break; \ bunfastapp(mut->args[0].b, (void*) y); \ for( i = mut->fvar; i<= mut->lvar; i++) { \ - if( ATOMstorage(mut->args[i].type) != TYPE_str){\ + if(!ATOMvarsized(mut->args[i].type)){ \ args[i] += mut->args[i].size; \ } else {\ mut->args[i].o++; \ @@ -107,9 +111,6 @@ case TYPE_str: \ } \ } \ } \ - break; \ -default: \ - msg= createException(MAL,"mal.manifold","manifold call limitation (unknown type?) ");\ } // single argument is preparatory step for GDK_mapreduce @@ -127,16 +128,18 @@ MANIFOLDjob(MULTItask *mut) throw(MAL,"mal.manifold",MAL_MALLOC_FAIL); // the mod.fcn arguments are ignored from the call - for( i = mut->pci->retc+2; i< mut->pci->argc; i++) - if ( mut->args[i].b ){ - if ( ATOMstorage(mut->args[i].type) != TYPE_str) - args[i] = (char*) mut->args[i].first; - else { - mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); - args[i] = (void*) & mut->args[i].s; + for( i = mut->pci->retc+2; i< mut->pci->argc; i++) { + if ( mut->args[i].b ){ + if (!ATOMvarsized(mut->args[i].type)) { + args[i] = (char*) mut->args[i].first; + } else { + mut->args[i].s = (str*) BUNtail(mut->args[i].bi, mut->args[i].o); + args[i] = (void*) & mut->args[i].s; + } + } else { + args[i] = (char*) getArgReference(mut->stk,mut->pci,i); } - } else - args[i] = (char*) getArgReference(mut->stk,mut->pci,i); + } #ifdef _DEBUG_MANIFOLD_ mnstr_printf(mut->cntxt->fdout,"#MANIFOLDjob fvar %d lvar %d type %d\n",mut->fvar,mut->lvar, ATOMstorage(mut->args[mut->fvar].b->ttype)); @@ -168,29 +171,27 @@ MANIFOLDty