Skip to main content

Module optimistic_lock

Module optimistic_lock 

Source
Expand description

乐观锁(Optimistic Locking)

对应文档 6.8 节改进项 20(乐观锁支持)。

§核心概念

  • OptimisticLock:Model trait,声明版本字段名
  • build_update_with_lock:生成 UPDATE ... SET version = version + 1, ... WHERE pk = ? AND version = ?
  • LockError:版本冲突错误
  • retry_on_conflict:冲突重试机制

§设计灵感

  • Hibernate @Version
  • Doctrine @Version / LockMode::OPTIMISTIC
  • Yii2 OptimisticLockBehavior
  • MyBatis-Plus @Version

§使用示例

use sz_orm_core::optimistic_lock::{OptimisticLock, build_update_with_lock};
use sz_orm_core::{DbType, get_dialect, Value};
use std::collections::HashMap;

// 1. 定义带 version 字段的 Model
struct Product {
    id: i64,
    name: String,
    version: i64,
}

impl OptimisticLock for Product {
    fn version_field() -> &'static str { "version" }
}

// 2. 生成乐观锁 UPDATE SQL
let dialect = get_dialect(DbType::MySQL).unwrap();
let mut data = HashMap::new();
data.insert("name".to_string(), Value::String("new-name".to_string()));
let sql = build_update_with_lock(&*dialect, "products", "id", "version", &Value::I64(1), &Value::I64(5), &data);
// UPDATE `products` SET `name` = 'new-name', `version` = `version` + 1 WHERE `id` = 1 AND `version` = 5

Enums§

LockError
乐观锁错误类型

Traits§

OptimisticLock
乐观锁 trait — Model 实现此 trait 以声明版本字段名

Functions§

build_delete_with_lock
生成乐观锁 DELETE SQL(删除前校验版本号)
build_update_with_lock
生成乐观锁 UPDATE SQL
check_affected_rows
检查 UPDATE/DELETE 受影响行数,0 表示版本冲突
extract_version
从数据行(HashMap)中提取版本号
retry_on_conflict
在乐观锁冲突时自动重试

Type Aliases§

LockResult
乐观锁结果