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