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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list