Skip to content

Commit

Permalink
expression: use maximum length for integer display (#56463) (#56927)
Browse files Browse the repository at this point in the history
close #41719, close #45338, close #56462
  • Loading branch information
ti-chi-bot authored Dec 26, 2024
1 parent f3f44da commit 73d3b90
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 @@ -83,12 +83,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 @@ -3192,3 +3192,9 @@ Projection 8.00 root test.ast.i, Column#32
└─TableReader(Probe) 10.00 root data:Selection
└─Selection 10.00 cop[tikv] eq("astp2019121731703151", test.acc.m)
└─TableFullScan 10000.00 cop[tikv] table:b keep order:false, stats:pseudo
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 @@ -2161,3 +2161,9 @@ drop table if exists test.t;
create table if not exists test.ast (i varchar(20));
create table if not exists test.acc (j varchar(20), k varchar(20), l varchar(20), m varchar(20));
explain format='brief' with t as(select i, (case when b.j = '20001' then b.l else b.k end) an from test.ast a inner join test.acc b on (a.i = b.m) and a.i = 'astp2019121731703151'), t1 as (select i, group_concat(an order by an separator '; ') an from t group by i) select * from t1;

# 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 73d3b90

Please sign in to comment.