matrixorigin / matrixorigin/matrixone
FOR UPDATE on partitioned tables fails
- 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
Assessment
This issue has not been assessed yet.