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