Changeset: 2bc8e5ab3218 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2bc8e5ab3218
Modified Files:
monetdb5/optimizer/opt_mergetable.c
sql/backends/monet5/rel_bin.c
sql/jdbc/tests/Tests/Test_PSlargebatchval.stable.out
Branch: Oct2020
Log Message:
merged
diffs (113 lines):
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -650,7 +650,7 @@ mat_apply4(MalBlkPtr mb, InstrPtr p, mat
}
static int
-mat_setop(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int n)
+mat_setop(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int n, int o)
{
int tpe = getArgType(mb,p, 0), k, j;
InstrPtr r = newInstruction(mb, matRef, packRef);
@@ -665,6 +665,9 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
assert(m>=0 || n>=0);
if (m >= 0 && n >= 0) {
int nr = 1;
+
+ assert(o < 0 || mat[m].mi->argc == mat[o].mi->argc);
+
for(k=1; k<mat[m].mi->argc; k++) {
InstrPtr q = copyInstruction(p);
InstrPtr s = newInstruction(mb, matRef, packRef);
@@ -700,6 +703,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
getArg(q,0) = newTmpVariable(mb, tpe);
getArg(q,1) = getArg(mat[m].mi,k);
getArg(q,2) = getArg(s,0);
+ if (o >= 0)
+ getArg(q,3) = getArg(mat[o].mi, k);
if(setPartnr(ml, getArg(mat[m].mi,k), getArg(q,0), nr))
{
freeInstruction(q);
freeInstruction(r);
@@ -712,6 +717,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
}
} else {
assert(m >= 0);
+ assert(o < 0 || mat[m].mi->argc == mat[o].mi->argc);
+
for(k=1; k<mat[m].mi->argc; k++) {
InstrPtr q = copyInstruction(p);
if(!q) {
@@ -721,6 +728,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
getArg(q,0) = newTmpVariable(mb, tpe);
getArg(q,1) = getArg(mat[m].mi, k);
+ if (o >= 0)
+ getArg(q,3) = getArg(mat[o].mi, k);
pushInstruction(mb,q);
if(setPartnr(ml, getArg(q, 2), getArg(q,0), k)) {
@@ -2302,7 +2311,8 @@ OPTmergetableImplementation(Client cntxt
getFunctionId(p) == intersectRef) &&
(m=is_a_mat(getArg(p,1), &ml)) >= 0) {
n=is_a_mat(getArg(p,2), &ml);
- if(mat_setop(mb, p, &ml, m, n)) {
+ o=is_a_mat(getArg(p,3), &ml);
+ if(mat_setop(mb, p, &ml, m, n, o)) {
msg =
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto cleanup;
}
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
@@ -362,7 +362,7 @@ subrel_project( backend *be, stmt *s, li
}
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, int depth, int
reduce)
+handle_in_exps(backend *be, sql_exp *ce, list *nl, stmt *left, stmt *right,
stmt *grp, stmt *ext, stmt *cnt, stmt *sel, bool in, int use_r, int depth, int
reduce)
{
mvc *sql = be->mvc;
node *n;
@@ -435,10 +435,9 @@ handle_in_exps(backend *be, sql_exp *ce,
s = stmt_project(be, stmt_selectnonil(be, s, NULL), s);
}
- s = stmt_join(be, c, s, in, cmp_equal, 1, 0, false);
- s = stmt_result(be, s, 0);
-
- if (!in) {
+ if (in) {
+ s = stmt_semijoin(be, c, s, sel, NULL, 0, false);
+ } else {
if (last_null_value) {
/* CORNER CASE ALERT:
In case of a not-in-expression with the
associated in-value-list containing a null value,
@@ -450,24 +449,15 @@ handle_in_exps(backend *be, sql_exp *ce,
list* singleton_bat = sa_list(sql->sa);
list_append(singleton_bat, null_value); */
s = stmt_uselect(be, c, last_null_value,
cmp_equal, NULL, 0, 0);
- return s;
- }
- else {
+ } else {
/* BACK TO HAPPY FLOW:
Make sure that null values are never
returned. */
stmt* non_nulls;
- non_nulls = stmt_selectnonil(be, c, NULL);
- s = stmt_tdiff(be, non_nulls, s, NULL);
+ non_nulls = stmt_selectnonil(be, c, sel);
+ s = stmt_tdiff(be, stmt_project(be, non_nulls,
c), s, NULL);
s = stmt_project(be, s, non_nulls);
}
}
-
- if (sel) {
- stmt* oid_intersection;
- oid_intersection = stmt_tinter(be, s, sel, false);
- s = stmt_project(be, oid_intersection, s);
- s = stmt_result(be, s, 0);
- }
}
return s;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list