Expand description
Hydration Modes + Plugin 拦截器链
对应文档 6.8 节改进项 44(Hydration Modes)+ 46(Plugin 拦截器链)。
§核心概念
§Hydration Modes
- Object:每行 →
HashMap<String, Value>(默认) - Array:每行 →
Vec<Value>(按列顺序) - Scalar:每行 → Value(取第一列)
- SingleScalar:唯一行 + 唯一列 → Value
- Column:每行的指定列 →
Vec<Value>
§Plugin 拦截器链
- Plugin trait:拦截 Executor 操作
- PluginContext:上下文(操作类型、SQL、参数、阶段)
- PluginDecision:插件决策(Continue / Skip / Modified)
- PluginChain:拦截器链(按注册顺序执行)
- ExecutionStage:拦截阶段(BeforeQuery / AfterQuery / BeforeUpdate / AfterUpdate / BeforeCommit / AfterCommit / BeforeRollback / AfterRollback)
§设计灵感
- Doctrine
HYDRATE_*(OBJECT/ARRAY/SCALAR/SINGLE_SCALAR/COLUMN) - MyBatis
Interceptor(拦截 Executor.query/update/commit) - Hibernate
Interceptor/EventListeners
§使用示例
use sz_orm_core::hydration_plugin::{
HydrationMode, hydrate, PluginChain, PluginContext, ExecutionStage, PluginDecision,
};
use sz_orm_core::result_map::RowData;
use sz_orm_core::Value;
use std::collections::HashMap;
// HydrationMode::Scalar
let mut row = RowData::empty();
row.set("count", Value::I64(42));
let result = hydrate(&[row], HydrationMode::Scalar).unwrap();
assert_eq!(result.first(), Some(&Value::I64(42)));Structs§
- Audit
Plugin - 审计插件(记录所有写操作)
- Audit
Record - 审计记录
- Block
Plugin - 阻断插件(演示 Abort 决策)
- Plugin
Chain - 插件链(按注册顺序执行)
- Plugin
Context - 插件上下文(携带操作信息)
- Slow
Query Plugin - 慢查询检测插件
- Slow
Query Record - 慢查询记录
- SqlLog
Plugin - SQL 日志插件
- SqlRewrite
Plugin - SQL 改写插件(演示 Modified 决策)
Enums§
- Execution
Stage - 执行阶段
- Hydration
Error - Hydration 错误
- Hydration
Mode - Hydration 填充模式
- Plugin
Decision - 插件决策
Traits§
- Plugin
- Plugin 拦截器 trait
Functions§
- hydrate
- 通用 hydrate 函数:根据 mode 自动选择
- hydrate_
array - Array 模式:每行 →
Vec<Value>(按列名排序后顺序) - hydrate_
column - Column 模式:每行的指定列 →
Vec<Value> - hydrate_
object - Object 模式:每行 → HashMap<String, Value>
- hydrate_
scalar - Scalar 模式:每行 → Value(取第一列,按列名排序)
- hydrate_
single_ scalar - SingleScalar 模式:唯一行 + 唯一列 → Value
Type Aliases§
- Hydration
Result - Hydration 结果类型