Skip to content

Commit

Permalink
expression: use maximum length for integer display (#56463)
Browse files Browse the repository at this point in the history
close #45338, close #56462
  • Loading branch information
dveeden authored Oct 14, 2024
1 parent 87f42ea commit e017e1b
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
23 changes: 18 additions & 5 deletions pkg/expression/builtin_control.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,25 @@ func setFlenFromArgs(evalType types.EvalType, resultFieldType *types.FieldType,
} else if evalType == types.ETString {
maxLen := 0
for i := range argTps {
argFlen := argTps[i].GetFlen()
if argFlen == types.UnspecifiedLength {
resultFieldType.SetFlen(types.UnspecifiedLength)
return
switch argTps[i].GetType() {
case mysql.TypeTiny:
maxLen = maxlen(4, maxLen)
case mysql.TypeShort:
maxLen = maxlen(6, maxLen)
case mysql.TypeInt24:
maxLen = maxlen(9, maxLen)
case mysql.TypeLong:
maxLen = maxlen(11, maxLen)
case mysql.TypeLonglong:
maxLen = maxlen(20, maxLen)
default:
argFlen := argTps[i].GetFlen()
if argFlen == types.UnspecifiedLength {
resultFieldType.SetFlen(types.UnspecifiedLength)
return
}
maxLen = maxlen(argFlen, maxLen)
}
maxLen = maxlen(argFlen, maxLen)
}
resultFieldType.SetFlen(maxLen)
} else {
Expand Down
6 changes: 6 additions & 0 deletions tests/integrationtest/r/expression/issues.result
Original file line number Diff line number Diff line change
Expand Up @@ -3224,3 +3224,9 @@ Warning 1292 Truncated incorrect DOUBLE value: 'a'
Warning 1292 Truncated incorrect DOUBLE value: 'a'
Warning 1292 Truncated incorrect DOUBLE value: 'b'
Warning 1292 Truncated incorrect DOUBLE value: 'b'
DROP TABLE IF EXISTS test.t;
CREATE TABLE test.t (id bigint(11) UNSIGNED PRIMARY KEY);
INSERT INTO test.t VALUES (1234567890123456);
SELECT IFNULL(id, 'abcdef') FROM test.t;
IFNULL(id, 'abcdef')
1234567890123456
6 changes: 6 additions & 0 deletions tests/integrationtest/t/expression/issues.test
Original file line number Diff line number Diff line change
Expand Up @@ -2176,3 +2176,9 @@ select (cast(f1 as float) = 1) or (cast(f1 as float) = 2) from test.t;
SHOW WARNINGS;
select (cast(f1 as float) != 1) and (cast(f1 as float) != 2) from test.t;
SHOW WARNINGS;

# TestIssue56462
DROP TABLE IF EXISTS test.t;
CREATE TABLE test.t (id bigint(11) UNSIGNED PRIMARY KEY);
INSERT INTO test.t VALUES (1234567890123456);
SELECT IFNULL(id, 'abcdef') FROM test.t;

0 comments on commit e017e1b

Please sign in to comment.