Changeset: a4500ef9e25e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a4500ef9e25e
Modified Files:
        monetdb5/extras/jaql/jaqlgencode.c
Branch: Jul2012
Log Message:

in: refactor

put in-clause code in its own function, since it doesn't share anything
with dumpcomp


diffs (truncated from 595 to 300 lines):

diff --git a/monetdb5/extras/jaql/jaqlgencode.c 
b/monetdb5/extras/jaql/jaqlgencode.c
--- a/monetdb5/extras/jaql/jaqlgencode.c
+++ b/monetdb5/extras/jaql/jaqlgencode.c
@@ -486,119 +486,33 @@ dumprefvar(jc *j, MalBlkPtr mb, tree *t,
 }
 
 /* returns bat with in the head the oids from elems that match the
- * comparison */
+ * in condition */
 static int
-dumpcomp(jc *j, Client cntxt, MalBlkPtr mb, tree *t, int elems)
+dumpin(jc *j, Client cntxt, MalBlkPtr mb, tree *t, int elems)
 {
+       int ink = 0, inn = 0, ind = 0, ins = 0;
+       int a, b, c, g;
        InstrPtr q;
-       int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0;
-       int ink = 0, inn = 0, ind = 0, ins = 0;
-
-       assert(t != NULL);
-       assert(t->tval2->type == j_comp);
-       assert(t->tval2->cval != j_in || (
-                               t->tval3->type == j_json_arr &&
-                               (t->tval1->type == j_var || t->tval1->type == 
j_operation)));
-       assert(t->tval2->cval == j_in || (
-                          (t->tval3->type == j_var || t->tval3->type == 
j_operation
-                               || t->tval3->type == j_num || t->tval3->type == 
j_dbl
-                               || t->tval3->type == j_str || t->tval3->type == 
j_bool) &&
-                          (t->tval1->type == j_var || t->tval1->type == 
j_operation)
-                  ));
+
+       assert(
+                       (t->tval3->type == j_json_arr &&
+                               (t->tval1->type == j_var || t->tval1->type == 
j_operation))
+                       || (t->tval3->type == j_var &&
+                               (t->tval1->type == j_var || t->tval1->type == 
j_operation
+                                || t->tval3->type == j_num || t->tval3->type 
== j_dbl
+                                || t->tval3->type == j_str || t->tval3->type 
== j_bool))
+                 );
 
        if (t->tval1->type == j_operation) {
                a = dumpvariabletransformation(j, cntxt, mb, t->tval1, elems);
-       } else /* if (t->tval1->type == j_var) */ {
+       } else if (t->tval1->type == j_var) {
                a = dumprefvar(j, mb, t->tval1, elems);
+       } else /* literal */ {
+               /* FIXME: hmm? */
+               a = -1;
        }
 
-       if (t->tval3->type != j_var && t->tval3->type != j_operation) {
-               q = newInstruction(mb, ASSIGNsymbol);
-               setModuleId(q, batRef);
-               setFunctionId(q, reverseRef);
-               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-               q = pushArgument(mb, q, a);
-               a = getArg(q, 0);
-               pushInstruction(mb, q);
-       }
-
        switch (t->tval3->type) {
-               case j_var:
-                       b = dumprefvar(j, mb, t->tval3, elems);
-                       c = -1;
-                       break;
-               case j_operation:
-                       b = dumpvariabletransformation(j, cntxt, mb, t->tval3, 
elems);
-                       c = -1;
-                       break;
-               case j_num:
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       setModuleId(q, algebraRef);
-                       setFunctionId(q, joinRef);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushArgument(mb, q, a);
-                       q = pushArgument(mb, q, j->j3);
-                       b = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushLng(mb, q, t->tval3->nval);
-                       c = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       break;
-               case j_dbl:
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       setModuleId(q, algebraRef);
-                       setFunctionId(q, joinRef);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushArgument(mb, q, a);
-                       q = pushArgument(mb, q, j->j4);
-                       b = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushDbl(mb, q, t->tval3->dval);
-                       c = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       break;
-               case j_str:
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       setModuleId(q, algebraRef);
-                       setFunctionId(q, joinRef);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushArgument(mb, q, a);
-                       q = pushArgument(mb, q, j->j2);
-                       b = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushStr(mb, q, t->tval3->sval);
-                       c = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       break;
-               case j_bool:
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       setModuleId(q, algebraRef);
-                       setFunctionId(q, joinRef);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushArgument(mb, q, a);
-                       q = pushArgument(mb, q, j->j1);
-                       b = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       q = newInstruction(mb, ASSIGNsymbol);
-                       setModuleId(q, putName("jaql", 4));
-                       setFunctionId(q, uselectRef);
-                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-                       q = pushArgument(mb, q, b);
-                       /* boolean conditions can only be j_equals or j_nequal 
*/
-                       if (t->tval2->cval == j_equals) {
-                               q = pushBte(mb, q, t->tval3->nval == 0 ? 'f' : 
't');
-                       } else {
-                               q = pushBte(mb, q, t->tval3->nval != 0 ? 'f' : 
't');
-                       }
-                       b = getArg(q, 0);
-                       pushInstruction(mb, q);
-                       return b;
                case j_json_arr:
                        /* we will create 4 BATs, one for kind matches (t, f, 
n),
                         * and one for num, dbl and str each */
@@ -698,8 +612,286 @@ dumpcomp(jc *j, Client cntxt, MalBlkPtr 
                                        }
                                }
                        }
-                       c = 0;
+
+                       /* perform joins with ins, inn, ind, ink */
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, newRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushType(mb, q, TYPE_oid);
+                       q = pushType(mb, q, TYPE_oid);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       /* string */
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, a);
+                       q = pushArgument(mb, q, j->j2);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, reverseRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, b);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, ins);
+                       q = pushArgument(mb, q, b);
+                       c = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, insertRef;);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, g);
+                       q = pushArgument(mb, q, c);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       /* int */
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, a);
+                       q = pushArgument(mb, q, j->j3);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, reverseRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, b);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, inn);
+                       q = pushArgument(mb, q, b);
+                       c = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, insertRef;);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, g);
+                       q = pushArgument(mb, q, c);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       /* double */
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, a);
+                       q = pushArgument(mb, q, j->j4);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, reverseRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, b);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, ind);
+                       q = pushArgument(mb, q, b);
+                       c = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, insertRef;);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, g);
+                       q = pushArgument(mb, q, c);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       /* kind */
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, a);
+                       q = pushArgument(mb, q, j->j1);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, reverseRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, b);
+                       b = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, joinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, ink);
+                       q = pushArgument(mb, q, b);
+                       c = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, insertRef;);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, g);
+                       q = pushArgument(mb, q, c);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+
+                       /* get elem ids on the left again */    
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, batRef);
+                       setFunctionId(q, reverseRef;);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to