Expand description
sql-composer: A SQL template engine that composes reusable SQL fragments with parameterized bindings.
Templates use a simple macro syntax embedded in SQL:
:bind(name)— parameter placeholder:compose(path)— include another template:count(sources...)— count aggregate:union(sources...)— union combinator
SQL text is treated as opaque literals and passed through unchanged. Only the macro syntax is parsed.
§Example
use sql_composer::parser::parse_template;
use sql_composer::composer::Composer;
use sql_composer::types::{Dialect, TemplateSource};
let input = "SELECT * FROM users WHERE id = :bind(user_id) AND active = :bind(active);";
let template = parse_template(input, TemplateSource::Literal("example".into())).unwrap();
let composer = Composer::new(Dialect::Postgres);
let result = composer.compose(&template).unwrap();
// Alphabetical ordering: active=$1, user_id=$2
assert_eq!(result.sql, "SELECT * FROM users WHERE id = $2 AND active = $1;");
assert_eq!(result.bind_params, vec!["active", "user_id"]);Re-exports§
pub use composer::ComposedSql;pub use composer::Composer;pub use error::Error;pub use mock::MockTable;pub use types::Binding;pub use types::Command;pub use types::CommandKind;pub use types::ComposeRef;pub use types::ComposeTarget;pub use types::Dialect;pub use types::Element;pub use types::SlotAssignment;pub use types::Template;pub use types::TemplateSource;
Modules§
- composer
- The composer transforms parsed templates into final SQL with dialect-specific placeholders and resolved compose references.
- driver
- Trait interface for database drivers and helpers for bind value resolution.
- error
- Error types for sql-composer.
- mock
- Mock table system for generating test data as
SELECT ... UNION ALL SELECT .... - parser
- winnow 0.7 parsers for sql-composer template macros.
- types
- Core types for the sql-composer template AST.
Macros§
- bind_
values - Build a
BTreeMap<String, Vec<V>>of named bind values. - mock_
rows - Convenience macro for building mock table rows.