Struct ExprContext
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§
§impl<'a, T> ExprContext<'a, T>
impl<'a, T> ExprContext<'a, T>
pub fn target(&self) -> ExprTarget<'a>
pub fn target(&self) -> ExprTarget<'a>
Returns the current expression target.
pub fn target_at(&self, nesting: usize) -> &ExprTarget<'a>
pub fn target_at(&self, nesting: usize) -> &ExprTarget<'a>
Return the target at a specific nesting
§impl<'a> ExprContext<'a, ()>
impl<'a> ExprContext<'a, ()>
pub fn new_free() -> ExprContext<'a, ()>
pub fn new_free() -> ExprContext<'a, ()>
Creates a free context with no schema and no target.
§impl<'a, T> ExprContext<'a, T>where
T: Resolve,
impl<'a, T> ExprContext<'a, T>where
T: Resolve,
pub 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.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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).
§impl<'a> ExprContext<'a>
impl<'a> ExprContext<'a>
pub 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.
pub fn expr_ref_column(&self, column_id: impl Into<ColumnId>) -> ExprReference
pub fn expr_ref_column(&self, column_id: impl Into<ColumnId>) -> ExprReference
Creates an ExprReference::Column for the given column ID.
§Panics
Panics if the context has no table target (ExprTarget::Free), if the column does not
belong to the table associated with the current target, or if the target’s model has no
mapped database table.
Trait Implementations§
§impl<'a, T> Clone for ExprContext<'a, T>
impl<'a, T> Clone for ExprContext<'a, T>
§fn clone(&self) -> ExprContext<'a, T>
fn clone(&self) -> ExprContext<'a, T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more