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