Changeset: 9a203eca21c8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9a203eca21c8
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: delete_in_vlist
Log Message:

Add left candidate argument to stmt_join and remove test function.


diffs (truncated from 370 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -272,9 +272,6 @@ value_list(backend *be, list *vals, stmt
 static stmt *
 rel2bin_distinct(backend *be, stmt *s, stmt **distinct);
 
-stmt *
-stmt_join_foo(backend *be, stmt *op1, stmt *op2, stmt *op3, int anti, 
comp_type cmptype);
-
 static stmt *
 handle_in_exps(backend *be, sql_exp *ce, list *nl, stmt *left, stmt *right, 
stmt *grp, stmt *ext, stmt *cnt, stmt *sel, int in, int use_r) 
 {
@@ -332,14 +329,7 @@ handle_in_exps(backend *be, sql_exp *ce,
 
                        s = stmt_project(be, ext, s);
 
-                       if (sel)
-                       {
-                               s = stmt_join_foo(be, c, s, sel, in, cmp);
-                       }
-                       else
-                       {
-                               s = stmt_join(be, c, s, in, cmp);
-                       }
+                       s = stmt_join(be, c, s, sel, in, cmp);
                }
        }
 
@@ -805,9 +795,9 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        if (r2) {
                                s = stmt_join2(be, l, r, r2, 
(comp_type)e->flag, is_anti(e), swapped);
                        } else if (swapped) {
-                               s = stmt_join(be, r, l, is_anti(e), 
swap_compare((comp_type)e->flag));
+                               s = stmt_join(be, r, l, NULL, is_anti(e), 
swap_compare((comp_type)e->flag));
                        } else {
-                               s = stmt_join(be, l, r, is_anti(e), 
(comp_type)e->flag);
+                               s = stmt_join(be, l, r, NULL, is_anti(e), 
(comp_type)e->flag);
                        }
                } else {
                        if (r2) {
@@ -1661,9 +1651,9 @@ rel2bin_hash_lookup(backend *be, sql_rel
        }
        if (h && h->nrcols) {
                if (!swap_rel) {
-                       return stmt_join(be, idx, h, 0, cmp_equal);
+                       return stmt_join(be, idx, h, NULL, 0, cmp_equal);
                } else {
-                       return stmt_join(be, h, idx, 0, cmp_equal);
+                       return stmt_join(be, h, idx, NULL, 0, cmp_equal);
                }
        } else {
                return stmt_uselect(be, idx, h, cmp_equal, NULL, 0);
@@ -1706,7 +1696,7 @@ releqjoin( backend *be, list *l1, list *
        if (list_length(l1) <= 1) {
                l = l1->h->data;
                r = l2->h->data;
-               r =  stmt_join(be, l, r, 0, cmp_op);
+               r =  stmt_join(be, l, r, NULL, 0, cmp_op);
                if (need_left)
                        r->flag = cmp_left;
                return r;
@@ -1716,11 +1706,11 @@ releqjoin( backend *be, list *l1, list *
                r = n2->data;
                n1 = n1->next;
                n2 = n2->next;
-               res = stmt_join(be, l, r, 0, cmp_op);
+               res = stmt_join(be, l, r, NULL, 0, cmp_op);
        } else { /* need hash */
                l = join_hash_key(be, l1);
                r = join_hash_key(be, l2);
-               res = stmt_join(be, l, r, 0, cmp_op);
+               res = stmt_join(be, l, r, NULL, 0, cmp_op);
        }
        if (need_left) 
                res->flag = cmp_left;
@@ -1743,7 +1733,7 @@ releqjoin( backend *be, list *l1, list *
                l = stmt_project(be, cmp, l );
                r = stmt_project(be, cmp, r );
        }
-       res = stmt_join(be, l, r, 0, cmp_joined);
+       res = stmt_join(be, l, r, NULL, 0, cmp_joined);
        return res;
 }
 
@@ -1805,7 +1795,7 @@ rel2bin_join(backend *be, sql_rel *rel, 
                                if (!join && !list_length(lje)) {
                                        stmt *l = bin_first_column(be, left);
                                        stmt *r = bin_first_column(be, right);
-                                       join = stmt_join(be, l, r, 0, cmp_all); 
+                                       join = stmt_join(be, l, r, NULL, 0, 
cmp_all); 
                                }
                                break;
                        }
@@ -1844,13 +1834,13 @@ rel2bin_join(backend *be, sql_rel *rel, 
                                        stmt *r = bin_first_column(be, right);
 
                                        l = stmt_uselect(be, stmt_const(be, l, 
stmt_bool(be, 1)), s, cmp_equal, NULL, 0);
-                                       join = stmt_join(be, l, r, 0, cmp_all);
+                                       join = stmt_join(be, l, r, NULL, 0, 
cmp_all);
                                        continue;
                                }
                                if (!join) {
                                        stmt *l = bin_first_column(be, left);
                                        stmt *r = bin_first_column(be, right);
-                                       join = stmt_join(be, l, r, 0, cmp_all); 
+                                       join = stmt_join(be, l, r, NULL, 0, 
cmp_all); 
                                }
                                break;
                        }
@@ -1863,14 +1853,14 @@ rel2bin_join(backend *be, sql_rel *rel, 
                if (list_length(lje) > 1) {
                        join = releqjoin(be, lje, rje, used_hash, cmp_equal, 
need_left);
                } else if (!join) {
-                       join = stmt_join(be, lje->h->data, rje->h->data, 0, 
cmp_equal);
+                       join = stmt_join(be, lje->h->data, rje->h->data, NULL, 
0, cmp_equal);
                        if (need_left)
                                join->flag = cmp_left;
                }
        } else {
                stmt *l = bin_first_column(be, left);
                stmt *r = bin_first_column(be, right);
-               join = stmt_join(be, l, r, 0, cmp_all); 
+               join = stmt_join(be, l, r, NULL, 0, cmp_all); 
        }
        jl = stmt_result(be, join, 0);
        jr = stmt_result(be, join, 1);
@@ -2039,16 +2029,16 @@ rel2bin_semijoin(backend *be, sql_rel *r
                if (list_length(lje) > 1) {
                        join = releqjoin(be, lje, rje, 0 /* no hash used */, 
cmp_equal, 0);
                } else if (!join && list_length(lje) == list_length(rje) && 
list_length(lje)) {
-                       join = stmt_join(be, lje->h->data, rje->h->data, 0, 
cmp_equal);
+                       join = stmt_join(be, lje->h->data, rje->h->data, NULL, 
0, cmp_equal);
                } else if (!join) {
                        stmt *l = bin_first_column(be, left);
                        stmt *r = bin_first_column(be, right);
-                       join = stmt_join(be, l, r, 0, cmp_all); 
+                       join = stmt_join(be, l, r, NULL, 0, cmp_all); 
                }
        } else {
                stmt *l = bin_first_column(be, left);
                stmt *r = bin_first_column(be, right);
-               join = stmt_join(be, l, r, 0, cmp_all); 
+               join = stmt_join(be, l, r, NULL, 0, cmp_all); 
        }
        jl = stmt_result(be, join, 0);
        if (en) {
@@ -3153,7 +3143,7 @@ insert_check_ukey(backend *be, list *ins
                        s = stmt_project(be, nn, s);
                }
                if (h->nrcols) {
-                       s = stmt_join(be, s, h, 0, cmp_equal);
+                       s = stmt_join(be, s, h, NULL, 0, cmp_equal);
                        /* s should be empty */
                        s = stmt_result(be, s, 0);
                        s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
@@ -3561,7 +3551,7 @@ update_check_ukey(backend *be, stmt **up
 
                                /* join groups with extend to retrieve all 
oid's of the original
                                 * bat that belong to a group with Cnt >1 */
-                               g = stmt_join(be, grp, ext, 0, cmp_equal);
+                               g = stmt_join(be, grp, ext, NULL, 0, cmp_equal);
                                cand = stmt_result(be, g, 0);
                                grp = stmt_project(be, cand, grp);
                        }
@@ -3635,7 +3625,7 @@ update_check_ukey(backend *be, stmt **up
 
                        h = updates[c->c->colnr];
                        o = stmt_col(be, c->c, nu_tids);
-                       s = stmt_join(be, o, h, 0, cmp_equal);
+                       s = stmt_join(be, o, h, NULL, 0, cmp_equal);
                        s = stmt_result(be, s, 0);
                        s = stmt_binop(be, stmt_aggr(be, s, NULL, NULL, cnt, 1, 
0, 1), stmt_atom_lng(be, 0), ne);
                }
@@ -3799,7 +3789,7 @@ join_updated_pkey(backend *be, sql_key *
        fdels = stmt_tid(be, k->idx->t, 0);
        rows = stmt_idx(be, k->idx, fdels);
 
-       rows = stmt_join(be, rows, tids, 0, cmp_equal); /* join over the join 
index */
+       rows = stmt_join(be, rows, tids, NULL, 0, cmp_equal); /* join over the 
join index */
        rows = stmt_result(be, rows, 0);
 
        for (m = k->idx->columns->h, o = rk->columns->h; m && o; m = m->next, o 
= o->next) {
@@ -3906,7 +3896,7 @@ sql_update_cascade_Fkeys(backend *be, sq
        ftids = stmt_tid(be, k->idx->t, 0);
        rows = stmt_idx(be, k->idx, ftids);
 
-       rows = stmt_join(be, rows, utids, 0, cmp_equal); /* join over the join 
index */
+       rows = stmt_join(be, rows, utids, NULL, 0, cmp_equal); /* join over the 
join index */
        upd_ids = stmt_result(be, rows, 1);
        rows = stmt_result(be, rows, 0);
        rows = stmt_project(be, rows, ftids);
@@ -4509,7 +4499,7 @@ sql_delete_ukey(backend *be, stmt *utids
 
                        tids = stmt_tid(be, fk->idx->t, 0);
                        s = stmt_idx(be, fk->idx, tids);
-                       s = stmt_join(be, s, utids, 0, cmp_equal); /* join over 
the join index */
+                       s = stmt_join(be, s, utids, NULL, 0, cmp_equal); /* 
join over the join index */
                        s = stmt_result(be, s, 0);
                        tids = stmt_project(be, s, tids);
                        if(cascade) { //for truncate statements with the 
cascade option
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
@@ -1789,7 +1789,7 @@ stmt_tinter(backend *be, stmt *op1, stmt
 }
 
 stmt *
-stmt_join(backend *be, stmt *op1, stmt *op2, int anti, comp_type cmptype)
+stmt_join(backend *be, stmt *op1, stmt *op2, stmt *op3, int anti, comp_type 
cmptype)
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
@@ -1811,7 +1811,7 @@ stmt_join(backend *be, stmt *op1, stmt *
                q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                q = pushArgument(mb, q, op1->nr);
                q = pushArgument(mb, q, op2->nr);
-               q = pushNil(mb, q, TYPE_bat);
+               q = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, FALSE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1823,7 +1823,7 @@ stmt_join(backend *be, stmt *op1, stmt *
                q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                q = pushArgument(mb, q, op1->nr);
                q = pushArgument(mb, q, op2->nr);
-               q = pushNil(mb, q, TYPE_bat);
+               q = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, TRUE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1835,7 +1835,7 @@ stmt_join(backend *be, stmt *op1, stmt *
                q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                q = pushArgument(mb, q, op1->nr);
                q = pushArgument(mb, q, op2->nr);
-               q = pushNil(mb, q, TYPE_bat);
+               q = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, FALSE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1850,116 +1850,7 @@ stmt_join(backend *be, stmt *op1, stmt *
                q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
                q = pushArgument(mb, q, op1->nr);
                q = pushArgument(mb, q, op2->nr);
-               q = pushNil(mb, q, TYPE_bat);
-               q = pushNil(mb, q, TYPE_bat);
-               if (cmptype == cmp_lt)
-                       q = pushInt(mb, q, -1);
-               else if (cmptype == cmp_lte)
-                       q = pushInt(mb, q, -2);
-               else if (cmptype == cmp_gt)
-                       q = pushInt(mb, q, 1);
-               else if (cmptype == cmp_gte)
-                       q = pushInt(mb, q, 2);
-               q = pushBit(mb, q, TRUE);
-               q = pushNil(mb, q, TYPE_lng);
-               if (q == NULL)
-                       return NULL;
-               break;
-       case cmp_all:   /* aka cross table */
-               q = newStmt(mb, algebraRef, crossRef);
-               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
-               q = pushArgument(mb, q, op1->nr);
-               q = pushArgument(mb, q, op2->nr);
-               if (q == NULL)
-                       return NULL;
-               break;
-       case cmp_joined:
-               q = op1->q;
-               break;
-       default:
-               showException(GDKout, SQL, "sql", "SQL2MAL: error 
impossible\n");
-       }
-       if (q) {
-               stmt *s = stmt_create(be->mvc->sa, st_join);
-
-               s->op1 = op1;
-               s->op2 = op2;
-               s->flag = cmptype;
-               s->key = 0;
-               s->nrcols = 2;
-               s->nr = getDestVar(q);
-               s->q = q;
-               return s;
-       }
-       return NULL;
-}
-
-stmt *
-stmt_join_foo(backend *be, stmt *op1, stmt *op2, stmt *op3, int anti, 
comp_type cmptype);
-
-stmt *
-stmt_join_foo(backend *be, stmt *op1, stmt *op2, stmt *op3, int anti, 
comp_type cmptype)
-{
-       MalBlkPtr mb = be->mb;
-       InstrPtr q = NULL;
-       int left = (cmptype == cmp_left);
-       const char *sjt = "join";
-
-       (void)anti;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to