expression: UPPER and LOWER should return a binary string when input is a binary string (#3744)
This commit is contained in:
@ -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))
|
||||
}
|
||||
|
||||
@ -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},
|
||||
|
||||
Reference in New Issue
Block a user