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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list