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

Reply via email to