matrixorigin / matrixorigin/matrixone

FOR UPDATE on partitioned tables fails

Open
#23,135 0 comments 0 reactions 1 assignee Claimed by @ck89119 View on GitHub
area/partition deferred kind/bug
Dominant language
Go
Stars
1.9k
Forks
311
Avg merge
1d 3h
Merged PRs (30d)
768

Description

## Description

`SELECT ... FOR UPDATE` 在分区表上无法执行。我们创建了 Hash 分区表并向其中插入少量数据,随后执行 `SELECT ... PARTITION (...) ... FOR UPDATE` 会直接报 SQL parser error,甚至出现 `ERROR 1690 ... data type int32` 的数据越界错误。MySQL 支持在分区表的特定分区上加行锁,MatrixOne 目前完全无法兼容。

## Error Messages

```
ERROR 1064 (HY000) at line 13: SQL parser error: ... near " PARTITION (p0, p1)"
ERROR 1690 (HY000) at line 7: data out of range: data type int32, value '872191527755976743'
```

## Reproduction

```sql
DROP TABLE IF EXISTS temp_fu_part_2498;
CREATE TABLE temp_fu_part_2498 (
id INT,
company_id INT,
status VARCHAR(50)
) PARTITION BY HASH(company_id) PARTITIONS 4;

INSERT INTO temp_fu_part_2498
SELECT id, company_id, status
FROM company_patent
WHERE company_id IS NOT NULL
LIMIT 40;

START TRANSACTION;
SELECT id, company_id
FROM temp_fu_part_2498
PARTITION (p0, p1)
WHERE status IS NOT NULL
LIMIT 10 FOR UPDATE;
```

## Impact
- 无法在分区表上执行悲观锁,阻碍了针对热点分区的行级更新与并发控制。
- 解析层直接报错,无法落地任何 workaround。

## References
- `report_test_batch_248_for_update_boundary_20251124_162712.md` Case 2478 起的 `for_update_partition_hint` 用例。

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.