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