Changeset: b4449d504b8f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b4449d504b8f
Modified Files:
sql/backends/monet5/rel_weld.c
Branch: rel-weld
Log Message:
weld impl for 'in' and 'not in' + cmp_or fix
diffs (35 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
@@ -278,14 +278,26 @@ exp_to_weld(backend *be, weld_state *wst
wprintf(wstate, "(");
}
if (exp->flag == cmp_in || exp->flag == cmp_notin) {
- /* TODO implement this */
- wstate->error = 1;
- return;
+ if (exp->flag == cmp_notin) {
+ wprintf(wstate, "(");
+ }
+ node *en;
+ for (en = ((list*)exp->r)->h; en; en = en->next) {
+ exp_to_weld(be, wstate, exp->l);
+ wprintf(wstate, " == ");
+ exp_to_weld(be, wstate, en->data);
+ if (en->next != NULL) {
+ wprintf(wstate, " || ");
+ }
+ }
+ if (exp->flag == cmp_notin) {
+ wprintf(wstate, ") == false");
+ }
} else if (get_cmp(exp) == cmp_or) {
wprintf(wstate, "(");
- exps_to_weld(be, wstate, exp->l, "");
+ exps_to_weld(be, wstate, exp->l, " && ");
wprintf(wstate, ") || ( ");
- exps_to_weld(be, wstate, exp->r, "");
+ exps_to_weld(be, wstate, exp->r, " && ");
wprintf(wstate, ")");
} else if (get_cmp(exp) == cmp_filter) {
str udf = get_weld_func(exp->f);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list