maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #05284
Re: Rev 3639: MDEV-4292 fix
Hi, Sanja!
On Mar 19, sanja@xxxxxxxxxxxx wrote:
> At file:///home/bell/maria/bzr/work-maria-5.3-MDEV-4292/
>
> ------------------------------------------------------------
> revno: 3639
> revision-id: sanja@xxxxxxxxxxxx-20130319105139-bxfigoel9pdbgwsn
> parent: sergii@xxxxxxxxx-20130318074424-frdzldas283cvx1w
> committer: sanja@xxxxxxxxxxxx
> branch nick: work-maria-5.3-MDEV-4292
> timestamp: Tue 2013-03-19 12:51:39 +0200
> message:
> MDEV-4292 fix.
>
> Fixed printing column_get finction.
>
> === modified file 'sql/item_func.cc'
> --- a/sql/item_func.cc 2013-03-18 07:44:24 +0000
> +++ b/sql/item_func.cc 2013-03-19 10:51:39 +0000
> @@ -965,7 +965,11 @@ my_decimal *Item_func_numhybrid::val_dec
>
> void Item_func_signed::print(String *str, enum_query_type query_type)
> {
> - str->append(STRING_WITH_LEN("cast("));
> + if (args[0]->type() == FUNC_ITEM &&
> + ((Item_func *) args[0])->functype() == DYNCOL_GET_FUNC)
> + str->append(STRING_WITH_LEN("column_get("));
> + else
> + str->append(STRING_WITH_LEN("cast("));
> args[0]->print(str, query_type);
> str->append(STRING_WITH_LEN(" as signed)"));
So, as I said on irc, I don't quite like it.
An Item should be independent from its arguments are should not
change its name depending on the arguments.
I've considered other approaches, like storing item_cast in the
Item_dyncol_get or inheriting Item_dyncol_get from cast. But they all
complicate the code notably.
So, an easy fix that wouldn't contaminate item_cast, could be
void Item_dyncol_get::print(String *str, enum_query_type query_type)
{
DBUG_ASSERT(strncmp(str->ptr() - 5, "cast(", 5) == 0); // see create_func_dyncol_get
str->length(str->length() - 5); // removing "cast("
str->append(STRING_WITH_LEN("column_get("));
args[0]->print(str, query_type);
str->append(',');
args[1]->print(str, query_type);
// let the parent cast item add " as <type>)"
}
Regards,
Sergei