Add support for MySQL 8.0.1+ locking features (FOR SHARE, NOWAIT, SKIP LOCKED) #150
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR enhances DBIx::Class's MySQL support by implementing the locking features introduced in MySQL 8.0.1:
FOR SHAREsyntax (while maintaining backward compatibility withLOCK IN SHARE MODE)NOWAITmodifier to fail immediately when encountering locked rowsSKIP LOCKEDmodifier to skip locked rows in the result setOF table_nameclause to lock specific tables[https://dev.mysql.com/blog-archive/mysql-8-0-1-using-skip-locked-and-nowait-to-handle-hot-rows/]
Implementation Details
The implementation introduces a flexible hash-based configuration for advanced locking options while maintaining backward compatibility with the existing string-based syntax:
A deprecation warning has been added for the legacy
sharedoption to encourage migration to the new standardshareoption.Testing
Comprehensive test coverage has been added for all locking features, including:
Motivation
These locking features are essential for building robust concurrent applications with MySQL 8.0.1+. The
NOWAITandSKIP LOCKEDoptions are particularly valuable for implementing job queues and other high-concurrency patterns like exact once processing and helps avoiding deadlocks or long waits.