maria-developers team mailing list archive
Mailing list archive
Re: MDEV-13118 Wrong results with LOWER and UPPER and subquery
On Nov 02, Alexander Barkov wrote:
> >> commit dc7352fa2bc21fd9b66b12ec33cdacf88b478157
> >> Author: Alexander Barkov <bar@xxxxxxxxxxx>
> >> Date: Tue Jun 20 12:44:36 2017 +0400
> >> MDEV-13118 Wrong results with LOWER and UPPER and subquery
> >> This problem is similar to MDEV-10306.
> >> 1. Fixing Item_str_conv::val_str(String *str) to return the result in "str",
> >> 2. Removing the optimization that *some* character sets used in casedn()
> >> and caseup(), which allowed (and required) to change the case in-place,
> > I don't understand why it was needed. If the goal is to return the
> > result in 'str' and never in 'tmp_value', it could've been achieved
> > without doing 1. or 2., something like
> There was a symmetry in the charset library in caseup() and casedn()
> implementations for various charsets:
> That was done specifically for Item_str_conv.
> Now with Item_str_conv returning the value in "str" anyway:
> - This optimization is not needed any more.
> There is no sense to do case conversion inplace and
> then immediately copy the modified string to another String
> (or the other way around: copy to a new String and then
> convert inplace).
> - It's good to make the charset library symmetric for all charsets
Could you split this commit in two, then? Should be as easy as using
'git citool' to move all strings/* and include/* changes into a separate
changeset with the comment like
Simplify caseup() and casedn() in charsets
After the MDEV-13118 fix there's no code in the server that
wants caseup/casedn to change the argument in place for simple
charsets. Let's remove this logic and always return the result in a
new string for all charsets, both simple and complex.
Chief Architect MariaDB