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