Changeset: 3fa0f859752d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3fa0f859752d Modified Files: gdk/gdk_arrays.c gdk/gdk_arrays.h sql/backends/monet5/sql_arrays.c Branch: arrays Log Message:
while working on the dimensions we do not need to have analytic information about it, something like the oids used in the columns diffs (truncated from 633 to 300 lines): diff --git a/gdk/gdk_arrays.c b/gdk/gdk_arrays.c --- a/gdk/gdk_arrays.c +++ b/gdk/gdk_arrays.c @@ -1,9 +1,9 @@ #include "monetdb_config.h" #include "gdk_arrays.h" -#define createDim(TPE) \ -gdk_dimension* createDimension_##TPE(int dimNum, BUN elsNum, TPE min, TPE max, TPE step) { \ - gdk_dimension *dim = GDKmalloc(sizeof(gdk_dimension)); \ +#define createAnalyticDim(TPE) \ +gdk_analytic_dimension* createAnalyticDimension_##TPE(unsigned short dimNum, TPE min, TPE max, TPE step) { \ + gdk_analytic_dimension *dim = GDKmalloc(sizeof(gdk_analytic_dimension)); \ \ void *minVoid = GDKmalloc(sizeof(TPE)); \ void *maxVoid = GDKmalloc(sizeof(TPE)); \ @@ -26,15 +26,34 @@ gdk_dimension* createDimension_##TPE(int \ dim->type = TYPE_##TPE; \ dim->dimNum = dimNum; \ - dim->elementsNum = floor((max - min )/ step)+1; \ dim->min = minVoid; \ dim->max = maxVoid; \ dim->step = stepVoid; \ - dim->initialElementsNum = elsNum; \ + dim->elsNum = floor((max - min )/ step)+1; \ \ return dim; \ } +createAnalyticDim(bte); +createAnalyticDim(sht); +createAnalyticDim(int); +createAnalyticDim(wrd); +createAnalyticDim(oid); +createAnalyticDim(lng); +createAnalyticDim(dbl); +createAnalyticDim(flt); + +#define createDim(TPE) \ +gdk_dimension* createDimension_##TPE(unsigned int elsNum_initial, TPE min, TPE max, TPE step) { \ + gdk_dimension *dim = GDKmalloc(sizeof(gdk_dimension)); \ + dim->elsNum = floor((max - min )/ step)+1; \ + dim->min = 0; \ + dim->max = dim->elsNum; \ + dim->step = 1; \ + dim->elsNum_initial = elsNum_initial; \ + return dim; \ +} + createDim(bte); createDim(sht); createDim(int); @@ -45,6 +64,33 @@ createDim(dbl); createDim(flt); +gdk_array* arrayNew(unsigned short dimsNum) { + gdk_array *array = (gdk_array*)GDKmalloc(sizeof(gdk_array)); + array->dimsNum = dimsNum; + array->dims = (gdk_dimension**)GDKmalloc(sizeof(gdk_dimension*)*dimsNum); + return array; +} + +gdk_return arrayDelete(gdk_array *array) { + int i=0; + for(i=0; i<array->dimsNum; i++) + GDKfree(array->dims[i]); + GDKfree(array->dims); + GDKfree(array); + + return GDK_SUCCEED; +} + +gdk_return analyticDimensionDelete(gdk_analytic_dimension *dim) { + GDKfree(dim->min); + GDKfree(dim->max); + GDKfree(dim->step); + GDKfree(dim); + + return GDK_SUCCEED; +} + + gdk_return gdk_error_msg(errors errorCode, const char* funcName, const char *msg) { switch(errorCode) { case general_error: @@ -61,6 +107,108 @@ gdk_return gdk_error_msg(errors errorCod return GDK_FAIL; } +BAT* materialise_nonDimensional_column(int columntype, unsigned int cellsNum, char* defVal) { + BAT *b = NULL; + +#define fillVals(TPE, def) \ + do { \ + TPE *elements = NULL; \ + BUN i; \ +\ + if((b = BATnew(TYPE_void, TYPE_##TPE, cellsNum, TRANSIENT)) == NULL) \ + return NULL; \ +\ + elements = (TPE*) Tloc(b, BUNfirst(b)); \ +\ + /*Fill the rest of the cells with the default value or NULL if no \ + * * * default values is provided*/ \ + for(i=0;i<cellsNum; i++) { \ + elements[i] = def; \ + } \ +\ + b->tsorted = 0; \ + b->trevsorted = 0; \ + } while (0) + + switch (columntype) { + case TYPE_bte: { + bte val = bte_nil; + if(defVal) + val = atoi(defVal); + fillVals(bte, val); + } break; + case TYPE_sht: { + short val = sht_nil; + if(defVal) + val = atoi(defVal); + fillVals(sht, val); + } break; + case TYPE_int: { + int val = int_nil; + if(defVal) + val = atoi(defVal); + fillVals(int, val); + } break; + case TYPE_lng: { + long val = lng_nil; + if(defVal) + val = atol(defVal); + fillVals(lng, val); + } break; +#ifdef HAVE_HGE + case TYPE_hge: { + hge val = hge_nil; + if(defVal) + val = atol(defVal); + fillVals(hge, val); + } break; +#endif + case TYPE_flt: { + float val = flt_nil; + if(defVal) + val = atof(defVal); + fillVals(flt, val); + } break; + case TYPE_dbl: { + double val = dbl_nil; + if(defVal) + val = atof(defVal); + fillVals(dbl, val); + } break; + case TYPE_str: { + BUN i; + + if((b = BATnew(TYPE_void, TYPE_str, cellsNum, TRANSIENT)) == NULL) + return NULL; + + /*Fill the rest of the cells with the default value or NULL if no \ + * * default values is provided*/ + for(i=0; i<cellsNum; i++) { + if(!defVal) + BUNappend(b,str_nil, TRUE); + else + BUNappend(b, (char*)defVal, TRUE); + } + + + b->tsorted = 0; + b->trevsorted = 0; + } + + break; + default: + fprintf(stderr, "materialise_nonDimensional_column: non-dimensional column type not handled\n"); + return NULL; + } + + BATsetcount(b,cellsNum); + BATseqbase(b,0); + BATderiveProps(b,FALSE); + + return b; +} + +#if 0 gdk_cells* cells_new(void) { gdk_cells *cells = GDKmalloc(sizeof(gdk_cells)); cells->h = cells->t = NULL; @@ -91,24 +239,6 @@ static dim_node* findNode(gdk_cells *cel return n; } -gdk_return freeDimension(gdk_dimension *dim) { - GDKfree(dim->min); - GDKfree(dim->max); - GDKfree(dim->step); - GDKfree(dim); - - return GDK_SUCCEED; -} - -gdk_return freeCells(gdk_cells *cells) { - dim_node *n; - for(n=cells->h; n; n=n->next) - freeDimension(n->data); - GDKfree(cells); - - return GDK_SUCCEED; -} - gdk_cells* cells_remove_dimension(gdk_cells* cells, int dimNum) { dim_node *prevNode = findNode(cells, dimNum); dim_node *currNode = prevNode->next; @@ -133,6 +263,14 @@ gdk_cells* cells_replace_dimension(gdk_c return cells; } +gdk_return freeCells(gdk_cells *cells) { + dim_node *n; + for(n=cells->h; n; n=n->next) + freeDimension(n->data); + GDKfree(cells); + + return GDK_SUCCEED; +} /* #define valueInOID(oidVal, min, max, step) \ @@ -827,7 +965,6 @@ fprintf(stderr, "resMin = %d - resMax = return gdkRetVal; } -#if 0 BAT *BATdimensionThetasubselect(BAT *b, BAT *s, const void *val, const char *op) { const void *nil; @@ -874,7 +1011,6 @@ BAT *BATdimensionThetasubselect(BAT *b, GDKerror("BATdimensionThetasubselect: unknown operator.\n"); return NULL; } -#endif gdk_return dimensionBATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *dimensionBAT, BAT *g, BAT *e, BAT *h) { BAT* resBAT; @@ -1296,7 +1432,6 @@ gdk_return BATmbrproject(BAT **outBAT, B return GDK_SUCCEED; } -#if 0 BAT* BATnonDimensionProject(BAT* oidsBAT, BAT* dimensionBAT) { BAT *resBAT; int tpe = ATOMtype(dimensionBAT->ttype);//, nilcheck = 1, sortcheck = 1, stringtrick = 0; @@ -1472,8 +1607,6 @@ fprintf(stderr, "BATnondimensionProject: return resBAT; } -#endif - gdk_return dimensionBATsubjoin(BAT **outBATl, BAT **outBATr, BAT *dimensionBATl, BAT *dimensionBATr, BAT *sl, BAT *sr, int nil_matches, BUN estimate) { BAT *resBATl, *resBATr; @@ -1840,107 +1973,6 @@ gdk_array *cellsToArray(gdk_cells *cells array->dimSizes[i] = n->data->initialElementsNum; return array; } +#endif -BAT* materialise_nonDimensional_column(int columntype, unsigned int cellsNum, char* defVal) { - BAT *b = NULL; - -#define fillVals(TPE, def) \ - do { \ - TPE *elements = NULL; \ - BUN i; \ -\ - if((b = BATnew(TYPE_void, TYPE_##TPE, cellsNum, TRANSIENT)) == NULL) \ - return NULL; \ -\ - elements = (TPE*) Tloc(b, BUNfirst(b)); \ -\ - /*Fill the rest of the cells with the default value or NULL if no \ - * * * default values is provided*/ \ - for(i=0;i<cellsNum; i++) { \ - elements[i] = def; \ - } \ -\ - b->tsorted = 0; \ - b->trevsorted = 0; \ - } while (0) - - switch (columntype) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list