Changeset: 01c3e874f76d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=01c3e874f76d
Added Files:
        monetdb5/modules/mosaic/mosaic_join_templates.h
Modified Files:
        monetdb5/modules/mosaic/mosaic.c
        monetdb5/modules/mosaic/mosaic_delta.h
        monetdb5/modules/mosaic/mosaic_delta_templates.h
        monetdb5/modules/mosaic/mosaic_dict.h
        monetdb5/modules/mosaic/mosaic_dict256.h
        monetdb5/modules/mosaic/mosaic_dictionary.h
        monetdb5/modules/mosaic/mosaic_dictionary_templates.h
        monetdb5/modules/mosaic/mosaic_frame.h
        monetdb5/modules/mosaic/mosaic_frame_templates.h
        monetdb5/modules/mosaic/mosaic_join.h
        monetdb5/modules/mosaic/mosaic_linear.h
        monetdb5/modules/mosaic/mosaic_linear_templates.h
        monetdb5/modules/mosaic/mosaic_prefix.h
        monetdb5/modules/mosaic/mosaic_prefix_templates.h
        monetdb5/modules/mosaic/mosaic_raw.h
        monetdb5/modules/mosaic/mosaic_raw_templates.h
        monetdb5/modules/mosaic/mosaic_runlength.h
        monetdb5/modules/mosaic/mosaic_runlength_templates.h
        monetdb5/modules/mosaic/mosaic_utility.h
Branch: mosaic
Log Message:

Refactored (regular) mosaic.join to templates.


diffs (truncated from 849 to 300 lines):

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
@@ -1049,6 +1049,30 @@ str MOSprojection(Client cntxt, MalBlkPt
        return msg;
 }
 
+#define TPE bte
+#include "mosaic_join_templates.h"
+#undef TPE
+#define TPE sht
+#include "mosaic_join_templates.h"
+#undef TPE
+#define TPE int
+#include "mosaic_join_templates.h"
+#undef TPE
+#define TPE lng
+#include "mosaic_join_templates.h"
+#undef TPE
+#define TPE flt
+#include "mosaic_join_templates.h"
+#undef TPE
+#define TPE dbl
+#include "mosaic_join_templates.h"
+#undef TPE
+#ifdef HAVE_HGE
+#define TPE hge
+#include "mosaic_join_templates.h"
+#undef TPE
+#endif
+
 MOSjoin_generic_COUI_DEF(bte)
 MOSjoin_generic_COUI_DEF(sht)
 MOSjoin_generic_COUI_DEF(int)
@@ -1059,16 +1083,6 @@ MOSjoin_generic_COUI_DEF(dbl)
 MOSjoin_generic_COUI_DEF(hge)
 #endif
 
-MOSjoin_generic_DEF(bte)
-MOSjoin_generic_DEF(sht)
-MOSjoin_generic_DEF(int)
-MOSjoin_generic_DEF(lng)
-MOSjoin_generic_DEF(flt)
-MOSjoin_generic_DEF(dbl)
-#ifdef HAVE_HGE
-MOSjoin_generic_DEF(hge)
-#endif
-
 /* A mosaic join operator that works when either the left or the right side is 
compressed.
  * Furthermore if both sides are in possesion of a mosaic index,
  * the operator implementation currently only uses the mosaic index of the 
left side.
diff --git a/monetdb5/modules/mosaic/mosaic_delta.h 
b/monetdb5/modules/mosaic/mosaic_delta.h
--- a/monetdb5/modules/mosaic/mosaic_delta.h
+++ b/monetdb5/modules/mosaic/mosaic_delta.h
@@ -31,6 +31,7 @@ typedef struct {\
 } MOSBlockHeader_delta_##TPE;
 
 ALGEBRA_INTERFACES_INTEGERS_ONLY(delta);
+#define TYPE_IS_SUPPORTED_delta(TPE) INTEGERS_ONLY(TPE)
 #define DO_OPERATION_ON_delta(OPERATION, TPE, ...) 
DO_OPERATION_ON_INTEGERS_ONLY(OPERATION, delta, TPE, __VA_ARGS__)
 
 #define MOScodevectorDelta(task, TPE) ((BitVector) &((MOSBlockHeaderTpe(delta, 
TPE)*) (task)->blk)->bitvector)
@@ -44,23 +45,4 @@ ALGEBRA_INTERFACES_INTEGERS_ONLY(delta);
        )\
 )
 
-#define join_inner_loop_delta(TPE, HAS_NIL, RIGHT_CI_NEXT)\
-{\
-       MOSBlockHeaderTpe(delta, TPE)* parameters = (MOSBlockHeaderTpe(delta, 
TPE)*) task->blk;\
-       BitVector base = MOScodevectorDelta(task, TPE);\
-       DeltaTpe(TPE) acc = (DeltaTpe(TPE)) parameters->init; /*previous 
value*/\
-       const bte bits = parameters->bits;\
-       DeltaTpe(TPE) sign_mask = (DeltaTpe(TPE)) ((IPTpe(TPE)) 1) << (bits - 
1);\
-    TPE rval = (TPE) acc;\
-    BUN j = 0;\
-    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {\
-        BUN i = (BUN) (ro - first);\
-        for (;j <= i; j++) {\
-            TPE delta = getBitVector(base, j, bits);\
-                       rval = ACCUMULATE(acc, delta, sign_mask, TPE);\
-        }\
-        IF_EQUAL_APPEND_RESULT(HAS_NIL, TPE);\
-       }\
-}
-
 #endif /* _MOSAIC_DELTA_ */
diff --git a/monetdb5/modules/mosaic/mosaic_delta_templates.h 
b/monetdb5/modules/mosaic/mosaic_delta_templates.h
--- a/monetdb5/modules/mosaic/mosaic_delta_templates.h
+++ b/monetdb5/modules/mosaic/mosaic_delta_templates.h
@@ -240,3 +240,32 @@ MOSprojectionloop_SIGNATURE(METHOD, TPE,
        task->src = (char*) bt;
 }
 #endif
+
+#ifdef INNER_COMPRESSED_JOIN_LOOP
+
+MOSjoin_inner_loop_SIGNATURE(delta, TPE, NIL, RIGHT_CI_NEXT)
+{
+       MOSBlockHeaderTpe(delta, TPE)* parameters = (MOSBlockHeaderTpe(delta, 
TPE)*) task->blk;
+       BitVector base = MOScodevectorDelta(task, TPE);
+       DeltaTpe(TPE) acc = (DeltaTpe(TPE)) parameters->init; /*previous value*/
+       const bte bits = parameters->bits;
+       DeltaTpe(TPE) sign_mask = (DeltaTpe(TPE)) ((IPTpe(TPE)) 1) << (bits - 
1);
+    TPE rval = (TPE) acc;
+    BUN j = 0;
+    BUN first = task->start;
+    BUN last = first + MOSgetCnt(task->blk);
+    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {
+        BUN i = (BUN) (ro - first);
+        for (;j <= i; j++) {
+            TPE delta = getBitVector(base, j, bits);
+                       rval = ACCUMULATE(acc, delta, sign_mask, TPE);
+        }
+               #ifdef HAS_NIL
+        IF_EQUAL_APPEND_RESULT(true, TPE);
+               #else
+               IF_EQUAL_APPEND_RESULT(false, TPE);
+               #endif
+       }
+       return MAL_SUCCEED;
+}
+#endif // #ifdef INNER_COMPRESSED_JOIN_LOOP
diff --git a/monetdb5/modules/mosaic/mosaic_dict.h 
b/monetdb5/modules/mosaic/mosaic_dict.h
--- a/monetdb5/modules/mosaic/mosaic_dict.h
+++ b/monetdb5/modules/mosaic/mosaic_dict.h
@@ -28,9 +28,8 @@ mal_export void MOScreatevar(MOStask* ta
 #define MosaicBlkHeader_DEF_dict(TPE) MosaicBlkHeader_DEF_dictionary(dict, TPE)
 
 ALGEBRA_INTERFACES_ALL_TYPES_WITH_DICTIONARY(dict);
+#define TYPE_IS_SUPPORTED_dict(TPE) ALL_TYPES_SUPPORTED(TPE)
 
 #define DO_OPERATION_ON_dict(OPERATION, TPE, ...) 
DO_OPERATION_ON_ALL_TYPES(OPERATION, dict, TPE, __VA_ARGS__)
 
-#define join_inner_loop_dict(TPE, HAS_NIL, RIGHT_CI_NEXT) 
join_inner_loop_dictionary(dict, TPE, HAS_NIL, RIGHT_CI_NEXT)
-
 #endif /* _MOSAIC_VAR_ */
diff --git a/monetdb5/modules/mosaic/mosaic_dict256.h 
b/monetdb5/modules/mosaic/mosaic_dict256.h
--- a/monetdb5/modules/mosaic/mosaic_dict256.h
+++ b/monetdb5/modules/mosaic/mosaic_dict256.h
@@ -28,9 +28,8 @@ mal_export str MOScreateCappedInfo(MOSta
 #define MosaicBlkHeader_DEF_dict256(TPE) 
MosaicBlkHeader_DEF_dictionary(dict256, TPE)
 
 ALGEBRA_INTERFACES_ALL_TYPES_WITH_DICTIONARY(dict256);
+#define TYPE_IS_SUPPORTED_dict256(TPE) ALL_TYPES_SUPPORTED(TPE)
 
 #define DO_OPERATION_ON_dict256(OPERATION, TPE, ...) 
DO_OPERATION_ON_ALL_TYPES(OPERATION, dict256, TPE, __VA_ARGS__)
 
-#define join_inner_loop_dict256(TPE, HAS_NIL, RIGHT_CI_NEXT) 
join_inner_loop_dictionary(dict256, TPE, HAS_NIL, RIGHT_CI_NEXT)
-
 #endif /* _MOSAIC_DICT256_ */
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
@@ -92,17 +92,4 @@ typedef struct {\
        }\
 }
 
-#define join_inner_loop_dictionary(METHOD, TPE, HAS_NIL, RIGHT_CI_NEXT)\
-{\
-       bte bits                = GET_FINAL_BITS(task, METHOD);\
-       TPE* dict               = GET_FINAL_DICT(task, METHOD, TPE);\
-       BitVector base  = MOScodevectorDict(task, METHOD, TPE);\
-    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {\
-        BUN i = (BUN) (ro - first);\
-               BitVectorChunk j= getBitVector(base,i,bits);\
-        TPE rval = dict[j];\
-        IF_EQUAL_APPEND_RESULT(HAS_NIL, TPE);\
-       }\
-}
-
 #endif /* _MOSAIC_DICTIONARY_  */
diff --git a/monetdb5/modules/mosaic/mosaic_dictionary_templates.h 
b/monetdb5/modules/mosaic/mosaic_dictionary_templates.h
--- a/monetdb5/modules/mosaic/mosaic_dictionary_templates.h
+++ b/monetdb5/modules/mosaic/mosaic_dictionary_templates.h
@@ -539,3 +539,25 @@ MOSprojectionloop_SIGNATURE(METHOD, TPE,
        task->src = (char*) bt;
 }
 #endif
+
+#ifdef INNER_COMPRESSED_JOIN_LOOP
+MOSjoin_inner_loop_SIGNATURE(METHOD, TPE, NIL, RIGHT_CI_NEXT)
+{
+       bte bits                = GET_FINAL_BITS(task, METHOD);
+       TPE* dict               = GET_FINAL_DICT(task, METHOD, TPE);
+       BitVector base  = MOScodevectorDict(task, METHOD, TPE);
+    BUN first = task->start;
+    BUN last = first + MOSgetCnt(task->blk);
+    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {
+        BUN i = (BUN) (ro - first);
+               BitVectorChunk j= getBitVector(base,i,bits);
+        TPE rval = dict[j];
+               #ifdef HAS_NIL
+        IF_EQUAL_APPEND_RESULT(true, TPE);
+               #else
+               IF_EQUAL_APPEND_RESULT(false, TPE);
+               #endif
+       }
+       return MAL_SUCCEED;
+}
+#endif // #ifdef INNER_COMPRESSED_JOIN_LOOP
diff --git a/monetdb5/modules/mosaic/mosaic_frame.h 
b/monetdb5/modules/mosaic/mosaic_frame.h
--- a/monetdb5/modules/mosaic/mosaic_frame.h
+++ b/monetdb5/modules/mosaic/mosaic_frame.h
@@ -31,21 +31,9 @@ typedef struct {\
 } MOSBlockHeader_frame_##TPE;
 
 ALGEBRA_INTERFACES_INTEGERS_ONLY(frame);
+#define TYPE_IS_SUPPORTED_frame(TPE) INTEGERS_ONLY(TPE)
 #define DO_OPERATION_ON_frame(OPERATION, TPE, ...) 
DO_OPERATION_ON_INTEGERS_ONLY(OPERATION, frame, TPE, __VA_ARGS__)
 
 #define MOScodevectorFrame(task, TPE) ((BitVector) &((MOSBlockHeaderTpe(frame, 
TPE)*) (task)->blk)->bitvector)
 
-#define join_inner_loop_frame(TPE, HAS_NIL, RIGHT_CI_NEXT)\
-{\
-    MOSBlockHeaderTpe(frame, TPE)* parameters = (MOSBlockHeaderTpe(frame, 
TPE)*) ((task))->blk;\
-       const TPE min =  parameters->min;\
-       const BitVector base = MOScodevectorFrame(task, TPE);\
-       const bte bits = parameters->bits;\
-    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {\
-        BUN i = (BUN) (ro - first);\
-               TPE rval = ADD_DELTA(TPE, min, getBitVector(base, i, bits));\
-        IF_EQUAL_APPEND_RESULT(HAS_NIL, TPE);\
-       }\
-}
-
 #endif /* _MOSAIC_FRAME_ */
diff --git a/monetdb5/modules/mosaic/mosaic_frame_templates.h 
b/monetdb5/modules/mosaic/mosaic_frame_templates.h
--- a/monetdb5/modules/mosaic/mosaic_frame_templates.h
+++ b/monetdb5/modules/mosaic/mosaic_frame_templates.h
@@ -219,3 +219,26 @@ MOSprojectionloop_SIGNATURE(METHOD, TPE,
        task->src = (char*) bt;
 }
 #endif
+
+#ifdef INNER_COMPRESSED_JOIN_LOOP
+
+MOSjoin_inner_loop_SIGNATURE(frame, TPE, NIL, RIGHT_CI_NEXT)
+{
+    MOSBlockHeaderTpe(frame, TPE)* parameters = (MOSBlockHeaderTpe(frame, 
TPE)*) ((task))->blk;
+       const TPE min =  parameters->min;
+       const BitVector base = MOScodevectorFrame(task, TPE);
+       const bte bits = parameters->bits;
+    BUN first = task->start;
+    BUN last = first + MOSgetCnt(task->blk);
+    for (oid ro = canditer_peekprev(task->ci); !is_oid_nil(ro) && ro < last; 
ro = RIGHT_CI_NEXT(task->ci)) {
+        BUN i = (BUN) (ro - first);
+               TPE rval = ADD_DELTA(TPE, min, getBitVector(base, i, bits));
+               #ifdef HAS_NIL
+        IF_EQUAL_APPEND_RESULT(true, TPE);
+               #else
+               IF_EQUAL_APPEND_RESULT(false, TPE);
+               #endif
+       }
+       return MAL_SUCCEED;
+}
+#endif // #ifdef INNER_COMPRESSED_JOIN_LOOP
diff --git a/monetdb5/modules/mosaic/mosaic_join.h 
b/monetdb5/modules/mosaic/mosaic_join.h
--- a/monetdb5/modules/mosaic/mosaic_join.h
+++ b/monetdb5/modules/mosaic/mosaic_join.h
@@ -171,16 +171,6 @@ static str MOSjoin_COUI_##TPE(MOStask* t
        return MAL_SUCCEED;\
 }
 
-/* Nested loop join with the left uncompressed side in the outer loop
- * and the right compressed side in the inner loop.
- */
-
-#define join_inner_loop(METHOD, TPE, HAS_NIL, RIGHT_CI_NEXT)\
-{\
-       join_inner_loop_##METHOD(TPE, HAS_NIL, RIGHT_CI_NEXT);\
-       MOSadvance_##METHOD##_##TPE(task);\
-}
-
 #define IF_EQUAL_APPEND_RESULT(HAS_NIL, TPE)\
 {\
        if (ARE_EQUAL(lval, rval, HAS_NIL, TPE)){\
@@ -189,90 +179,4 @@ static str MOSjoin_COUI_##TPE(MOStask* t
        }\
 }
 
-#define OUTER_LOOP_UNCOMPRESSED(HAS_NIL, NIL_MATCHES, TPE, LEFT_CI_NEXT, 
RIGHT_CI_NEXT) \
-{\
-       str msg = MAL_SUCCEED;\
-\
-       TPE* vl = (TPE*) Tloc(l, 0);\
-       for (BUN li = 0; li < lci->ncand; li++, MOSinitializeScan(task, 
task->bsrc), canditer_reset(rci)) {\
-               oid lo = LEFT_CI_NEXT(lci);\
-               TPE lval = vl[lo-l->hseqbase];\
-               if (HAS_NIL && !NIL_MATCHES) {\
-                       if ((IS_NIL(TPE, lval))) {continue;};\
-               }\
-\
-               while(task->start < task->stop ){\
-                       BUN first = task->start;\
-                       BUN last = first + MOSgetCnt(task->blk);\
-\
-                       oid c = canditer_next(rci);\
-                       while (!is_oid_nil(c) && c < first ) {\
-                               c = canditer_next(rci);\
-                       }\
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to