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

select * from a now works


diffs (99 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
@@ -936,3 +936,20 @@ str ALGarrayCount(wrd *res, const ptr *a
 
        return MAL_SUCCEED;
 }
+
+
+str ALGprojectDimension(bat* result, const ptr *dim, const ptr *array) {
+       const gdk_array *dimsCands = arrayCopy((gdk_array*)*array); 
//candidates exactly the same to the array
+       bat oidsCands;
+       return ALGdimensionLeftfetchjoin1(result, (void*)&dimsCands, 
&oidsCands, dim, array);
+}
+
+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
+       
+       BAT *oidsCandsBAT = newempty("ALGprojectNonDimension");
+       bat oidsCands = oidsCandsBAT->batCacheid;
+
+       return ALGnonDimensionLeftfetchjoin1(result, (void*)&dimsCands, 
&oidsCands, vals, array);
+}
+
diff --git a/monetdb5/modules/kernel/arrays.h b/monetdb5/modules/kernel/arrays.h
--- a/monetdb5/modules/kernel/arrays.h
+++ b/monetdb5/modules/kernel/arrays.h
@@ -37,6 +37,10 @@ algebra_export str ALGnonDimensionThetas
 algebra_export str ALGnonDimensionThetasubselect1(ptr *dimsRes, bat *oidsRes, 
const bat* vals, const ptr *dims, 
                                                    const void *val, const char 
**op);
 
+algebra_export str ALGprojectDimension(bat* result, const ptr *dim, const ptr 
*array);
+algebra_export str ALGprojectNonDimension(bat *result, const bat *vals, const 
ptr *array);
+
+
 
 
 algebra_export str ALGarrayCount(wrd *res, const ptr *array);
diff --git a/monetdb5/modules/kernel/arrays.mal 
b/monetdb5/modules/kernel/arrays.mal
--- a/monetdb5/modules/kernel/arrays.mal
+++ b/monetdb5/modules/kernel/arrays.mal
@@ -41,6 +41,14 @@ command algebra.thetasubselect(vals:bat[
 address ALGnonDimensionThetasubselect2;
 
 
+#projects a dimension
+command algebra.projectArray(dim:ptr, dims:ptr) :bat[:oid,:any]
+address ALGprojectDimension;
+#gets a non-dimensional column of an array and the description of the array 
+#and returns just the BAT of the non-dimensional column
+command algebra.projectArray(vlas:bat[:oid,:any], dims:ptr) :bat[:oid,:any]
+address ALGprojectNonDimension;
+
 #Creates a BAT that contains all cells that satisfied a series of selections 
on dimensions
 command algebra.cellsProject(candDims:ptr, candBAT:bat[:oid,:oid]) 
:bat[:oid,:oid]
 address ALGproject;
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
@@ -157,6 +157,9 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
        int tblId, nmeId, tpeId, lenId, scaleId, k;
        InstrPtr p = NULL, list;
 
+       char nme[SMALLBUFSIZ];
+       int arraySecondVar = -1;        
+
        list = newInstruction(mb,ASSIGNsymbol);
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
        setModuleId(list, sqlRef);
@@ -184,10 +187,6 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
                size_t fqtnl;
                char *fqtn;
 
-//             if(c->type == st_cells) {
-//                     fprintf(stderr, "dump_header: st_cells in output 
ignored\n");
-//                     continue;
-//             }
                t = tail_type(c);
                tname = table_name(sql->sa, c);
                sname = schema_name(sql->sa, c);
@@ -206,7 +205,17 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
                        metaInfo(tpeId,Str,(t->type->localtype == TYPE_void ? 
"char" : t->type->sqlname));
                        metaInfo(lenId,Int,t->digits);
                        metaInfo(scaleId,Int,t->scale);
-                       list = pushArgument(mb,list,c->nr);
+       
+                       snprintf(nme, SMALLBUFSIZ, "Y_%d", c->nr);
+                       if((arraySecondVar = findVariable(mb, nme)) >=0) { 
+                               InstrPtr projDim = newStmt1(mb, algebraRef, 
"projectArray");
+                               projDim = pushArgument(mb, projDim, c->nr);
+                               projDim = pushArgument(mb, projDim, 
arraySecondVar);
+
+                               list = pushArgument(mb, list, 
getDestVar(projDim));
+                       } else
+                               list = pushArgument(mb,list,c->nr);
+
                        _DELETE(fqtn);
                } else
                        q = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to