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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list