Changeset: 1a053f9bf3f8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1a053f9bf3f8
Modified Files:
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: manti
Log Message:

added a stmt_tdiff4() that takes a candidate list for both left and right hand
side


diffs (65 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2530,6 +2530,50 @@ stmt_tdiff2(backend *be, stmt *op1, stmt
 }
 
 stmt *
+stmt_tdiff4(backend *be, stmt *op1, stmt *op2, stmt *lcand, stmt *rcand)
+{
+       InstrPtr q = NULL;
+       MalBlkPtr mb = be->mb;
+
+       if (op1 == NULL || op2 == NULL || op1->nr < 0 || op2->nr < 0 || lcand 
== NULL || rcand == NULL)
+               goto bailout;
+       q = newStmt(mb, algebraRef, differenceRef);
+       if (q == NULL)
+               goto bailout;
+       q = pushArgument(mb, q, op1->nr); /* left */
+       q = pushArgument(mb, q, op2->nr); /* right */
+       q = pushArgument(mb, q, lcand->nr); /* left candicate */
+       q = pushArgument(mb, q, rcand->nr); /* right candicate */
+       q = pushBit(mb, q, FALSE);    /* nil matches */
+       q = pushBit(mb, q, FALSE);    /* do not clear nils */
+       q = pushNil(mb, q, TYPE_lng); /* estimate */
+
+       bool enabled = ma_get_eb(be->mvc->sa)->enabled;
+       ma_get_eb(be->mvc->sa)->enabled = false;
+       stmt *s = stmt_create(be->mvc->sa, st_tdiff);
+       ma_get_eb(be->mvc->sa)->enabled = enabled;
+       if (s == NULL) {
+               freeInstruction(be->mb, q);
+               goto bailout;
+       }
+
+       s->op1 = op1;
+       s->op2 = op2;
+       s->nrcols = op1->nrcols;
+       s->key = op1->key;
+       s->aggr = op1->aggr;
+       s->nr = getDestVar(q);
+       s->q = q;
+       pushInstruction(mb, q);
+       return s;
+
+  bailout:
+       if (ma_get_eb(be->mvc->sa)->enabled)
+               eb_error(ma_get_eb(be->mvc->sa), be->mvc->errstr[0] ? 
be->mvc->errstr : mb->errors ? mb->errors : *GDKerrbuf ? GDKerrbuf : "out of 
memory", 1000);
+       return NULL;
+}
+
+stmt *
 stmt_tinter(backend *be, stmt *op1, stmt *op2, bool single)
 {
        InstrPtr q = NULL;
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -213,6 +213,7 @@ extern stmt *stmt_selectNotFalse(backend
 extern stmt *stmt_tunion(backend *be, stmt *op1, stmt *op2);
 extern stmt *stmt_tdiff(backend *be, stmt *op1, stmt *op2, stmt *lcand);
 extern stmt *stmt_tdiff2(backend *be, stmt *op1, stmt *op2, stmt *lcand, bool 
is_semantics, bool any);
+extern stmt *stmt_tdiff4(backend *be, stmt *op1, stmt *op2, stmt *lcand, stmt 
*rcand);
 extern stmt *stmt_tinter(backend *be, stmt *op1, stmt *op2, bool single);
 
 extern stmt *stmt_join(backend *be, stmt *op1, stmt *op2, int anti, comp_type 
cmptype, int need_left, int is_semantics, bool single);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to