Changeset: 54534c2b3379 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=54534c2b3379
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out
Branch: default
Log Message:
Merge with Jul2017 branch.
diffs (141 lines):
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -68,7 +68,8 @@ rel_no_mitosis(sql_rel *rel)
if (!rel || is_basetable(rel->op))
return 1;
- if (is_topn(rel->op) || is_project(rel->op))
+ //if (is_topn(rel->op) || is_project(rel->op))
+ if (is_topn(rel->op) || rel->op == op_project)
return rel_no_mitosis(rel->l);
if (is_modify(rel->op) && rel->card <= CARD_AGGR)
return rel_no_mitosis(rel->r);
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
@@ -36,7 +36,7 @@ Ready.
# FROM alig
# WHERE qname IN (
# SELECT qname
-% bam.L44, bam.L46, bam.L50, bam.L52, bam.L54 #
table_name
+% bam.L43, bam.L45, bam.L47, bam.L51, bam.L53 #
table_name
% qname, l_seq, qual1, r_seq, qual2 # name
% clob, clob, clob, clob, clob # type
% 0, 0, 0, 0, 0 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
@@ -37,7 +37,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L24, bam.L26, bam.L30, bam.L32, bam.L34,
bam.L36, bam.L40, bam.L42, bam.L44, bam.L46,
bam.L50, bam.L52, bam.L54, bam.L56, bam.L60,
bam.L62, bam.L64, bam.L66, bam.L70, bam.L72,
bam.L74 # table_name
+% bam.L23, bam.L25, bam.L27, bam.L31, bam.L33,
bam.L35, bam.L37, bam.L41, bam.L43, bam.L45,
bam.L47, bam.L51, bam.L53, bam.L55, bam.L57,
bam.L61, bam.L63, bam.L65, bam.L67, bam.L71,
bam.L73 # table_name
% qname, l_flag, l_rname, l_pos, l_mapq, l_cigar,
l_rnext, l_pnext, l_tlen, l_seq, qual1, r_flag, r_rname,
r_pos, r_mapq, r_cigar, r_rnext, r_pnext, r_tlen, r_seq,
qual2 # name
% clob, smallint, clob, int, smallint, clob, clob,
int, int, clob, clob, smallint, clob, int, smallint,
clob, clob, int, int, clob, clob # type
% 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
0 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
@@ -36,7 +36,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L33, bam.L36 # table_name
+% bam.L32, bam.L35 # table_name
% distance, nr_alignments # name
% bigint, bigint # type
% 3, 1 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
--- a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
@@ -36,7 +36,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L33, bam.L36 # table_name
+% bam.L32, bam.L35 # table_name
% distance, nr_alignments # name
% hugeint, bigint # type
% 3, 1 # length
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -8862,9 +8862,17 @@ rel_apply_rewrite(int *changes, mvc *sql
exp_label(sql->sa, col,
++sql->label);
append(r->exps, col);
}
+ /*
} else if (is_semi(rl->op)) {
sql_rel *l = rl->l;
+ if (!is_project(l->op))
+ rl->l = l =
rel_project(sql->sa, l, rel_projections(sql, l, NULL, 1, 1));
col = l->exps->t->data;
+ */
+ } else if (!is_project(rl->op)) {
+ rl = rel_project(sql->sa, rl,
rel_projections(sql, rl, NULL, 1, 1));
+ r->l = rl;
+ col = rl->exps->t->data;
} else if (is_project(rl->op) && rl->exps) {
col = rl->exps->t->data;
col = exp_column(sql->sa,
exp_relname(col), exp_name(col), exp_subtype(col), col->card, has_nil(col),
is_intern(col));
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
@@ -2554,23 +2554,26 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
ek.card = card_set;
select = rel_select(sql->sa, rel_dup(rel), NULL); /*
dup to make sure we get a new select op */
rel_destroy(rel);
- pexps = rel_projections(sql, rel, NULL, 1, 1);
/* first remove the NULLs */
if (!l_is_value && sc->token == SQL_NOT_IN &&
l->card != CARD_ATOM && has_nil(l)) {
sql_exp *ol;
- rel = rel_project(sql->sa, rel,
rel_projections(sql, rel, NULL, 1, 1));
- select->l = rel;
- l = exp_label(sql->sa, l, ++sql->label);
- append(rel->exps, l);
- ol = l;
- l = exp_column(sql->sa, exp_relname(ol),
exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol), is_intern(ol));
+ if (l->type != e_column) {
+ pexps = rel_projections(sql, rel, NULL,
1, 1);
+ rel = rel_project(sql->sa, rel,
rel_projections(sql, rel, NULL, 1, 1));
+ select->l = rel;
+ l = exp_label(sql->sa, l, ++sql->label);
+ append(rel->exps, l);
+ ol = l;
+ l = exp_column(sql->sa,
exp_relname(ol), exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol),
is_intern(ol));
+ }
e = rel_unop_(sql, l, NULL, "isnull",
card_value);
e = exp_compare(sql->sa, e,
exp_atom_bool(sql->sa, 0), cmp_equal);
rel_select_add_exp(sql->sa, select, e);
- l = exp_column(sql->sa, exp_relname(ol),
exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol), is_intern(ol));
+ if (pexps)
+ l = exp_column(sql->sa,
exp_relname(ol), exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol),
is_intern(ol));
}
rel = left = select;
@@ -2716,7 +2719,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
rel_select_add_exp(sql->sa, select, e);
if (l_is_value && sc->token == SQL_NOT_IN)
set_anti(e);
- if (pexps && !right) {
+ if (pexps && !right && sc->token == SQL_NOT_IN){
rel = rel_project(sql->sa, rel, pexps);
reset_processed(rel);
}
diff --git a/sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out
b/sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out
--- a/sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out
+++ b/sql/test/BugTracker-2015/Tests/and_or_in.Bug-3655.stable.out
@@ -33,7 +33,7 @@ Ready.
#INSERT INTO employee (employee_id,manager_id) values (70,null);
[ 1 ]
#select employee_id, manager_id from employee where employee_id = 60 and
(manager_id in (-1) or -1 in (-1));
-% .employee, .employee # table_name
+% sys.employee, sys.employee # table_name
% employee_id, manager_id # name
% int, int # type
% 2, 2 # length
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list