Changeset: e35e0c25df5e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e35e0c25df5e
Modified Files:
        sql/server/rel_optimizer.c
Branch: Nov2019
Log Message:

Apply more optimizers to semi-joins


diffs (98 lines):

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
@@ -3693,7 +3693,6 @@ equality_exps_2_in( mvc *sql, sql_exp *c
 static sql_rel *
 rel_select_cse(int *changes, mvc *sql, sql_rel *rel) 
 {
-       (void)sql;
        if (is_select(rel->op) && rel->exps) { 
                node *n;
                list *nexps;
@@ -3721,7 +3720,7 @@ rel_select_cse(int *changes, mvc *sql, s
                }
                rel->exps = nexps;
        }
-       if ((is_select(rel->op) || is_join(rel->op)) && rel->exps) { 
+       if ((is_select(rel->op) || is_join(rel->op) || is_semi(rel->op)) && 
rel->exps) { 
                node *n;
                list *nexps;
                int needed = 0;
@@ -3980,7 +3979,7 @@ rel_merge_rse(int *changes, mvc *sql, sq
        /* only execute once per select */
        (void)*changes;
 
-       if ((is_select(rel->op) || is_join(rel->op)) && rel->exps) { 
+       if ((is_select(rel->op) || is_join(rel->op) || is_semi(rel->op)) && 
rel->exps) { 
                node *n, *o;
                list *nexps = new_exp_list(sql->sa);
 
@@ -7202,7 +7201,7 @@ find_index(sql_allocator *sa, sql_rel *r
 
                if ((p = find_prop(e->p, PROP_HASHIDX)) != NULL) {
                        list *exps, *cols;
-                       sql_idx *i = p->value;
+                       sql_idx *i = p->value;
                        fcmp cmp = (fcmp)&sql_column_kc_cmp;
 
                        /* join indices are only interesting for joins */
@@ -7250,7 +7249,6 @@ static sql_rel *
 rel_use_index(int *changes, mvc *sql, sql_rel *rel) 
 {
        (void)changes;
-       (void)sql;
        if (rel->l && (is_select(rel->op) || is_join(rel->op))) {
                list *exps = NULL;
                sql_idx *i = find_index(sql->sa, rel, rel->l, &exps);
@@ -7326,7 +7324,6 @@ static sql_rel *
 rel_select_order(int *changes, mvc *sql, sql_rel *rel) 
 {
        (void)changes;
-       (void)sql;
        if (is_select(rel->op) && rel->exps && list_length(rel->exps)>1) {
                int i, *scores = calloc(list_length(rel->exps), sizeof(int));
                node *n;
@@ -7342,7 +7339,6 @@ rel_select_order(int *changes, mvc *sql,
 static sql_rel *
 rel_simplify_like_select(int *changes, mvc *sql, sql_rel *rel) 
 {
-       (void)sql;
        if (is_select(rel->op) && rel->exps) {
                node *n;
                list *exps;
@@ -7431,7 +7427,7 @@ rel_simplify_like_select(int *changes, m
 static sql_rel *
 rel_simplify_predicates(int *changes, mvc *sql, sql_rel *rel) 
 {
-       if ((is_select(rel->op) || is_join(rel->op)) && rel->exps) {
+       if ((is_select(rel->op) || is_join(rel->op) || is_semi(rel->op)) && 
rel->exps) {
                node *n;
                list *exps = sa_list(sql->sa);
                        
@@ -7690,7 +7686,7 @@ rel_split_project(int *changes, mvc *sql
        if (rel->l)
                rel->l = rel_split_project(changes, sql, rel->l, 
                        
(is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0);
-       if (is_join(rel->op) && rel->r)
+       if ((is_join(rel->op) || is_semi(rel->op)) && rel->r)
                rel->r = rel_split_project(changes, sql, rel->r, 
                        
(is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0);
        return rel;
@@ -7800,7 +7796,7 @@ rel_split_select(int *changes, mvc *sql,
        if (rel->l)
                rel->l = rel_split_select(changes, sql, rel->l, 
                        
(is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0);
-       if (is_join(rel->op) && rel->r)
+       if ((is_join(rel->op) || is_semi(rel->op)) && rel->r)
                rel->r = rel_split_select(changes, sql, rel->r, 
                        
(is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0);
        return rel;
@@ -7930,7 +7926,7 @@ static sql_rel *
 rel_find_range(int *changes, mvc *sql, sql_rel *rel) 
 {
        (void)changes;
-       if ((is_join(rel->op) || is_select(rel->op)) && rel->exps && 
!list_empty(rel->exps)) 
+       if ((is_join(rel->op) || is_semi(rel->op) || is_select(rel->op)) && 
rel->exps && !list_empty(rel->exps)) 
                rel->exps = exp_merge_range(sql->sa, rel->exps);
        return rel;
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to