Expand description
Query Builder API for type-safe programmatic query construction
This module provides a fluent builder API for constructing queries programmatically
without parsing string queries. It offers compile-time safety for field names and
operators, with runtime validation against the FieldRegistry.
§Features
- Type-safe construction: Methods for all core fields prevent typos
- Fluent API: Method chaining for readable query construction
- Validation: Field, operator, value type, and enum constraint validation
- Error accumulation: All errors reported at
build()time, not per-method - Zero-copy optimization: Uses
Cow<'static, str>for static field names
§Example
ⓘ
use sqry_core::query::builder::QueryBuilder;
// Simple condition
let query = QueryBuilder::kind("function")
.build()?;
// Combined conditions
let query = QueryBuilder::kind("function")
.and(QueryBuilder::lang("rust"))
.and_not(QueryBuilder::name_matches("test.*"))
.build()?;
// OR conditions using static constructor
let query = QueryBuilder::any(vec![
QueryBuilder::kind("function"),
QueryBuilder::kind("method"),
])
.and(QueryBuilder::lang("rust"))
.build()?;
// Regex with custom flags
let query = QueryBuilder::name_matches_with("Test.*", |rb| rb.case_insensitive())
.build()?;§Architecture
The builder is a thin layer over the existing Query AST types. It provides:
- Type-safe construction of
Exprnodes - Validation against
FieldRegistry - Conversion to executable
QueryASTstructures
§Validation
Validation is performed lazily at build() time:
- Field existence (with alias resolution)
- Operator compatibility with field type
- Value type matching
- Enum value validation (for
kind,scope,scope.type) - Regex pattern syntax validation
Structs§
- Condition
Builder - Builder for individual field conditions.
- Query
Builder - Builder for constructing type-safe queries.
- Regex
Builder - Builder for regex patterns with compilation flags
Enums§
- Build
Error - Errors that can occur when building a query