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

weld impl for 'ifthenelse', '=' and 'isnul'


diffs (61 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
@@ -153,6 +153,12 @@ get_weld_func(sql_subfunc *f) {
                return "year";
        else if (strcmp(name, "identity") == 0)
                return "identity";
+       else if (strcmp(name, "ifthenelse") == 0)
+               return "ifthenelse";
+       else if (strcmp(name, "=") == 0)
+               return "=";
+       else if (strcmp(name, "isnil") == 0)
+               return "isnil";
        return NULL;
 }
 
@@ -364,14 +370,41 @@ exp_to_weld(backend *be, weld_state *wst
                } else {
                        if (strcmp(weld_func, "year") == 0) {
                                wprintf(wstate, "cudf[%s, i32](", weld_func);
+                               exps_to_weld(be, wstate, exp->l, ", ");
+                               wprintf(wstate, ")");
                        } else if (strcmp(weld_func, "identity") == 0) {
                                wprintf(wstate, "i%d", wstate->num_loops);
-                               break;
+                       } else if (strcmp(weld_func, "ifthenelse") == 0) {
+                               /* if(x == i8nil, TYPEnil, if(x != 0, y, z)) */
+                               node *en = ((list*)exp->l)->h;
+                               sql_exp *cond_exp = en->data;
+                               sql_exp *then_exp = en->next->data;
+                               sql_exp *else_exp = en->next->next->data;
+                               str then_type = 
getWeldType(exp_subtype(then_exp)->type->localtype);
+                               wprintf(wstate, "if(");
+                               exp_to_weld(be, wstate, cond_exp);
+                               wprintf(wstate, " == i8nil, %snil, if(", 
then_type);
+                               exp_to_weld(be, wstate, cond_exp);
+                               wprintf(wstate, " > 0c, ");
+                               exp_to_weld(be, wstate, then_exp);
+                               wprintf(wstate, ", ");
+                               exp_to_weld(be, wstate, else_exp);
+                               wprintf(wstate, "))");
+                       } else if (strcmp(weld_func, "=")) {
+                               wprintf(wstate, "i8(");
+                               exps_to_weld(be, wstate, exp->l, " == ");
+                               wprintf(wstate, ")");
+                       } else if (strcmp(weld_func, "isnil")) {
+                               sql_exp *e = ((list*)exp->l)->h->data;
+                               str type = 
getWeldType(exp_subtype(e)->type->localtype);
+                               wprintf(wstate, "i8(");
+                               exp_to_weld(be, wstate, e);
+                               wprintf(wstate, " == %snil)", type);
                        } else {
                                wprintf(wstate, "%s(", weld_func);
+                               exps_to_weld(be, wstate, exp->l, ", ");
+                               wprintf(wstate, ")");
                        }
-                       exps_to_weld(be, wstate, exp->l, ", ");
-                       wprintf(wstate, ")");
                }
                break;
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to