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

Copy atom's value and make sure input expressions for topn/sample relations are 
bigint


diffs (39 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2786,7 +2786,7 @@ exp_copy(mvc *sql, sql_exp * e)
        }
        case e_atom:
                if (e->l)
-                       ne = exp_atom(sql->sa, e->l);
+                       ne = exp_atom(sql->sa, atom_dup(sql->sa, e->l));
                else if (e->r) {
                        sql_var_name *vname = (sql_var_name*) e->r;
                        ne = exp_param_or_declared(sql->sa, vname->sname, 
vname->name, &e->tpe, e->flag);
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
@@ -1879,15 +1879,16 @@ rel_simplify_fk_joins(visitor *v, sql_re
 static list *
 sum_limit_offset(mvc *sql, sql_rel *rel)
 {
-       /* for sample we always propagate */
-       if (is_sample(rel->op))
+       /* for sample we always propagate, or if the expression list only 
consists of a limit expression, we copy it */
+       if (is_sample(rel->op) || list_length(rel->exps) == 1)
                return exps_copy(sql, rel->exps);
-       /* if the expression list only consists of a limit expression, we copy 
it */
-       if (list_length(rel->exps) == 1 && rel->exps->h->data)
-               return list_append(sa_list(sql->sa), rel->exps->h->data);
+       assert(list_length(rel->exps) == 2);
        sql_subtype *lng = sql_bind_localtype("lng");
-       sql_subfunc *add = sql_bind_func_result(sql, "sys", "sql_add", F_FUNC, 
lng, 2, lng, lng);
-       return list_append(sa_list(sql->sa), exp_op(sql->sa, rel->exps, add));
+       sql_exp *add = rel_binop_(sql, NULL, exp_copy(sql, rel->exps->h->data), 
exp_copy(sql, rel->exps->h->next->data), "sys", "sql_add", card_value);
+       /* for remote plans, make sure the output type is a bigint */
+       if (subtype_cmp(lng, exp_subtype(add)) != 0)
+               add = exp_convert(sql->sa, add, exp_subtype(add), lng);
+       return list_append(sa_list(sql->sa), add);
 }
 
 static int
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to