Changeset: 9af8c33bded8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9af8c33bded8
Modified Files:
        sql/backends/monet5/rel_weld.c
Branch: rel-weld
Log Message:

weld impl for semijoin - we do a normal join but only use a single match


diffs (38 lines):

diff --git a/sql/backends/monet5/rel_weld.c b/sql/backends/monet5/rel_weld.c
--- a/sql/backends/monet5/rel_weld.c
+++ b/sql/backends/monet5/rel_weld.c
@@ -963,7 +963,11 @@ join_produce(backend *be, sql_rel *rel, 
        /* === 2nd Consume === */
        wstate->num_loops++;
        wstate->num_parens++;
-       wprintf(wstate, "for(lookup(v%d, ", result_var);
+       wprintf(wstate, "for(");
+       if (rel->op == op_semi) {
+               wprintf(wstate, "slice(");
+       }
+       wprintf(wstate, "lookup(v%d, ", result_var);
        if (list_length(left_cmp_cols) > 1) {
                wprintf(wstate, "{"); /* key is a struct */
        }
@@ -977,8 +981,11 @@ join_produce(backend *be, sql_rel *rel, 
        if (list_length(left_cmp_cols) > 1) {
                wprintf(wstate, "}"); /* key is a struct */
        }
-
-       wprintf(wstate, "), b%d, |b%d, i%d, n%d|", wstate->num_loops - 1, 
wstate->num_loops,
+       wprintf(wstate, ")");
+       if (rel->op == op_semi) {
+               wprintf(wstate, ", 0L, 1L)"); /* Just the first element of the 
vector */
+       }
+       wprintf(wstate, ", b%d, |b%d, i%d, n%d|", wstate->num_loops - 1, 
wstate->num_loops,
                        wstate->num_loops, wstate->num_loops);
        for (en = right->exps->h, count = 0; en; en = en->next, count++) {
                len = sprintf(struct_mbr, "n%d", wstate->num_loops);
@@ -1242,6 +1249,7 @@ produce_func getproduce_func(sql_rel *re
                case op_groupby:
                        return &groupby_produce;
                case op_join:
+               case op_semi:
                        return &join_produce;
                default:
                        return NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to