Changeset: 47dafd54172e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=47dafd54172e
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: in-value-list
Log Message:

Backed out changeset 9a203eca21c8


diffs (truncated from 384 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
@@ -256,7 +256,7 @@ row2cols(backend *be, stmt *sub)
 }
 
 static stmt *
-value_list(backend *be, list *vals, stmt *left, stmt *sel) 
+value_list(backend *be, list *vals, stmt *left) 
 {
        node *n;
        stmt *s;
@@ -265,7 +265,7 @@ value_list(backend *be, list *vals, stmt
        s = stmt_temp(be, exp_subtype(vals->h->data));
        for( n = vals->h; n; n = n->next) {
                sql_exp *e = n->data;
-               stmt *i = exp_bin(be, e, left, NULL, NULL, NULL, NULL, sel);
+               stmt *i = exp_bin(be, e, left, NULL, NULL, NULL, NULL, NULL);
 
                if (!i)
                        return NULL;
@@ -347,7 +347,7 @@ handle_in_exps(backend *be, sql_exp *ce,
                s = distinct_value_list(be, nl, &last_null_value);
                s = stmt_project(be, stmt_selectnonil(be, s, NULL), s); // The 
actual in-value-list should not contain null values.
 
-               s = stmt_join(be, c, s, NULL, in, cmp_equal);
+               s = stmt_join(be, c, s, in, cmp_equal);
                s = stmt_result(be, s, 0);
 
                if (!in) {
@@ -502,7 +502,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                } else if (e->r) {              /* parameters */
                        s = stmt_var(be, sa_strdup(sql->sa, e->r), 
e->tpe.type?&e->tpe:NULL, 0, e->flag);
                } else if (e->f) {              /* values */
-                       s = value_list(be, e->f, left, sel);
+                       s = value_list(be, e->f, left);
                } else {                        /* arguments */
                        s = stmt_varnr(be, e->flag, e->tpe.type?&e->tpe:NULL);
                }
@@ -866,9 +866,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, NULL, is_anti(e), 
swap_compare((comp_type)e->flag));
+                               s = stmt_join(be, r, l, is_anti(e), 
swap_compare((comp_type)e->flag));
                        } else {
-                               s = stmt_join(be, l, r, NULL, is_anti(e), 
(comp_type)e->flag);
+                               s = stmt_join(be, l, r, is_anti(e), 
(comp_type)e->flag);
                        }
                } else {
                        if (r2) {
@@ -1722,12 +1722,12 @@ rel2bin_hash_lookup(backend *be, sql_rel
        }
        if (h && h->nrcols) {
                if (!swap_rel) {
-                       return stmt_join(be, idx, h, NULL, 0, comp);
+                       return stmt_join(be, idx, h, 0, cmp_equal);
                } else {
-                       return stmt_join(be, h, idx, NULL, 0, comp);
+                       return stmt_join(be, h, idx, 0, cmp_equal);
                }
        } else {
-               return stmt_uselect(be, idx, h, comp, NULL, 0);
+               return stmt_uselect(be, idx, h, cmp_equal, NULL, 0);
        }
 }
 
@@ -1767,7 +1767,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, NULL, 0, cmp_op);
+               r =  stmt_join(be, l, r, 0, cmp_op);
                if (need_left)
                        r->flag = cmp_left;
                return r;
@@ -1777,11 +1777,11 @@ releqjoin( backend *be, list *l1, list *
                r = n2->data;
                n1 = n1->next;
                n2 = n2->next;
-               res = stmt_join(be, l, r, NULL, 0, cmp_op);
+               res = stmt_join(be, l, r, 0, cmp_op);
        } else { /* need hash */
                l = join_hash_key(be, l1);
                r = join_hash_key(be, l2);
-               res = stmt_join(be, l, r, NULL, 0, cmp_op == cmp_equal ? 
cmp_equal_nil : cmp_op);
+               res = stmt_join(be, l, r, 0, cmp_op == cmp_equal ? 
cmp_equal_nil : cmp_op);
        }
        if (need_left) 
                res->flag = cmp_left;
@@ -1804,7 +1804,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, NULL, 0, cmp_joined);
+       res = stmt_join(be, l, r, 0, cmp_joined);
        return res;
 }
 
@@ -1866,7 +1866,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, NULL, 0, 
cmp_all); 
+                                       join = stmt_join(be, l, r, 0, cmp_all); 
                                }
                                break;
                        }
@@ -1905,13 +1905,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, NULL, 0, 
cmp_all);
+                                       join = stmt_join(be, l, r, 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, NULL, 0, 
cmp_all); 
+                                       join = stmt_join(be, l, r, 0, cmp_all); 
                                }
                                break;
                        }
@@ -1924,14 +1924,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, NULL, 
0, cmp_equal);
+                       join = stmt_join(be, lje->h->data, rje->h->data, 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, NULL, 0, cmp_all); 
+               join = stmt_join(be, l, r, 0, cmp_all); 
        }
        jl = stmt_result(be, join, 0);
        jr = stmt_result(be, join, 1);
@@ -2153,16 +2153,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, NULL, 
0, cmp_equal);
+                       join = stmt_join(be, lje->h->data, rje->h->data, 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, NULL, 0, cmp_all); 
+                       join = stmt_join(be, l, r, 0, cmp_all); 
                }
        } else {
                stmt *l = bin_first_column(be, left);
                stmt *r = bin_first_column(be, right);
-               join = stmt_join(be, l, r, NULL, 0, cmp_all); 
+               join = stmt_join(be, l, r, 0, cmp_all); 
        }
        jl = stmt_result(be, join, 0);
        if (en) {
@@ -3265,7 +3265,7 @@ insert_check_ukey(backend *be, list *ins
                        s = stmt_project(be, nn, s);
                }
                if (h->nrcols) {
-                       s = stmt_join(be, s, h, NULL, 0, cmp_equal);
+                       s = stmt_join(be, s, h, 0, cmp_equal);
                        /* s should be empty */
                        s = stmt_result(be, s, 0);
                        s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
@@ -3694,7 +3694,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, NULL, 0, cmp_equal);
+                               g = stmt_join(be, grp, ext, 0, cmp_equal);
                                cand = stmt_result(be, g, 0);
                                grp = stmt_project(be, cand, grp);
                        }
@@ -3768,7 +3768,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, NULL, 0, cmp_equal);
+                       s = stmt_join(be, o, h, 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);
                }
@@ -3932,7 +3932,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, NULL, 0, cmp_equal); /* join over the 
join index */
+       rows = stmt_join(be, rows, tids, 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) {
@@ -4043,7 +4043,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, NULL, 0, cmp_equal); /* join over the 
join index */
+       rows = stmt_join(be, rows, utids, 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);
@@ -4679,7 +4679,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, NULL, 0, cmp_equal); /* 
join over the join index */
+                       s = stmt_join(be, s, utids, 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
@@ -1841,7 +1841,7 @@ stmt_tinter(backend *be, stmt *op1, stmt
 }
 
 stmt *
-stmt_join(backend *be, stmt *op1, stmt *op2, stmt *op3, int anti, comp_type 
cmptype)
+stmt_join(backend *be, stmt *op1, stmt *op2, int anti, comp_type cmptype)
 {
        MalBlkPtr mb = be->mb;
        InstrPtr q = NULL;
@@ -1863,7 +1863,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 = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
+               q = pushNil(mb, q, TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, FALSE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1875,7 +1875,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 = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
+               q = pushNil(mb, q, TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, TRUE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1887,7 +1887,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 = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
+               q = pushNil(mb, q, TYPE_bat);
                q = pushNil(mb, q, TYPE_bat);
                q = pushBit(mb, q, FALSE);
                q = pushNil(mb, q, TYPE_lng);
@@ -1902,7 +1902,116 @@ 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 = op3 ? pushArgument(mb, q, op3->nr) : pushNil(mb, q, 
TYPE_bat);
+               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;
+       }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to