pub fn build_dynamic_insert(
dialect: &dyn Dialect,
table: &str,
data: &HashMap<String, Value>,
) -> Option<String>Expand description
生成仅含非 null 字段的 INSERT SQL(对应 Hibernate @DynamicInsert)
生成的 SQL 形如:
INSERT INTO `table` (`col1`, `col2`) VALUES (?, ?)Value::Null 字段会被排除,让数据库使用列默认值。
§参数
dialect:数据库方言table:表名data:要插入的字段(Null 字段会被过滤)
§返回
Some(sql):存在非 null 字段时返回 INSERT SQLNone:所有字段均为 Null,无法生成 INSERT
§示例
use sz_orm_model::dirty_attributes::build_dynamic_insert;
use sz_orm_model::{DbType, get_dialect, Value};
use std::collections::HashMap;
let dialect = get_dialect(DbType::MySQL).unwrap();
let mut data = HashMap::new();
data.insert("name".to_string(), Value::String("alice".to_string()));
data.insert("age".to_string(), Value::I64(25));
data.insert("bio".to_string(), Value::Null); // Null 字段被排除
let sql = build_dynamic_insert(&*dialect, "users", &data).unwrap();
assert!(sql.contains("INSERT INTO `users`"));
assert!(sql.contains("`name`"));
assert!(sql.contains("`age`"));
assert!(!sql.contains("`bio`"));