Changeset: 4a23b15ad16b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4a23b15ad16b
Modified Files:
        monetdb5/modules/kernel/arrays.c
        monetdb5/modules/mal/Makefile.ag
        monetdb5/modules/mal/batcalc.c
        sql/backends/monet5/sql_gencode.c
Branch: arrays
Log Message:

batcal.lng for arrays + extra arguments in mal.multiplex


diffs (150 lines):

diff --git a/monetdb5/modules/kernel/arrays.c b/monetdb5/modules/kernel/arrays.c
--- a/monetdb5/modules/kernel/arrays.c
+++ b/monetdb5/modules/kernel/arrays.c
@@ -946,7 +946,8 @@ str ALGprojectDimension(bat* result, con
 
 str ALGprojectNonDimension(bat *result, const bat *vals, const ptr *array) {
        const gdk_array *dimsCands = arrayCopy((gdk_array*)*array); 
//candidates exactly the same to the array
-       
+
+       //empty cands so that it will project all cells 
        BAT *oidsCandsBAT = newempty("ALGprojectNonDimension");
        bat oidsCands = oidsCandsBAT->batCacheid;
 
diff --git a/monetdb5/modules/mal/Makefile.ag b/monetdb5/modules/mal/Makefile.ag
--- a/monetdb5/modules/mal/Makefile.ag
+++ b/monetdb5/modules/mal/Makefile.ag
@@ -49,7 +49,8 @@ lib_mal = {
                zorder.c zorder.h \
                sample.c sample.h \
                json_util.c json_util.h \
-               calc.c batcalc.c
+               calc.c batcalc.c \
+               calc_arrays.h calc_arrays.c
 }
 
 headers_mal = {
@@ -71,7 +72,7 @@ headers_mal = {
 headers_auto = {
        HEADERS = mal
        DIR = libdir/monetdb5/autoload
-       SOURCES = 01_calc.mal 01_batcalc.mal
+       SOURCES = 01_calc.mal 01_batcalc.mal calc_arrays.mal
 }
 
 headers_hge = {
@@ -89,7 +90,7 @@ EXTRA_DIST = batExtensions.mal iterator.
        transaction.mal txtsim.mal tablet.mal tablet.h sample.mal json_util.mal 
\
        mal_mapi.mal mat.mal tokenizer.mal \
        batmtime.mal querylog.mal sysmon.mal \
-       01_calc.mal 01_batcalc.mal \
+       01_calc.mal 01_batcalc.mal  calc_arrays.mal \
        00_calc_hge.mal 00_batcalc_hge.mal \
        00_iterator_hge.mal 00_language_hge.mal \
        00_mal_mapi_hge.mal 00_mkey_hge.mal 00_batExtensions_hge.mal
diff --git a/monetdb5/modules/mal/batcalc.c b/monetdb5/modules/mal/batcalc.c
--- a/monetdb5/modules/mal/batcalc.c
+++ b/monetdb5/modules/mal/batcalc.c
@@ -8,7 +8,6 @@
 
 #include "monetdb_config.h"
 #include "gdk.h"
-#include <gdk_arrays.h>
 #include "math.h"
 #include "mal_exception.h"
 #include "mal_interpreter.h"
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
@@ -811,13 +811,17 @@ multiplex2(MalBlkPtr mb, char *mod, char
 
        q = pushArgument(mb, q, o1);
        snprintf(nme, SMALLBUFSIZ, "Y_%d", o1);
-       if((arraySecondVar = findVariable(mb, nme)) >=0) 
+       if((arraySecondVar = findVariable(mb, nme)) >=0) {
+               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_ptr));
                q = pushArgument(mb, q, arraySecondVar);
+       }
 
        q = pushArgument(mb, q, o2);
        snprintf(nme, SMALLBUFSIZ, "Y_%d", o2);
-       if((arraySecondVar = findVariable(mb, nme)) >=0) 
+       if((arraySecondVar = findVariable(mb, nme)) >=0) {
+               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_ptr));
                q = pushArgument(mb, q, arraySecondVar);
+       }
 
        return q;
 }
@@ -1514,6 +1518,10 @@ static int
                                        return -1;
                                k = getDestVar(q);
 
+                               snprintf(nme, SMALLBUFSIZ, "Y_%d", l);
+                               if((arraySecondVar = findVariable(mb, nme)) >=0)
+                                       renameVariable(mb, getArg(q, 1), 
"Y_%d", k);
+
                                q = newStmt1(mb, algebraRef, "subselect");
                                q = pushArgument(mb, q, k);
                                if (sub > 0)
@@ -1526,6 +1534,7 @@ static int
                                if (q == NULL)
                                        return -1;
                                k = getDestVar(q);
+
                        } else {
                                char *cmd = subselectRef;
 
@@ -2175,7 +2184,7 @@ static int
                        } else
                                q = newStmt1(mb, batcalcRef, convert);
 
-                       /* convert to string is complex, we need full type info
+                               /* convert to string is complex, we need full 
type info
                           and mvc for the timezone */
                        if (EC_VARCHAR(t->type->eclass) && !(f->type->eclass == 
EC_STRING && t->digits == 0)) {
                                q = pushInt(mb, q, f->type->eclass);
@@ -2185,7 +2194,13 @@ static int
                        } else if (f->type->eclass == EC_DEC)
                                /* scale of the current decimal */
                                q = pushInt(mb, q, f->scale);
-                       q = pushArgument(mb, q, l);
+                               q = pushArgument(mb, q, l);
+
+                               snprintf(nme, SMALLBUFSIZ, "Y_%d", l);
+                               if((arraySecondVar = findVariable(mb, nme)) 
>=0) { 
+                           q = pushReturn(mb, q, newTmpVariable(mb, TYPE_ptr));
+                                       q = pushArgument(mb, q, arraySecondVar);
+                               }
 
                        if (t->type->eclass == EC_DEC || 
EC_TEMP_FRAC(t->type->eclass) || EC_INTERVAL(t->type->eclass)) {
                                /* digits, scale of the result decimal */
@@ -2202,6 +2217,8 @@ static int
                        if (q == NULL)
                                return -1;
                        s->nr = getDestVar(q);
+                       if(arraySecondVar >= 0)
+               renameVariable(mb, getArg(q, 1), "Y_%d", s->nr);
                        break;
                }
                case st_Nop:{
@@ -2269,10 +2286,19 @@ static int
                                        setVarUDFtype(mb, getArg(q, q->argc-1));
                                }
                                special = 0;
+                               snprintf(nme, SMALLBUFSIZ, "Y_%d", op->nr);
+                               if((arraySecondVar = findVariable(mb, nme)) 
>=0) {
+                                       q = pushReturn(mb, q, 
newTmpVariable(mb, TYPE_ptr));
+                                       q = pushArgument(mb, q, arraySecondVar);
+                               }
+
                        }
                        if (q == NULL)
                                return -1;
                        s->nr = getDestVar(q);
+                       if(arraySecondVar >= 0)
+                               renameVariable(mb, getArg(q, 1), "Y_%d", s->nr);
+
                        /* keep reference to instruction */
                        s->rewritten = (void *) q;
                } break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to