Skip to main content

build_dynamic_insert

Function build_dynamic_insert 

Source
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 SQL
  • None:所有字段均为 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`"));