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

filter: cleanup and add var {!=,<,<=,>,>=} var support

Loop over str, int and dbl to generate code for matching.  Use thetajoin
and kdifference for implementing != and the rest.


diffs (286 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
@@ -282,169 +282,130 @@ dumppred(MalBlkPtr mb, tree *t, int elem
                                assert(0);
                }
        } else {  /* var <cmp> var */
+               int lv[4] = {j2, j3, j4, 0}, *lp = lv;
+               int ct = 0; /* j_equal */
                switch (t->tval2->cval) {
-                       case j_nequal:
-                       case j_equals:
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, batRef);
-                               setFunctionId(q, reverseRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, b);
-                               c = 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, a);
-                               q = pushArgument(mb, q, c);
-                               c = 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, c);
-                               d = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               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);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j2);  /* str */
-                               q = pushArgument(mb, q, d);
-                               f = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j2);  /* str */
-                               q = pushArgument(mb, q, c);
-                               e = 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, e);
-                               e = 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,joinRef);
-                               q = pushArgument(mb, q, e);
-                               e = 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, e);
-                               g = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j3);  /* int */
-                               q = pushArgument(mb, q, d);
-                               f = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j3);  /* int */
-                               q = pushArgument(mb, q, c);
-                               e = 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, e);
-                               e = 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, f);
-                               q = pushArgument(mb, q, e);
-                               e = 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, e);
-                               g = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j4);  /* dbl */
-                               q = pushArgument(mb, q, d);
-                               f = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               q = newInstruction(mb, ASSIGNsymbol);
-                               setModuleId(q, algebraRef);
-                               setFunctionId(q, semijoinRef);
-                               q = pushReturn(mb, q, newTmpVariable(mb, 
TYPE_any));
-                               q = pushArgument(mb, q, j4);  /* dbl */
-                               q = pushArgument(mb, q, c);
-                               e = 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, e);
-                               e = 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, f);
-                               q = pushArgument(mb, q, e);
-                               e = 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, e);
-                               g = getArg(q, 0);
-                               pushInstruction(mb, q);
-                               c = g;
-                               break;
                        case j_greater:
+                               ct = 1;
                                break;
                        case j_gequal:
+                               ct = 2;
                                break;
                        case j_less:
+                               ct = -1;
                                break;
                        case j_lequal:
+                               ct = -2;
                                break;
                        default:
-                               assert(0);
+                               ct = 0;
                }
+               q = newInstruction(mb, ASSIGNsymbol);
+               setModuleId(q, batRef);
+               setFunctionId(q, reverseRef);
+               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+               q = pushArgument(mb, q, b);
+               c = 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, a);
+               q = pushArgument(mb, q, c);
+               c = 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, c);
+               d = getArg(q, 0);
+               pushInstruction(mb, q);
+               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);
+               for (; *lp != 0; lp++) {
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, semijoinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, *lp);
+                       q = pushArgument(mb, q, d);
+                       f = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       setFunctionId(q, semijoinRef);
+                       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+                       q = pushArgument(mb, q, *lp);
+                       q = pushArgument(mb, q, c);
+                       e = 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, e);
+                       e = getArg(q, 0);
+                       pushInstruction(mb, q);
+                       q = newInstruction(mb, ASSIGNsymbol);
+                       setModuleId(q, algebraRef);
+                       switch (t->tval2->cval) {
+                               case j_equals:
+                                       setFunctionId(q, joinRef);
+                                       q = pushReturn(mb, q, 
newTmpVariable(mb, TYPE_any));
+                                       q = pushArgument(mb, q, f);
+                                       q = pushArgument(mb, q, e);
+                                       e = getArg(q, 0);
+                                       pushInstruction(mb, q);
+                                       break;
+                               case j_nequal:
+                                       setFunctionId(q, joinRef);
+                                       q = pushReturn(mb, q, 
newTmpVariable(mb, TYPE_any));
+                                       q = pushArgument(mb, q, f);
+                                       q = pushArgument(mb, q, e);
+                                       e = getArg(q, 0);
+                                       pushInstruction(mb, q);
+                                       q = newInstruction(mb, ASSIGNsymbol);
+                                       setModuleId(q, algebraRef);
+                                       setFunctionId(q, putName("kdifference", 
11));
+                                       q = pushReturn(mb, q, 
newTmpVariable(mb, TYPE_any));
+                                       q = pushArgument(mb, q, e);
+                                       q = pushArgument(mb, q, f);
+                                       e = getArg(q, 0);
+                                       pushInstruction(mb, q);
+                                       break;
+                               case j_greater:
+                               case j_gequal:
+                               case j_less:
+                               case j_lequal:
+                                       setFunctionId(q, thetajoinRef);
+                                       q = pushReturn(mb, q, 
newTmpVariable(mb, TYPE_any));
+                                       q = pushArgument(mb, q, f);
+                                       q = pushArgument(mb, q, e);
+                                       q = pushInt(mb, q, ct);
+                                       e = getArg(q, 0);
+                                       pushInstruction(mb, q);
+                                       break;
+                               default:
+                                       assert(0);
+                       }
+                       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, e);
+                       g = getArg(q, 0);
+                       pushInstruction(mb, q);
+               }
+               c = g;
        }
        /* avoid emitting this possibly unused statement */
        if (t->tval1->tval1 != NULL) {
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to