expression: UPPER and LOWER should return a binary string when input is a binary string (#3744)

This commit is contained in:
Jian Zhang
2017-07-13 18:44:41 +08:00
committed by Han Fei
parent ec796ba999
commit fefbc3ce69
2 changed files with 12 additions and 2 deletions

View File

@ -446,7 +446,11 @@ func (c *lowerFunctionClass) getFunction(args []Expression, ctx context.Context)
if err != nil {
return nil, errors.Trace(err)
}
bf.tp.Flen = args[0].GetType().Flen
argTp := args[0].GetType()
bf.tp.Flen = argTp.Flen
if mysql.HasBinaryFlag(argTp.Flag) {
types.SetBinChsClnFlag(bf.tp)
}
sig := &builtinLowerSig{baseStringBuiltinFunc{bf}}
return sig.setSelf(sig), errors.Trace(c.verifyArgs(args))
}
@ -549,7 +553,11 @@ func (c *upperFunctionClass) getFunction(args []Expression, ctx context.Context)
if err != nil {
return nil, errors.Trace(err)
}
bf.tp.Flen = args[0].GetType().Flen
argTp := args[0].GetType()
bf.tp.Flen = argTp.Flen
if mysql.HasBinaryFlag(argTp.Flag) {
types.SetBinChsClnFlag(bf.tp)
}
sig := &builtinUpperSig{baseStringBuiltinFunc{bf}}
return sig.setSelf(sig), errors.Trace(c.verifyArgs(args))
}

View File

@ -93,7 +93,9 @@ func (s *testPlanSuite) TestInferType(c *C) {
{"left(c_int, c_int)", mysql.TypeVarString, charset.CharsetUTF8, 0, 11, types.UnspecifiedLength},
{"right(c_int, c_int)", mysql.TypeVarString, charset.CharsetUTF8, 0, 11, types.UnspecifiedLength},
{"lower(c_int)", mysql.TypeVarString, charset.CharsetUTF8, 0, 11, types.UnspecifiedLength},
{"lower(c_binary)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 20, types.UnspecifiedLength},
{"upper(c_int)", mysql.TypeVarString, charset.CharsetUTF8, 0, 11, types.UnspecifiedLength},
{"upper(c_binary)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 20, types.UnspecifiedLength},
{"replace(1234, 2, 55)", mysql.TypeVarString, charset.CharsetUTF8, 0, 8, types.UnspecifiedLength},
{"replace(c_binary, 1, 2)", mysql.TypeVarString, charset.CharsetBin, mysql.BinaryFlag, 20, types.UnspecifiedLength},
{"to_base64(c_binary)", mysql.TypeVarString, charset.CharsetUTF8, 0, 28, types.UnspecifiedLength},