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