Changeset: 92b921f6c607 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/92b921f6c607
Modified Files:
        sql/server/rel_optimizer.c
Branch: default
Log Message:

More clean practices


diffs (115 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
@@ -27,8 +27,6 @@ typedef struct global_props {
                has_mergetable:1;
 } global_props;
 
-static sql_subfunc *find_func(mvc *sql, char *name, list *exps);
-
 static int
 find_member_pos(list *l, sql_table *t)
 {
@@ -1617,7 +1615,7 @@ rel_push_count_down(visitor *v, sql_rel 
                sql_rel *gbl, *gbr;             /* Group By */
                sql_rel *cp;                    /* Cross Product */
                sql_subfunc *mult;
-               list *args;
+               list *args, *types;
                sql_rel *srel;
 
                oce = rel->exps->h->data;
@@ -1651,9 +1649,12 @@ rel_push_count_down(visitor *v, sql_rel 
                        append(args, cnt);
                }
 
-               mult = find_func(v->sql, "sql_mul", args);
                cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join);
 
+               types = sa_list(v->sql->sa);
+               for(node *n = args->h; n; n = n->next)
+                       list_append(types, exp_subtype(n->data));
+               mult = sql_bind_func_(v->sql, "sys", "sql_mul", types, F_FUNC);
                nce = exp_op(v->sql->sa, args, mult);
                if (exp_name(oce))
                        exp_prop_alias(v->sql->sa, nce, oce);
@@ -2940,17 +2941,6 @@ rel_merge_projects(visitor *v, sql_rel *
        return rel;
 }
 
-static sql_subfunc *
-find_func( mvc *sql, char *name, list *exps )
-{
-       list * l = sa_list(sql->sa);
-       node *n;
-
-       for(n = exps->h; n; n = n->next)
-               append(l, exp_subtype(n->data));
-       return sql_bind_func_(sql, "sys", name, l, F_FUNC);
-}
-
 static inline int
 str_ends_with(const char *s, const char *suffix)
 {
@@ -3924,14 +3914,18 @@ exps_merge_select_rse( mvc *sql, list *l
                                fnd = exp_in(sql->sa, le->l, exps, cmp_in);
                        } else if (le->f && re->f && /* merge ranges */
                                   le->flag == re->flag && le->flag <= cmp_lt) {
-                               sql_subfunc *min = sql_bind_func(sql, "sys", 
"sql_min", exp_subtype(le->r), exp_subtype(re->r), F_FUNC);
-                               sql_subfunc *max = sql_bind_func(sql, "sys", 
"sql_max", exp_subtype(le->f), exp_subtype(re->f), F_FUNC);
-                               sql_exp *mine, *maxe;
-
-                               if (!min || !max)
+                               sql_exp *mine = NULL, *maxe = NULL;
+
+                               if (!(mine = rel_binop_(sql, NULL, le->r, 
re->r, "sys", "sql_min", card_value))) {
+                                       sql->session->status = 0;
+                                       sql->errstr[0] = '\0';
                                        continue;
-                               mine = exp_binop(sql->sa, le->r, re->r, min);
-                               maxe = exp_binop(sql->sa, le->f, re->f, max);
+                               }
+                               if (!(maxe = rel_binop_(sql, NULL, le->f, 
re->f, "sys", "sql_max", card_value))) {
+                                       sql->session->status = 0;
+                                       sql->errstr[0] = '\0';
+                                       continue;
+                               }
                                fnd = exp_compare2(sql->sa, le->l, mine, maxe, 
CMP_BETWEEN|le->flag);
                                lmerged = false;
                        }
@@ -8479,6 +8473,7 @@ rel_reduce_casts(visitor *v, sql_rel *re
                                                atom *a;
 
                                                if (fst->scale && fst->scale == 
ft->scale && (a = exp_value(v->sql, ce)) != NULL) {
+                                                       sql_exp *arg1, *arg2;
 #ifdef HAVE_HGE
                                                        hge val = 1;
 #else
@@ -8490,19 +8485,21 @@ rel_reduce_casts(visitor *v, sql_rel *re
 
                                                        scale -= rs;
 
-                                                       args = 
new_exp_list(v->sql->sa);
                                                        while(scale > 0) {
                                                                scale--;
                                                                val *= 10;
                                                        }
-                                                       append(args, re);
+                                                       arg1 = re;
 #ifdef HAVE_HGE
-                                                       append(args, 
exp_atom_hge(v->sql->sa, val));
+                                                       arg2 = 
exp_atom_hge(v->sql->sa, val);
 #else
-                                                       append(args, 
exp_atom_lng(v->sql->sa, val));
+                                                       arg2 = 
exp_atom_lng(v->sql->sa, val);
 #endif
-                                                       f = find_func(v->sql, 
"scale_down", args);
-                                                       nre = 
exp_op(v->sql->sa, args, f);
+                                                       if (!(nre = 
rel_binop_(v->sql, NULL, arg1, arg2, "sys", "scale_down", card_value))) {
+                                                               
v->sql->session->status = 0;
+                                                               
v->sql->errstr[0] = '\0';
+                                                               continue;
+                                                       }
                                                        e = 
exp_compare(v->sql->sa, le->l, nre, e->flag);
                                                        v->changes++;
                                                }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to