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 SHARE
syntax (while maintaining backward compatibility withLOCK IN SHARE MODE
)NOWAIT
modifier to fail immediately when encountering locked rowsSKIP LOCKED
modifier to skip locked rows in the result setOF table_name
clause 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
shared
option to encourage migration to the new standardshare
option.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
NOWAIT
andSKIP LOCKED
options are particularly valuable for implementing job queues and other high-concurrency patterns like exact once processing and helps avoiding deadlocks or long waits.