pub struct ExprContext<'a, T = Schema> { /* private fields */ }Expand description
Provides schema-aware context for expression type inference and reference resolution.
An ExprContext binds a schema reference, an optional parent scope (for
nested queries), and a target indicating what the expressions reference
(a model, table, or source). It is used by the query engine to infer
expression types and resolve column/field references.
§Examples
use toasty_core::stmt::{ExprContext, ExprTarget};
let cx = ExprContext::new(&schema);
let ty = cx.infer_expr_ty(&expr, &[]);Implementations§
Source§impl<'a> ExprContext<'a>
impl<'a> ExprContext<'a>
Sourcepub fn resolve_projected_field(&self, expr: &Expr) -> Option<ProjectedField<'a>>
pub fn resolve_projected_field(&self, expr: &Expr) -> Option<ProjectedField<'a>>
Resolves a field reference or embedded-field projection in its query scope.
Walks embedded structs and explicit enum variant selections, preserving the root reference’s nesting. Relation fields can be returned, but the walk does not continue through their target models.
Returns None for expressions that do not resolve to a field, invalid
field or variant projections, and references to non-model scopes.
§Panics
Panics if a field reference’s nesting exceeds the available parent scopes.
Source§impl<'a, T> ExprContext<'a, T>
impl<'a, T> ExprContext<'a, T>
Sourcepub fn target(&self) -> ExprTarget<'a>
pub fn target(&self) -> ExprTarget<'a>
Returns the current expression target.
Sourcepub fn target_at(&self, nesting: usize) -> &ExprTarget<'a>
pub fn target_at(&self, nesting: usize) -> &ExprTarget<'a>
Return the target at a specific nesting
Source§impl<'a> ExprContext<'a, ()>
impl<'a> ExprContext<'a, ()>
Sourcepub fn new_free() -> ExprContext<'a, ()>
pub fn new_free() -> ExprContext<'a, ()>
Creates a free context with no schema and no target.
Source§impl<'a, T: Resolve> ExprContext<'a, T>
impl<'a, T: Resolve> ExprContext<'a, T>
Sourcepub fn new(schema: &'a T) -> ExprContext<'a, T>
pub fn new(schema: &'a T) -> ExprContext<'a, T>
Creates a context bound to the given schema with a free target.
Sourcepub fn new_with_target(
schema: &'a T,
target: impl IntoExprTarget<'a, T>,
) -> ExprContext<'a, T>
pub fn new_with_target( schema: &'a T, target: impl IntoExprTarget<'a, T>, ) -> ExprContext<'a, T>
Creates a context bound to the given schema and target.
Sourcepub fn scope<'child>(
&'child self,
target: impl IntoExprTarget<'child, T>,
) -> ExprContext<'child, T>
pub fn scope<'child>( &'child self, target: impl IntoExprTarget<'child, T>, ) -> ExprContext<'child, T>
Creates a child context with a new target, linked to this context as parent for nested scope resolution.
Sourcepub fn resolve_expr_reference(
&self,
expr_reference: &ExprReference,
) -> ResolvedRef<'a>
pub fn resolve_expr_reference( &self, expr_reference: &ExprReference, ) -> ResolvedRef<'a>
Resolves an ExprReference::Column reference to the actual database Column it represents.
Given an ExprReference::Column (which contains table/column indices and nesting info), returns the Column struct containing the column’s name, type, constraints, and other metadata.
Handles:
- Nested query scopes (walking up parent contexts based on nesting level)
- Different statement targets (INSERT, UPDATE, SELECT with joins, etc.)
- Table references in multi-table operations (using the table index)
Used by SQL serialization to get column names, query planning to match index columns, and key extraction to identify column IDs.
Sourcepub fn infer_stmt_ty(&self, stmt: &Statement, args: &[Type]) -> Type
pub fn infer_stmt_ty(&self, stmt: &Statement, args: &[Type]) -> Type
Infers the return type of a statement given argument types.
Sourcepub fn infer_expr_ty(&self, expr: &Expr, args: &[Type]) -> Type
pub fn infer_expr_ty(&self, expr: &Expr, args: &[Type]) -> Type
Infers the type of an expression given argument types.
Sourcepub fn infer_expr_reference_ty(&self, expr_reference: &ExprReference) -> Type
pub fn infer_expr_reference_ty(&self, expr_reference: &ExprReference) -> Type
Infers the type of an expression reference (field or column).
Derived columns use the types in the VALUES rows or the SELECT projection.
An empty VALUES body has no type information and yields Type::Unknown.
Source§impl<'a> ExprContext<'a, Schema>
impl<'a> ExprContext<'a, Schema>
Sourcepub fn target_as_model(&self) -> Option<&'a ModelRoot>
pub fn target_as_model(&self) -> Option<&'a ModelRoot>
Returns the context target as a ModelRoot reference, or None if the target is not a
model.