ADMIN RECOVER INDEX panics when recovering an index built on a stored generated column
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
Please answer these questions before submitting your issue. Thanks!
### 1. Minimal reproduce step (Required)
The recover-index path handles all generated columns as if they were virtual generated columns. During index value reconstruction, it tries to evaluate generated-column expressions instead of distinguishing between virtual and stored generated columns. That works for virtual generated columns, but not for stored generated columns, whose values are already materialized and do not carry a virtual expression for evaluation in this path.
As a result, recovering an index on a stored generated column dereferences a missing expression and panics.
```sql
CREATE TABLE t (
id INT PRIMARY KEY,
a INT,
b INT,
g INT AS (a + b) STORED,
e INT AS (a + b) VIRTUAL,
KEY idx_g(g),
KEY idx_e(e),
KEY idx_a(a)
);
ADMIN RECOVER INDEX t idx_g;
-- +-------------+------------+
-- | ADDED_COUNT | SCAN_COUNT |
-- +-------------+------------+
-- | 0 | 0 |
-- +-------------+------------+
INSERT INTO t(id, a, b) VALUES (1, 1, 1);
ADMIN RECOVER INDEX t idx_g;
-- ERROR 1105 (HY000): runtime error: invalid memory address or nil pointer dereference
ADMIN RECOVER INDEX t idx_e;
-- succeeds
ADMIN RECOVER INDEX t idx_a;
-- succeeds
```
### 2. What did you expect to see? (Required)
### 3. What did you see instead (Required)
### 4. What is your TiDB version? (Required)
Release Version: v9.0.0-beta.2.pre-1598-g874ff3792e
Edition: Community
Git Commit Hash: 874ff3792e7e0f51068547f90cefc1acbfed7232
Git Branch: HEAD
UTC Build Time: 2026-04-22 02:24:07
GoVersion: go1.25.8
Race Enabled: false
Check Table Before Drop: false
Store: tikv
Kernel Type: Classic
Contributor guide
Assessment
This issue has not been assessed yet.