pingcap / pingcap/tidb

ADMIN RECOVER INDEX panics when recovering an index built on a stored generated column

Open
#67,995 7 comments 0 reactions 0 assignees View on GitHub
affects-7.1 affects-7.5 affects-8.1 affects-8.5 severity/major sig/sql-infra type/bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.