Changeset: ef0570457036 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef0570457036 Added Files: monetdb5/modules/mosaic/mosaic_projection.h monetdb5/modules/mosaic/mosaic_utility.h Modified Files: clients/Tests/exports.stable.out monetdb5/modules/mosaic/Makefile.ag monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out monetdb5/modules/mosaic/mosaic.c monetdb5/modules/mosaic/mosaic_capped.c monetdb5/modules/mosaic/mosaic_capped.h monetdb5/modules/mosaic/mosaic_delta.c monetdb5/modules/mosaic/mosaic_delta.h monetdb5/modules/mosaic/mosaic_dictionary.h monetdb5/modules/mosaic/mosaic_frame.c monetdb5/modules/mosaic/mosaic_frame.h monetdb5/modules/mosaic/mosaic_linear.c monetdb5/modules/mosaic/mosaic_linear.h monetdb5/modules/mosaic/mosaic_prefix.c monetdb5/modules/mosaic/mosaic_prefix.h monetdb5/modules/mosaic/mosaic_raw.c monetdb5/modules/mosaic/mosaic_raw.h monetdb5/modules/mosaic/mosaic_runlength.c monetdb5/modules/mosaic/mosaic_runlength.h monetdb5/modules/mosaic/mosaic_select.h monetdb5/modules/mosaic/mosaic_var.c monetdb5/modules/mosaic/mosaic_var.h Branch: mosaic Log Message:
Factor out boiler plate from projection code. diffs (truncated from 1170 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1581,14 +1581,6 @@ void MOSpostEstimate_var(MOStask task); str MOSprepareEstimate_capped(MOStask task); str MOSprepareEstimate_var(MOStask task); str MOSprojection(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -str MOSprojection_capped(MOStask task); -str MOSprojection_delta(MOStask task); -str MOSprojection_frame(MOStask task); -str MOSprojection_linear(MOStask task); -str MOSprojection_prefix(MOStask task); -str MOSprojection_raw(MOStask task); -str MOSprojection_runlength(MOStask task); -str MOSprojection_var(MOStask task); str MOSselect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); void MOSskip_capped(MOStask task); void MOSskip_delta(MOStask task); diff --git a/monetdb5/modules/mosaic/Makefile.ag b/monetdb5/modules/mosaic/Makefile.ag --- a/monetdb5/modules/mosaic/Makefile.ag +++ b/monetdb5/modules/mosaic/Makefile.ag @@ -20,8 +20,10 @@ lib_mosaic = { NOINST SOURCES = \ mosaic.c mosaic.h \ + mosaic_utility.h \ mosaic_hdr.c mosaic_hdr.h \ mosaic_select.h \ + mosaic_projection.h \ mosaic_raw.c mosaic_raw.h \ mosaic_runlength.c mosaic_runlength.h \ mosaic_var.c mosaic_var.h \ diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out @@ -392,8 +392,6 @@ MOSprojection_linear MOSprojection_linear MOSprojection_linear MOSprojection_linear -MOSprojection_linear -MOSprojection_linear # 16:33:21 > # 16:33:21 > "/usr/bin/python3" "mosaic_bit_2.linear.MAL.py" "mosaic_bit_2.linear" diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out @@ -392,8 +392,6 @@ MOSprojection_runlength MOSprojection_runlength MOSprojection_runlength MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength # 16:33:06 > # 16:33:06 > "/usr/bin/python3" "mosaic_bit_2.runlength.MAL.py" "mosaic_bit_2.runlength" diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out @@ -937,16 +937,6 @@ MOSprojection_linear MOSprojection_linear MOSprojection_linear MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear -MOSprojection_linear # 13:09:41 > # 13:09:41 > "/usr/bin/python3" "mosaic_bit_with_nils_2.linear.MAL.py" "mosaic_bit_with_nils_2.linear" diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out --- a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out +++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out @@ -1033,18 +1033,6 @@ MOSprojection_runlength MOSprojection_runlength MOSprojection_runlength MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength -MOSprojection_runlength # 16:33:06 > # 16:33:06 > "/usr/bin/python3" "mosaic_bit_2.runlength.MAL.py" "mosaic_bit_2.runlength" diff --git a/monetdb5/modules/mosaic/mosaic.c b/monetdb5/modules/mosaic/mosaic.c --- a/monetdb5/modules/mosaic/mosaic.c +++ b/monetdb5/modules/mosaic/mosaic.c @@ -974,6 +974,16 @@ str MOSthetaselect(Client cntxt, MalBlkP throw(MAL, "mosaic.MOSthetaselect", "unknown operator."); } +MOSprojection_generic_DEF(bte) +MOSprojection_generic_DEF(sht) +MOSprojection_generic_DEF(int) +MOSprojection_generic_DEF(lng) +MOSprojection_generic_DEF(flt) +MOSprojection_generic_DEF(dbl) +#ifdef HAVE_HGE +MOSprojection_generic_DEF(hge) +#endif + str MOSprojection(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { bat *ret, *lid =0, *rid=0; @@ -1045,46 +1055,18 @@ str MOSprojection(Client cntxt, MalBlkPt struct canditer ci; task->ci = &ci; canditer_init(task->ci, NULL, bl); - canditer_next(task->ci); // Increase the state by one. - // loop thru all the chunks and fetch all results - while(task->start < task->stop ) - switch(MOSgetTag(task->blk)){ - case MOSAIC_RLE: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_runlength\n"); - MOSprojection_runlength( task); - break; - case MOSAIC_CAPPED: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_capped\n"); - MOSprojection_capped( task); - break; - case MOSAIC_VAR: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_var\n"); - MOSprojection_var( task); - break; - case MOSAIC_FRAME: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_frame\n"); - MOSprojection_frame( task); - break; - case MOSAIC_DELTA: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_delta\n"); - MOSprojection_delta( task); - break; - case MOSAIC_PREFIX: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_prefix\n"); - MOSprojection_prefix( task); - break; - case MOSAIC_LINEAR: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_linear\n"); - MOSprojection_linear( task); - break; - case MOSAIC_RAW: - ALGODEBUG mnstr_printf(GDKstdout, "MOSprojection_raw\n"); - MOSprojection_raw( task); - break; - default: - assert(0); - } + switch(ATOMbasetype(task->type)){ + case TYPE_bte: MOSprojection_bte(task); break; + case TYPE_sht: MOSprojection_sht(task); break; + case TYPE_int: MOSprojection_int(task); break; + case TYPE_lng: MOSprojection_lng(task); break; + case TYPE_flt: MOSprojection_flt(task); break; + case TYPE_dbl: MOSprojection_dbl(task); break; +#ifdef HAVE_HGE + case TYPE_hge: MOSprojection_hge(task); break; +#endif + } /* adminstrative wrapup of the projection */ BBPunfix(*lid); diff --git a/monetdb5/modules/mosaic/mosaic_capped.c b/monetdb5/modules/mosaic/mosaic_capped.c --- a/monetdb5/modules/mosaic/mosaic_capped.c +++ b/monetdb5/modules/mosaic/mosaic_capped.c @@ -425,24 +425,18 @@ MOSselect_DEF(capped, dbl) MOSselect_DEF(capped, hge) #endif -str -MOSprojection_capped( MOStask task) -{ - switch(ATOMbasetype(task->type)){ - case TYPE_bte: DICTprojection(bte); break; - case TYPE_sht: DICTprojection(sht); break; - case TYPE_int: DICTprojection(int); break; - case TYPE_lng: DICTprojection(lng); break; - case TYPE_oid: DICTprojection(oid); break; - case TYPE_flt: DICTprojection(flt); break; - case TYPE_dbl: DICTprojection(dbl); break; +#define projection_loop_capped(TPE, CANDITER_NEXT) \ + projection_loop_dictionary(TPE, CANDITER_NEXT) + +MOSprojection_DEF(capped, bte) +MOSprojection_DEF(capped, sht) +MOSprojection_DEF(capped, int) +MOSprojection_DEF(capped, lng) +MOSprojection_DEF(capped, flt) +MOSprojection_DEF(capped, dbl) #ifdef HAVE_HGE - case TYPE_hge: DICTprojection(hge); break; +MOSprojection_DEF(capped, hge) #endif - } - MOSskip_capped(task); - return MAL_SUCCEED; -} str MOSjoin_capped( MOStask task, bit nil_matches) diff --git a/monetdb5/modules/mosaic/mosaic_capped.h b/monetdb5/modules/mosaic/mosaic_capped.h --- a/monetdb5/modules/mosaic/mosaic_capped.h +++ b/monetdb5/modules/mosaic/mosaic_capped.h @@ -16,7 +16,7 @@ #include <mal.h> #include "mal_interpreter.h" #include "mal_client.h" -#include "mosaic_select.h" +#include "mosaic_utility.h" #define DICTTHRESHOLD 4192 #define DICTSIZE 256 @@ -33,19 +33,10 @@ mal_export void MOSpostEstimate_capped(M mal_export str finalizeDictionary_capped(MOStask task); mal_export void MOScompress_capped(MOStask task, MosaicBlkRec* estimate); mal_export void MOSdecompress_capped(MOStask task); -mal_export str MOSprojection_capped( MOStask task); mal_export str MOSjoin_capped( MOStask task, bit nil_matches); -MOSselect_SIGNATURE(capped, bte); -MOSselect_SIGNATURE(capped, sht); -MOSselect_SIGNATURE(capped, int); -MOSselect_SIGNATURE(capped, lng); -MOSselect_SIGNATURE(capped, flt); -MOSselect_SIGNATURE(capped, dbl); -#ifdef HAVE_HGE -MOSselect_SIGNATURE(capped, hge); -#endif +ALGEBRA_INTERFACES_ALL_TYPES(capped); -#define SELECT_CAPPED(TPE) do_select(capped, TPE) +#define DO_OPERATION_ON_capped(OPERATION, TPE) DO_OPERATION_ON_ALL_TYPES(OPERATION, capped, TPE) #endif /* _MOSAIC_CAPPED_ */ diff --git a/monetdb5/modules/mosaic/mosaic_delta.c b/monetdb5/modules/mosaic/mosaic_delta.c --- a/monetdb5/modules/mosaic/mosaic_delta.c +++ b/monetdb5/modules/mosaic/mosaic_delta.c @@ -296,46 +296,33 @@ MOSselect_DEF(delta, lng) MOSselect_DEF(delta, hge) #endif -#define projection_delta(TPE)\ -{ TPE *v;\ - v= (TPE*) task->src;\ - MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*) task->blk;\ +#define projection_loop_delta(TPE, CANDITER_NEXT)\ +{\ + MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*) task->blk;\ + BitVector base = (BitVector) MOScodevectorDelta(task);\ DeltaTpe(TPE) acc = parameters->init.val##TPE; /*previous value*/\ int bits = parameters->bits;\ - BitVector base = (BitVector) MOScodevectorDelta(task);\ DeltaTpe(TPE) sign_mask = (DeltaTpe(TPE)) ((IPTpe(TPE)) 1) << (bits - 1);\ - for(; first < last; first++,i++){\ - DeltaTpe(TPE) delta = (DeltaTpe(TPE)) getBitVector(base,i,bits);\ - TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\ - MOSskipit();\ - *v++ = value;\ + TPE v = (TPE) acc;\ + BUN j = 0;\ + for (oid o = canditer_peekprev(task->ci); !is_oid_nil(o) && o < last; o = CANDITER_NEXT(task->ci)) {\ + BUN i = (BUN) (o - first);\ + for (;j <= i; j++) {\ + TPE delta = getBitVector(base, j, bits);\ + v = ACCUMULATE(acc, delta, sign_mask, TPE);\ + }\ + *bt++ = v;\ task->cnt++;\ }\ - task->src = (char*) v;\ } -str -MOSprojection_delta( MOStask task) -{ - BUN i=0, first, last; - - // set the oid range covered and advance scan range - first = task->start; - last = first + MOSgetCnt(task->blk); - - switch(ATOMbasetype(task->type)){ - case TYPE_bte: projection_delta(bte); break; - case TYPE_sht: projection_delta(sht); break; - case TYPE_int: projection_delta(int); break; - case TYPE_lng: projection_delta(lng); break; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list