Changeset: e5424a9b60b2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e5424a9b60b2
Modified Files:
monetdb5/modules/mosaic/TODO_MOSAIC.txt
monetdb5/modules/mosaic/mosaic_delta.c
monetdb5/modules/mosaic/mosaic_dictionary.h
monetdb5/modules/mosaic/mosaic_prefix.c
monetdb5/modules/mosaic/mosaic_raw.c
monetdb5/modules/mosaic/mosaic_runlength.c
Branch: mosaic
Log Message:
Deduplicating and macro-wising code.
diffs (truncated from 701 to 300 lines):
diff --git a/monetdb5/modules/mosaic/TODO_MOSAIC.txt
b/monetdb5/modules/mosaic/TODO_MOSAIC.txt
--- a/monetdb5/modules/mosaic/TODO_MOSAIC.txt
+++ b/monetdb5/modules/mosaic/TODO_MOSAIC.txt
@@ -1,5 +1,4 @@
####technical depth####
-FIX anti stuff in select and antiselect
Finish null semantics plus tests
make sure candidate lists are working properly for select, theta_select and
join (2)
Be sure alignment is correct. Use asserts for this.
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
@@ -409,73 +409,37 @@ MOSdecompress_delta(MOStask task)
}\
else {\
/*normal cases.*/\
- if( !*anti){\
- if( IS_NIL(TPE, (LOW)) ){\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((HI) && value <= (HIGH)
) || (!(HI) && value < (HIGH) ));\
- if (cmp )\
- *o++ = (oid) first;\
- }\
- } else\
- if( IS_NIL(TPE, (HIGH)) ){\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((LI) && value >= (LOW) )
|| (!(LI) && value > (LOW) ));\
- if (cmp )\
- *o++ = (oid) first;\
- }\
- } else{\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((HI) && value <= (HIGH)
) || (!(HI) && value < (HIGH) )) &&\
- (((LI) && value >=
(LOW) ) || (!(LI) && value > (LOW) ));\
- if (cmp )\
- *o++ = (oid) first;\
- }\
+ if( IS_NIL(TPE, (LOW)) ){\
+ for( ; first < last; first++,i++){\
+ DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
+ TPE value = ACCUMULATE(acc, delta, sign_mask,
TPE);\
+ MOSskipit();\
+ if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+ bool cmp = (((HI) && value <= (HIGH) ) ||
(!(HI) && value < (HIGH) ));\
+ if (cmp == !(ANTI))\
+ *o++ = (oid) first;\
}\
- } else {\
- if( IS_NIL(TPE, (LOW)) ){\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((HI) && value <= (HIGH)
) || (!(HI) && value < (HIGH) ));\
- if ( !cmp )\
- *o++ = (oid) first;\
- }\
- } else\
- if( IS_NIL(TPE, (HIGH)) ){\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((LI) && value >= (LOW) )
|| (!(LI) && value > (LOW) ));\
- if ( !cmp )\
- *o++ = (oid) first;\
- }\
- } else{\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta,
sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) {
continue;}\
- bool cmp = (((HI) && value <= (HIGH)
) || (!(HI) && value < (HIGH) )) &&\
- (((LI) && value >=
(LOW) ) || (!(LI) && value > (LOW) ));\
- if (!cmp)\
- *o++ = (oid) first;\
- }\
+ } else\
+ if( IS_NIL(TPE, (HIGH)) ){\
+ for( ; first < last; first++,i++){\
+ DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
+ TPE value = ACCUMULATE(acc, delta, sign_mask,
TPE);\
+ MOSskipit();\
+ if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+ bool cmp = (((LI) && value >= (LOW) ) ||
(!(LI) && value > (LOW) ));\
+ if (cmp == !(ANTI))\
+ *o++ = (oid) first;\
+ }\
+ } else{\
+ for( ; first < last; first++,i++){\
+ DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
+ TPE value = ACCUMULATE(acc, delta, sign_mask,
TPE);\
+ MOSskipit();\
+ if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+ bool cmp = (((HI) && value <= (HIGH) ) ||
(!(HI) && value < (HIGH) )) &&\
+ (((LI) && value >= (LOW) ) ||
(!(LI) && value > (LOW) ));\
+ if (cmp == !(ANTI))\
+ *o++ = (oid) first;\
}\
}\
}\
@@ -526,6 +490,17 @@ MOSselect_delta( MOStask task, void *low
return MAL_SUCCEED;
}
+#define thetaselect_delta_normalized(HAS_NIL, ANTI, TPE) \
+for( ; first < last; first++,i++){\
+ DeltaTpe(TPE) delta = (DeltaTpe(TPE)) getBitVector(base,i,bits);\
+ TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
+ MOSskipit();\
+ if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+ bool cmp = (IS_NIL(TPE, low) || value >= low) && (value <= hgh ||
IS_NIL(TPE, hgh)) ;\
+ if (cmp == !(ANTI))\
+ *o++ = (oid) first;\
+}\
+
#define thetaselect_delta_general(HAS_NIL, TPE)\
{ TPE low,hgh;\
MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*)
task->blk;\
@@ -555,25 +530,12 @@ MOSselect_delta( MOStask task, void *low
if ( strcmp(oper,"==") == 0){\
hgh= low= *(TPE*) val;\
} \
- if ( !anti)\
- /*TODO: simplify this similar to mosaic_capped*/\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
- if( (IS_NIL(TPE, low) || value >= low) && (value <= hgh
|| IS_NIL(TPE, hgh)) )\
- *o++ = (oid) first;\
- }\
- else\
- for( ; first < last; first++,i++){\
- DeltaTpe(TPE) delta = (DeltaTpe(TPE))
getBitVector(base,i,bits);\
- TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
- MOSskipit();\
- if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
- if( !( (IS_NIL(TPE, low) || value >= low) && (value <=
hgh || IS_NIL(TPE, hgh)) ))\
- *o++ = (oid) first;\
- }\
+ if (!anti) {\
+ thetaselect_delta_normalized(HAS_NIL, false, TPE);\
+ }\
+ else {\
+ thetaselect_delta_normalized(HAS_NIL, true, TPE);\
+ }\
}
#define thetaselect_delta(TPE) {\
diff --git a/monetdb5/modules/mosaic/mosaic_dictionary.h
b/monetdb5/modules/mosaic/mosaic_dictionary.h
--- a/monetdb5/modules/mosaic/mosaic_dictionary.h
+++ b/monetdb5/modules/mosaic/mosaic_dictionary.h
@@ -211,64 +211,31 @@ typedef struct {
}\
else {\
/*normal cases.*/\
- if( !ANTI){\
- if( IS_NIL(TPE, low) ){\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((hi && dict[j] <= hgh )
|| (!hi && dict[j] < hgh ));\
- if (cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
- } else\
- if( IS_NIL(TPE, hgh) ){\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((li && dict[j] >= low )
|| (!li && dict[j] > low ));\
- if (cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
- } else{\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((hi && dict[j] <= hgh )
|| (!hi && dict[j] < hgh )) &&\
- ((li && dict[j] >= low
) || (!li && dict[j] > low ));\
- if (cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
+ if( IS_NIL(TPE, low) ){\
+ for(unsigned int i = 0; i < cnt; i++){\
+ unsigned int j = getBitVector(base,i,bits); \
+ if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
+ bool cmp = ((hi && dict[j] <= hgh ) || (!hi
&& dict[j] < hgh ));\
+ if (cmp == !(ANTI))\
+ *(*result)++ = (oid) (i + hseqbase);\
}\
- } else {\
- if( IS_NIL(TPE, low) && IS_NIL(TPE, hgh)){\
- /* nothing is matching */\
- } else\
- if( IS_NIL(TPE, low) ){\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((hi && dict[j] <= hgh )
|| (!hi && dict[j] < hgh ));\
- if ( !cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
- } else\
- if( IS_NIL(TPE, hgh) ){\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((li && dict[j] >= low )
|| (!li && dict[j] > low ));\
- if ( !cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
- } else{\
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j =
getBitVector(base,i,bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
- bool cmp = ((hi && dict[j] <= hgh )
|| (!hi && dict[j] < hgh )) &&\
- ((li && dict[j] >= low
) || (!li && dict[j] > low ));\
- if ( !cmp )\
- *(*result)++ = (oid) (i +
hseqbase);\
- }\
+ } else\
+ if( IS_NIL(TPE, hgh) ){\
+ for(unsigned int i = 0; i < cnt; i++){\
+ unsigned int j = getBitVector(base,i,bits); \
+ if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
+ bool cmp = ((li && dict[j] >= low ) || (!li
&& dict[j] > low ));\
+ if (cmp == !(ANTI))\
+ *(*result)++ = (oid) (i + hseqbase);\
+ }\
+ } else{\
+ for(unsigned int i = 0; i < cnt; i++){\
+ unsigned int j = getBitVector(base,i,bits); \
+ if (HAS_NIL && IS_NIL(TPE, dict[j])) {
continue;}\
+ bool cmp = ((hi && dict[j] <= hgh ) || (!hi
&& dict[j] < hgh )) &&\
+ ((li && dict[j] >= low ) ||
(!li && dict[j] > low ));\
+ if (cmp == !(ANTI))\
+ *(*result)++ = (oid) (i + hseqbase);\
}\
}\
}\
@@ -304,6 +271,16 @@ void select_dictionary_##TPE(\
}\
}
+#define thetaselect_dictionary_normalized(HAS_NIL, ANTI, TPE) \
+for(unsigned int i = 0; i < cnt; i++){\
+ unsigned int j = getBitVector(base, i, bits); \
+ if (HAS_NIL && IS_NIL(TPE, dict[j])) { continue;}\
+ bool cmp = (IS_NIL(TPE, low) || dict[j] >= low) && (dict[j] <= hgh ||
IS_NIL(TPE, hgh));\
+ if (cmp == !(ANTI)) {\
+ *(*result)++ = (oid) (i + hseqbase);\
+ }\
+}\
+
#define thetaselect_dictionary_general(HAS_NIL, TPE)\
{\
TPE low,hgh;\
@@ -330,17 +307,11 @@ void select_dictionary_##TPE(\
if ( strcmp(oper,"==") == 0){\
hgh= low= val;\
} \
- for(unsigned int i = 0; i < cnt; i++){\
- unsigned int j = getBitVector(base, i, bits); \
- if (HAS_NIL && IS_NIL(TPE, dict[j])) { continue;}\
- if( (IS_NIL(TPE, low) || dict[j] >= low) && (dict[j] <= hgh ||
IS_NIL(TPE, hgh)) ){\
- if ( !anti) {\
- *(*result)++ = (oid) (i + hseqbase);\
- }\
- } else\
- if( anti){\
- *(*result)++ = (oid) (i + hseqbase);\
- }\
+ if (!anti) {\
+ thetaselect_dictionary_normalized(HAS_NIL, false, TPE);\
+ }\
+ else {\
+ thetaselect_dictionary_normalized(HAS_NIL, true, TPE);\
}\
}
diff --git a/monetdb5/modules/mosaic/mosaic_prefix.c
b/monetdb5/modules/mosaic/mosaic_prefix.c
--- a/monetdb5/modules/mosaic/mosaic_prefix.c
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list