Changeset: f6399b6f77cc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f6399b6f77cc
Modified Files:
        sql/backends/monet5/LSST/Tests/lsst_htmxmatch.stable.out
        sql/backends/monet5/LSST/lsst.c
        sql/backends/monet5/LSST/lsst.h
        sql/backends/monet5/sql_gencode.c
        sql/server/rel_bin.c
        sql/server/rel_select.c
        sql/server/sql_rel2bin.c
        sql/server/sql_statement.c
        sql/server/sql_statement.h
Branch: default
Log Message:

fixed lsst_htmx test.
(breaks joins with like...)


diffs (261 lines):

diff --git a/sql/backends/monet5/LSST/Tests/lsst_htmxmatch.stable.out 
b/sql/backends/monet5/LSST/Tests/lsst_htmxmatch.stable.out
--- a/sql/backends/monet5/LSST/Tests/lsst_htmxmatch.stable.out
+++ b/sql/backends/monet5/LSST/Tests/lsst_htmxmatch.stable.out
@@ -22,13 +22,37 @@ Ready.
 
 Over..
 
-# 10:09:12 >  
-# 10:09:12 >  mclient -lsql -ftest -i -e --host=rig --port=33762 
-# 10:09:12 >  
+# 21:23:59 >  
+# 21:23:59 >  mclient -lsql -ftest -i -e --host=niels --port=37399 
+# 21:23:59 >  
 
-! to be checked / approved !
+#create table htm( id BIGINT);
+#insert into htm values (100), (101), (102), (103);
+[ 4    ]
+#insert into htm values (110), (111), (112), (113);
+[ 4    ]
+#insert into htm values (120), (121), (122), (123);
+[ 4    ]
+#insert into htm values (130), (131), (132), (133);
+[ 4    ]
+#select  * from htm a, htm b where a.id xmatch(0) b.id;
+% sys.a,       sys.b # table_name
+% id,  id # name
+% bigint,      bigint # type
+% 3,   3 # length
+[ 100, 100     ]
+#select  * from htm a, htm b where a.id xmatch(1) b.id;
+% sys.a,       sys.b # table_name
+% id,  id # name
+% bigint,      bigint # type
+% 3,   3 # length
+[ 100, 100     ]
+[ 101, 100     ]
+[ 102, 100     ]
+[ 103, 100     ]
+#drop table htm;
 
-# 10:09:12 >  
-# 10:09:12 >  Done.
-# 10:09:12 >  
+# 21:23:59 >  
+# 21:23:59 >  Done.
+# 21:23:59 >  
 
diff --git a/sql/backends/monet5/LSST/lsst.c b/sql/backends/monet5/LSST/lsst.c
--- a/sql/backends/monet5/LSST/lsst.c
+++ b/sql/backends/monet5/LSST/lsst.c
@@ -443,7 +443,7 @@ str qserv_ptInSphPoly(MalBlkPtr mb, MalS
 */
 
 str
-xmatch(int *ret, int *lid, int *rid, int *delta)
+LSSTxmatch(int *ret, int *lid, int *rid, int *delta)
 {
     BAT *bn, *bl, *br;
        lng *l, *r;
diff --git a/sql/backends/monet5/LSST/lsst.h b/sql/backends/monet5/LSST/lsst.h
--- a/sql/backends/monet5/LSST/lsst.h
+++ b/sql/backends/monet5/LSST/lsst.h
@@ -40,5 +40,5 @@ lsst_export str qserv_ptInSphEllipse(int
 lsst_export str qserv_ptInSphCircle(int *ret, dbl *ra, dbl *dec, dbl *ra_cen, 
dbl *dec_cen, dbl *radius);
 lsst_export str qserv_ptInSphPoly(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 
-lsst_export str xmatch(int *ret, int *lid, int *rid, int *delta);
+lsst_export str LSSTxmatch(int *ret, int *lid, int *rid, int *delta);
 #endif /* _SQL_UDF_H_ */
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -398,76 +398,22 @@ dump_joinN(backend *sql, MalBlkPtr mb, s
 {
        char *mod = sql_func_mod(s->op4.funcval->func);
        char *fimp = sql_func_imp(s->op4.funcval->func);
-       node *n;
        InstrPtr q;
-       int l, r, k;
-       int need_not = (s->flag & ANTI);
+       int k, op1, op2, op3;
 
        /* dump left and right operands */
-       (void)_dumpstmt(sql, mb, s->op1);
-       (void)_dumpstmt(sql, mb, s->op2);
-
-       /* find left and right columns (need more work) */
-       l = ((stmt*)s->op1->op4.lval->h->data)->nr;
-       r = ((stmt*)s->op2->op4.lval->h->data)->nr;
-
-       q = dump_crossproduct(mb, l, r);
-       k = getDestVar(q);
-
-       /* split */
-       q = newStmt2(mb, algebraRef, markHRef);
-       q = pushArgument(mb, q, k);
-       q = pushOid(mb, q, 0);
-       r = getDestVar(q);
-
-       q = newStmt2(mb, algebraRef, markTRef);
-       q = pushArgument(mb, q, k);
-       q = pushOid(mb, q, 0);
-       l = getDestVar(q);
-
-       l = _dump_1(mb, batRef, reverseRef, l );
-
-       /* join left columns */
-       for (n = s->op1->op4.lval->h; n; n = n->next) {
-               stmt *op = n->data;
-
-               if (op->nrcols)
-                       op->nr = _dump_2(mb, algebraRef, joinRef, l, op->nr);
-       }
-       /* join right columns */
-       for (n = s->op2->op4.lval->h; n; n = n->next) {
-               stmt *op = n->data;
-
-               if (op->nrcols)
-                       op->nr = _dump_2(mb, algebraRef, joinRef, r, op->nr);
-       }
-
-       /* execute multiplexed function */
-       q = newStmt(mb, "mal","multiplex");
-       setVarType(mb,getArg(q,0), newBatType(TYPE_oid, TYPE_bit));
-       setVarUDFtype(mb,getArg(q,0));
-       q = pushStr(mb, q, mod);
-       q = pushStr(mb, q, fimp);
-       for (n = s->op1->op4.lval->h; n; n = n->next) {
-               stmt *op = n->data;
-               q = pushArgument(mb, q, op->nr);
-       }
-       for (n = s->op2->op4.lval->h; n; n = n->next) {
-               stmt *op = n->data;
-               q = pushArgument(mb, q, op->nr);
-       }
-       k = getDestVar(q);
+       op1 = _dumpstmt(sql, mb, s->op1);
+       op2 = _dumpstmt(sql, mb, s->op2);
+       if (s->op3)
+               op3 = _dumpstmt(sql, mb, s->op3);
 
        /* filter qualifying tuples, return oids of h and tail */
-       q = newStmt2(mb, algebraRef, uselectRef);
-       q = pushArgument(mb, q, k);
-       q = pushBit(mb, q, !need_not);
+       q = newStmt(mb, mod, fimp);
+       q = pushArgument(mb, q, op1);
+       q = pushArgument(mb, q, op2);
+       if (s->op3)
+               q = pushArgument(mb, q, op3);
        k = getDestVar(q);
-
-       k = _dump_1(mb, batRef, mirrorRef, k);
-       k = _dump_2(mb, algebraRef, joinRef, k, l);
-       k = _dump_1(mb, batRef, reverseRef, k);
-       k = _dump_2(mb, algebraRef, joinRef, k, r);
        return k;
 }
 
diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -546,15 +546,8 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
                         if (left && right && re->card > CARD_ATOM && 
!is_select) {
                                /* find predicate function */
                                 sql_subfunc *f = e->f;
-                               stmt *j = NULL;
-
-                               if (r2)
-                                       f = sql_bind_func3(sql->sa, 
sql->session->schema, f->func->base.name, tail_type(l), tail_type(r), 
tail_type(r2), F_FUNC);
-                               else
-                                       f = sql_bind_func(sql->sa, 
sql->session->schema, f->func->base.name, tail_type(l), tail_type(r), F_FUNC);
-
-                               if (f) 
-                                       j = stmt_joinN(sql->sa, 
stmt_list(sql->sa, append(list_new(sql->sa),l)), stmt_list(sql->sa, 
append(append(list_new(sql->sa),r),r2)), f);
+                               stmt *j = stmt_joinN(sql->sa, l, r, r2, f);
+
                                 if (j && is_anti(e))
                                         j->flag |= ANTI;
                                 return j;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2043,7 +2043,6 @@ rel_filter_exp_(mvc *sql, sql_rel *rel, 
        sql_exp *L = ls, *R = rs, *e = NULL;
        sql_subfunc *f = NULL;
 
-       (void)rs2;
        /* find filter function */
        if (rs2)
                f = sql_bind_func3(sql->sa, sql->session->schema, filter_op, 
exp_subtype(ls), exp_subtype(rs), exp_subtype(rs2), F_FILT);
@@ -2059,7 +2058,7 @@ rel_filter_exp_(mvc *sql, sql_rel *rel, 
                        a = m->next->data;
                        rs = rel_check_type(sql, &a->type, rs, type_equal);
                        if (rs2) {
-                               a = m->next->data;
+                               a = m->next->next->data;
                                rs2 = rel_check_type(sql, &a->type, rs2, 
type_equal);
                                if (!rs2) 
                                        rs = NULL;
diff --git a/sql/server/sql_rel2bin.c b/sql/server/sql_rel2bin.c
--- a/sql/server/sql_rel2bin.c
+++ b/sql/server/sql_rel2bin.c
@@ -749,17 +749,13 @@ reljoin( mvc *sql, stmt *rj, list *l2 )
                }
 
                if (j->type == st_joinN) {
-                       list *ol,*nl = list_new(sql->sa);
-                       node *m;
+                       stmt *op1 = j->op1;
+                       stmt *op2 = j->op2;
+                       stmt *op3 = j->op3;
 
-                       ol = j->op1->op4.lval;
-                       for (m = ol->h; m; m = m->next) 
-                               list_append(nl, _project(sql, l, m->data));
-                       ol = j->op2->op4.lval;
-                       for (m = ol->h; m; m = m->next) 
-                               list_append(nl, _project(sql, r, m->data));
-                       /* find function */
-                       cmp = stmt_uselect(sql->sa, stmt_Nop(sql->sa, 
stmt_list(sql->sa, nl), j->op4.funcval), stmt_bool(sql->sa, 1), cmp_equal);
+                       op1 = _project(sql, l, op1);
+                       op2 = _project(sql, r, op2);
+                       cmp = stmt_genselect(sql->sa, op1, op2, op3, 
j->op4.funcval);
                } else if (j->type == st_join2) {
                        stmt *le = stmt_project(sql->sa, l, ld );
                        stmt *re = stmt_project(sql->sa, r, rd );
diff --git a/sql/server/sql_statement.c b/sql/server/sql_statement.c
--- a/sql/server/sql_statement.c
+++ b/sql/server/sql_statement.c
@@ -1253,14 +1253,15 @@ stmt_join2(sql_allocator *sa, stmt *l, s
 }
 
 stmt *
-stmt_joinN(sql_allocator *sa, stmt *l, stmt *r, sql_subfunc *op)
+stmt_joinN(sql_allocator *sa, stmt *l, stmt *r, stmt *opt, sql_subfunc *op)
 {
        stmt *s = stmt_create(sa, st_joinN);
 
        s->op1 = l;
        s->op2 = r;
+       s->op3 = opt;
        s->op4.funcval = op;
-       s->nrcols = 2;
+       s->nrcols = (opt)?3:2;
        s->h = l->h;
        s->t = r->h;
        return s;
diff --git a/sql/server/sql_statement.h b/sql/server/sql_statement.h
--- a/sql/server/sql_statement.h
+++ b/sql/server/sql_statement.h
@@ -255,7 +255,7 @@ extern stmt *stmt_releqjoin2(sql_allocat
 extern stmt *stmt_join(sql_allocator *sa, stmt *op1, stmt *op2, comp_type 
cmptype);
 
 /* generic join operator, with a left and right statement list */
-extern stmt *stmt_joinN(sql_allocator *sa, stmt *l, stmt *r, sql_subfunc *op);
+extern stmt *stmt_joinN(sql_allocator *sa, stmt *l, stmt *r, stmt *opt, 
sql_subfunc *op);
 
 extern stmt *stmt_join2(sql_allocator *sa, stmt *l, stmt *ra, stmt *rb, int 
cmp);
 extern stmt *stmt_project(sql_allocator *sa, stmt *op1, stmt *op2);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to