halo sqlx
它是一个对齐 huandu/go-sqlbuilder 设计的 Rust crate,提供:
Args+Flavor:支持?、$1、@p1、:1等多种占位符策略,并且允许通过Flavor跟随不同 SQL 方言;- 完整的各类 Builder:
SelectBuilder、InsertBuilder、UpdateBuilder、DeleteBuilder、UnionBuilder、CTEBuilder、CTEQueryBuilder、CreateTableBuilder,同时内建查、插、改、删、聚合、CTE、Union 和 clone 重用模式; Build/Buildf/BuildNamed:支持${name}、$0、$?、$$、Raw、List、Tuple等语法,并支持嵌套 builder、named arg 重用、literal$等特殊行为;Struct+field_mapper:通过macro_rules!生成FieldMeta,支持db/fieldtag/fieldopt/fieldas、with_tag/without_tag、自定义 field mapper(如 snake_case/kebab_case/prefix/suffix)并兼容SqlValuer;Scan+ScanCell:仿照 Go 的Addr实现数据扫描;interpolate:为不支持参数化的驱动提供 SQL 插值,涵盖多 flavor 的字符串/数字/日期/布尔等转义;SqlValuer:支持延迟计算参数,兼容自定义数据源;- 全部示例/单测对齐 Go:138 条单测 + doc-test,覆盖 README 中的 builder、Struct、CTE、Union、field mapper、命名参数等场景。
典型用法
创建 SELECT
use ;
let mut sb = new;
select_cols!;
from_tables!;
where_exprs!;
let = sb.build;
assert_eq!;
assert_eq!;
变长参数宏
halo::sqlx::macros 模块提供一组 Go 风格的可变参数宏(select_cols!、from_tables!、where_exprs!、returning_cols! 等),它们会自动把多个字符串/列名展开为 Vec<String>,从而无需手动构造切片。
use ;
let mut sb = new;
select_cols!;
from_tables!;
where_exprs!;
order_by_cols!;
let = sb.build;
assert!;
宏还覆盖了 insert_cols! / insert_select_cols! / delete_from_tables! / update_set! / create_table_define! / struct_with_tag! 等常见接受字符串 varargs 的接口。
嵌套 Builder / Buildf
use ;
let mut sb = new;
select_cols!;
from_tables!;
let explain = buildf;
let = explain.build;
assert!;
named 参数
use ;
let mut named = new;
named.insert;
named.insert;
named.insert;
let = build_named
.build;
assert!;
Struct ORM + field mapper
use ;
let _= set_default_field_mapper_scoped;
sql_struct!
let s = new;
let = s.select_from.build;
assert!;
CTE 与 Union
use ;
let mut users_cte = new;
let mut query = new;
select_cols!;
from_tables!;
where_exprs!;
users_cte.table.as_;
let cte = with;
let mut sb = cte.select;
select_cols!;
from_tables!;
let = sb.build;
assert!;
维护与测试
许可证
MIT