executor: query with TiFlash MPP and ORDER BY ... COLLATE ..., id LIMIT 1 panics with index out of range
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
### 1. Minimal reproduce step (Required)
```sql
DROP DATABASE IF EXISTS gc_min_issue;
CREATE DATABASE gc_min_issue;
USE gc_min_issue;
DROP TABLE IF EXISTS t_min_cmp;
CREATE TABLE t_min_cmp (
id bigint NOT NULL,
a int DEFAULT NULL,
b int DEFAULT NULL,
s varchar(1) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO t_min_cmp VALUES (1, 0, 1, 'y');
ALTER TABLE t_min_cmp SET TIFLASH REPLICA 1;
-- wait until TiFlash replica becomes available
SELECT TABLE_SCHEMA, TABLE_NAME, REPLICA_COUNT, AVAILABLE, PROGRESS
FROM information_schema.tiflash_replica
WHERE TABLE_SCHEMA = 'gc_min_issue' AND TABLE_NAME = 't_min_cmp';
SET @@tidb_isolation_read_engines = 'tiflash';
SET @@tidb_allow_mpp = 1;
SET @@tidb_enforce_mpp = 1;
SELECT id
FROM t_min_cmp
WHERE a = 0 AND b = 1
ORDER BY s COLLATE utf8mb4_general_ci, id
LIMIT 1;
```
### 2. What did you expect to see? (Required)
The query should return:
```text
1
```
### 3. What did you see instead (Required)
The query fails with:
```text
ERROR 1105 (HY000): runtime error: index out of range [2] with length 2
```
The original larger reproduction that was minimized to the SQL above produced the following complete recovered panic stack in TiDB logs:
```text
[2026/04/25 09:30:52.810 +00:00] [WARN] [conn.go:1246] ["command dispatched failed"] [conn=2533367824] [session_alias=] [connInfo="id:2533367824, addr:10.200.0.166:50066 status:10, collation:utf8mb4_general_ci, user:root"] [command=Query] [status="inTxn:0, autocommit:1"] [sql=" SELECT `id` FROM `t_plain` WHERE `a` IS NULL AND `d` LIKE '%A%' ORDER BY (`s` COLLATE utf8mb4_general_ci) , `id` LIMIT 1"] [txn_mode=PESSIMISTIC] [timestamp=465858580392443905] [err="runtime error: index out of range [2] with length 2
github.com/pingcap/errors.Trace
/go/pkg/mod/github.com/pingcap/errors@v0.11.5-0.20260310054046-9c8b3586e4b2/juju_adaptor.go:15
github.com/pingcap/tidb/pkg/util.GetRecoverError
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/util/util.go:296
github.com/pingcap/tidb/pkg/executor/internal/exec.Next.func1
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/internal/exec/executor.go:545
runtime.gopanic
/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.9.linux-amd64/src/runtime/panic.go:783
runtime.goPanicIndex
/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.9.linux-amd64/src/runtime/panic.go:115
github.com/pingcap/tidb/pkg/util/chunk.(*Chunk).swapColumn
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/util/chunk/chunk.go:256
github.com/pingcap/tidb/pkg/util/chunk.(*ColumnSwapHelper).SwapColumns
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/util/chunk/chunk_util.go:306
github.com/pingcap/tidb/pkg/expression.(*EvaluatorSuite).Run
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/expression/evaluator.go:139
github.com/pingcap/tidb/pkg/executor.(*ProjectionExec).unParallelExecute
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/projection.go:227
github.com/pingcap/tidb/pkg/executor.(*ProjectionExec).Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/projection.go:205
github.com/pingcap/tidb/pkg/executor/internal/exec.Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/internal/exec/executor.go:576
github.com/pingcap/tidb/pkg/executor.(*ProjectionExec).unParallelExecute
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/projection.go:218
github.com/pingcap/tidb/pkg/executor.(*ProjectionExec).Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/projection.go:205
github.com/pingcap/tidb/pkg/executor/internal/exec.Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/internal/exec/executor.go:576
github.com/pingcap/tidb/pkg/executor.(*ExecStmt).next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/adapter.go:1453
github.com/pingcap/tidb/pkg/executor.(*recordSet).Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/executor/adapter.go:190
github.com/pingcap/tidb/pkg/server/internal/resultset.(*tidbResultSet).Next
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/internal/resultset/resultset.go:186
github.com/pingcap/tidb/pkg/server.(*clientConn).writeChunks
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:2449
github.com/pingcap/tidb/pkg/server.(*clientConn).writeResultSet
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:2376
github.com/pingcap/tidb/pkg/server.(*clientConn).handleStmt
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:2161
github.com/pingcap/tidb/pkg/server.(*clientConn).handleQuery
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:1870
github.com/pingcap/tidb/pkg/server.(*clientConn).dispatch
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:1460
github.com/pingcap/tidb/pkg/server.(*clientConn).Run
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/conn.go:1196
github.com/pingcap/tidb/pkg/server.(*Server).onConn
/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/pkg/server/server.go:791
runtime.goexit
/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.9.linux-amd64/src/runtime/asm_amd64.s:1693"]
```
### 4. What is your TiDB version? (Required)
```text
Release Version: v9.0.0
Git Commit Hash: 4ae7a12ae7884061a9b095584fd22bc3eab23112
UTC Build Time: 2026-04-25 02:22:25
GoVersion: go1.25.9
Store: tikv
```
Contributor guide
Assessment
This issue has not been assessed yet.