pub fn build_dynamic_update(
dialect: &dyn Dialect,
table: &str,
pk_column: &str,
pk_value: &Value,
tracker: &DirtyTracker,
) -> Option<String>Expand description
生成仅含脏字段的 UPDATE SQL(对应 Hibernate @DynamicUpdate)
生成的 SQL 形如:
UPDATE `table` SET `col1` = ?, `col2` = ? WHERE `pk` = ?§参数
dialect:数据库方言table:表名pk_column:主键列名pk_value:主键值tracker:脏字段追踪器
§返回
Some(sql):存在脏字段时返回 UPDATE SQLNone:无脏字段,无需更新
§示例
use sz_orm_model::dirty_attributes::{DirtyTracker, build_dynamic_update};
use sz_orm_model::{DbType, get_dialect, Value};
use std::collections::HashMap;
let dialect = get_dialect(DbType::MySQL).unwrap();
let mut row = HashMap::new();
row.insert("id".to_string(), Value::I64(1));
row.insert("name".to_string(), Value::String("alice".to_string()));
row.insert("age".to_string(), Value::I64(25));
let mut tracker = DirtyTracker::new(row);
tracker.set("age", Value::I64(26));
let sql = build_dynamic_update(&*dialect, "users", "id", &Value::I64(1), &tracker).unwrap();
assert!(sql.contains("UPDATE `users` SET"));
assert!(sql.contains("`age` = 26"));
assert!(!sql.contains("`name`")); // 未修改字段不出现