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