pub struct NameResolver<'c> { /* private fields */ }
Expand description

Resolves which clauses in a query produce & consume variable references by walking the AST and collecting variable references. Also partially infers alias if no AS alias was provided in the query.

Implementations§

source§

impl<'c> NameResolver<'c>

source

pub fn new(catalog: &'c dyn Catalog) -> Self

source

pub fn resolve( &mut self, query: &AstNode<TopLevelQuery> ) -> Result<KeyRegistry, AstTransformationError>

Trait Implementations§

source§

impl<'c> Debug for NameResolver<'c>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'ast, 'c> Visitor<'ast> for NameResolver<'c>

source§

fn enter_ast_node(&mut self, id: NodeId) -> Traverse

source§

fn exit_ast_node(&mut self, id: NodeId) -> Traverse

source§

fn enter_query(&mut self, _query: &'ast Query) -> Traverse

source§

fn exit_query(&mut self, _query: &'ast Query) -> Traverse

source§

fn enter_from_clause(&mut self, _from_clause: &'ast FromClause) -> Traverse

source§

fn exit_from_clause(&mut self, _from_clause: &'ast FromClause) -> Traverse

source§

fn enter_join(&mut self, _join: &'ast Join) -> Traverse

source§

fn exit_join(&mut self, _join: &'ast Join) -> Traverse

source§

fn enter_from_let(&mut self, _from_let: &'ast FromLet) -> Traverse

source§

fn exit_from_let(&mut self, from_let: &'ast FromLet) -> Traverse

source§

fn enter_var_ref(&mut self, var_ref: &'ast VarRef) -> Traverse

source§

fn exit_project_expr(&mut self, project_expr: &'ast ProjectExpr) -> Traverse

source§

fn enter_group_key(&mut self, _group_key: &'ast GroupKey) -> Traverse

source§

fn exit_group_key(&mut self, group_key: &'ast GroupKey) -> Traverse

source§

fn enter_group_by_expr(&mut self, _group_by_expr: &'ast GroupByExpr) -> Traverse

source§

fn exit_group_by_expr(&mut self, group_by_expr: &'ast GroupByExpr) -> Traverse

source§

fn enter_item(&mut self, _item: &'ast Item) -> Traverse

source§

fn exit_item(&mut self, _item: &'ast Item) -> Traverse

source§

fn enter_ddl(&mut self, _ddl: &'ast Ddl) -> Traverse

source§

fn exit_ddl(&mut self, _ddl: &'ast Ddl) -> Traverse

source§

fn enter_ddl_op(&mut self, _ddl_op: &'ast DdlOp) -> Traverse

source§

fn exit_ddl_op(&mut self, _ddl_op: &'ast DdlOp) -> Traverse

source§

fn enter_create_table(&mut self, _create_table: &'ast CreateTable) -> Traverse

source§

fn exit_create_table(&mut self, _create_table: &'ast CreateTable) -> Traverse

source§

fn enter_drop_table(&mut self, _drop_table: &'ast DropTable) -> Traverse

source§

fn exit_drop_table(&mut self, _drop_table: &'ast DropTable) -> Traverse

source§

fn enter_create_index(&mut self, _create_index: &'ast CreateIndex) -> Traverse

source§

fn exit_create_index(&mut self, _create_index: &'ast CreateIndex) -> Traverse

source§

fn enter_drop_index(&mut self, _drop_index: &'ast DropIndex) -> Traverse

source§

fn exit_drop_index(&mut self, _drop_index: &'ast DropIndex) -> Traverse

source§

fn enter_dml(&mut self, _dml: &'ast Dml) -> Traverse

source§

fn exit_dml(&mut self, _dml: &'ast Dml) -> Traverse

source§

fn enter_dml_op(&mut self, _dml_op: &'ast DmlOp) -> Traverse

source§

fn exit_dml_op(&mut self, _dml_op: &'ast DmlOp) -> Traverse

source§

fn enter_returning_expr( &mut self, _returning_expr: &'ast ReturningExpr ) -> Traverse

source§

fn exit_returning_expr( &mut self, _returning_expr: &'ast ReturningExpr ) -> Traverse

source§

fn enter_returning_elem( &mut self, _returning_elem: &'ast ReturningElem ) -> Traverse

source§

fn exit_returning_elem( &mut self, _returning_elem: &'ast ReturningElem ) -> Traverse

source§

fn enter_insert(&mut self, _insert: &'ast Insert) -> Traverse

source§

fn exit_insert(&mut self, _insert: &'ast Insert) -> Traverse

source§

fn enter_insert_value(&mut self, _insert_value: &'ast InsertValue) -> Traverse

source§

fn exit_insert_value(&mut self, _insert_value: &'ast InsertValue) -> Traverse

source§

fn enter_set(&mut self, _set: &'ast Set) -> Traverse

source§

fn exit_set(&mut self, _set: &'ast Set) -> Traverse

source§

fn enter_assignment(&mut self, _assignment: &'ast Assignment) -> Traverse

source§

fn exit_assignment(&mut self, _assignment: &'ast Assignment) -> Traverse

source§

fn enter_remove(&mut self, _remove: &'ast Remove) -> Traverse

source§

fn exit_remove(&mut self, _remove: &'ast Remove) -> Traverse

source§

fn enter_delete(&mut self, _delete: &'ast Delete) -> Traverse

source§

fn exit_delete(&mut self, _delete: &'ast Delete) -> Traverse

source§

fn enter_on_conflict(&mut self, _on_conflict: &'ast OnConflict) -> Traverse

source§

fn exit_on_conflict(&mut self, _on_conflict: &'ast OnConflict) -> Traverse

source§

fn enter_top_level_query(&mut self, _query: &'ast TopLevelQuery) -> Traverse

source§

fn exit_top_level_query(&mut self, _query: &'ast TopLevelQuery) -> Traverse

source§

fn enter_with_clause(&mut self, _query: &'ast WithClause) -> Traverse

source§

fn exit_with_clause(&mut self, _query: &'ast WithClause) -> Traverse

source§

fn enter_with_element(&mut self, _query: &'ast WithElement) -> Traverse

source§

fn exit_with_element(&mut self, _query: &'ast WithElement) -> Traverse

source§

fn enter_query_set(&mut self, _query_set: &'ast QuerySet) -> Traverse

source§

fn exit_query_set(&mut self, _query_set: &'ast QuerySet) -> Traverse

source§

fn enter_bag_op_expr(&mut self, _set_expr: &'ast BagOpExpr) -> Traverse

source§

fn exit_bag_op_expr(&mut self, _set_expr: &'ast BagOpExpr) -> Traverse

source§

fn enter_select(&mut self, _select: &'ast Select) -> Traverse

source§

fn exit_select(&mut self, _select: &'ast Select) -> Traverse

source§

fn enter_query_table(&mut self, _table: &'ast QueryTable) -> Traverse

source§

fn exit_query_table(&mut self, _table: &'ast QueryTable) -> Traverse

source§

fn enter_projection(&mut self, _projection: &'ast Projection) -> Traverse

source§

fn exit_projection(&mut self, _projection: &'ast Projection) -> Traverse

source§

fn enter_projection_kind( &mut self, _projection_kind: &'ast ProjectionKind ) -> Traverse

source§

fn exit_projection_kind( &mut self, _projection_kind: &'ast ProjectionKind ) -> Traverse

source§

fn enter_project_item(&mut self, _project_item: &'ast ProjectItem) -> Traverse

source§

fn exit_project_item(&mut self, _project_item: &'ast ProjectItem) -> Traverse

source§

fn enter_project_pivot( &mut self, _project_pivot: &'ast ProjectPivot ) -> Traverse

source§

fn exit_project_pivot(&mut self, _project_pivot: &'ast ProjectPivot) -> Traverse

source§

fn enter_project_all(&mut self, _project_all: &'ast ProjectAll) -> Traverse

source§

fn exit_project_all(&mut self, _project_all: &'ast ProjectAll) -> Traverse

source§

fn enter_project_expr(&mut self, _project_expr: &'ast ProjectExpr) -> Traverse

source§

fn enter_expr(&mut self, _expr: &'ast Expr) -> Traverse

source§

fn exit_expr(&mut self, _expr: &'ast Expr) -> Traverse

source§

fn enter_lit(&mut self, _lit: &'ast Lit) -> Traverse

source§

fn exit_lit(&mut self, _lit: &'ast Lit) -> Traverse

source§

fn exit_var_ref(&mut self, _var_ref: &'ast VarRef) -> Traverse

source§

fn enter_bin_op(&mut self, _bin_op: &'ast BinOp) -> Traverse

source§

fn exit_bin_op(&mut self, _bin_op: &'ast BinOp) -> Traverse

source§

fn enter_uni_op(&mut self, _uni_op: &'ast UniOp) -> Traverse

source§

fn exit_uni_op(&mut self, _uni_op: &'ast UniOp) -> Traverse

source§

fn enter_like(&mut self, _like: &'ast Like) -> Traverse

source§

fn exit_like(&mut self, _like: &'ast Like) -> Traverse

source§

fn enter_between(&mut self, _between: &'ast Between) -> Traverse

source§

fn exit_between(&mut self, _between: &'ast Between) -> Traverse

source§

fn enter_in(&mut self, _in: &'ast In) -> Traverse

source§

fn exit_in(&mut self, _in: &'ast In) -> Traverse

source§

fn enter_case(&mut self, _case: &'ast Case) -> Traverse

source§

fn exit_case(&mut self, _case: &'ast Case) -> Traverse

source§

fn enter_simple_case(&mut self, _simple_case: &'ast SimpleCase) -> Traverse

source§

fn exit_simple_case(&mut self, _simple_case: &'ast SimpleCase) -> Traverse

source§

fn enter_searched_case( &mut self, _searched_case: &'ast SearchedCase ) -> Traverse

source§

fn exit_searched_case(&mut self, _searched_case: &'ast SearchedCase) -> Traverse

source§

fn enter_expr_pair(&mut self, _expr_pair: &'ast ExprPair) -> Traverse

source§

fn exit_expr_pair(&mut self, _expr_pair: &'ast ExprPair) -> Traverse

source§

fn enter_struct(&mut self, _struct: &'ast Struct) -> Traverse

source§

fn exit_struct(&mut self, _struct: &'ast Struct) -> Traverse

source§

fn enter_bag(&mut self, _bag: &'ast Bag) -> Traverse

source§

fn exit_bag(&mut self, _bag: &'ast Bag) -> Traverse

source§

fn enter_list(&mut self, _list: &'ast List) -> Traverse

source§

fn exit_list(&mut self, _list: &'ast List) -> Traverse

source§

fn enter_sexp(&mut self, _sexp: &'ast Sexp) -> Traverse

source§

fn exit_sexp(&mut self, _sexp: &'ast Sexp) -> Traverse

source§

fn enter_call(&mut self, _call: &'ast Call) -> Traverse

source§

fn exit_call(&mut self, _call: &'ast Call) -> Traverse

source§

fn enter_call_arg(&mut self, _call_arg: &'ast CallArg) -> Traverse

source§

fn exit_call_arg(&mut self, _call_arg: &'ast CallArg) -> Traverse

source§

fn enter_call_arg_named( &mut self, _call_arg_named: &'ast CallArgNamed ) -> Traverse

source§

fn exit_call_arg_named( &mut self, _call_arg_named: &'ast CallArgNamed ) -> Traverse

source§

fn enter_call_arg_named_type( &mut self, _call_arg_named_type: &'ast CallArgNamedType ) -> Traverse

source§

fn exit_call_arg_named_type( &mut self, _call_arg_named_type: &'ast CallArgNamedType ) -> Traverse

source§

fn enter_call_agg(&mut self, _call_agg: &'ast CallAgg) -> Traverse

source§

fn exit_call_agg(&mut self, _call_agg: &'ast CallAgg) -> Traverse

source§

fn enter_path(&mut self, _path: &'ast Path) -> Traverse

source§

fn exit_path(&mut self, _path: &'ast Path) -> Traverse

source§

fn enter_path_step(&mut self, _path_step: &'ast PathStep) -> Traverse

source§

fn exit_path_step(&mut self, _path_step: &'ast PathStep) -> Traverse

source§

fn enter_path_expr(&mut self, _path_expr: &'ast PathExpr) -> Traverse

source§

fn exit_path_expr(&mut self, _path_expr: &'ast PathExpr) -> Traverse

source§

fn enter_let(&mut self, _let: &'ast Let) -> Traverse

source§

fn exit_let(&mut self, _let: &'ast Let) -> Traverse

source§

fn enter_let_binding(&mut self, _let_binding: &'ast LetBinding) -> Traverse

source§

fn exit_let_binding(&mut self, _let_binding: &'ast LetBinding) -> Traverse

source§

fn enter_from_source(&mut self, _from_clause: &'ast FromSource) -> Traverse

source§

fn exit_from_source(&mut self, _from_clause: &'ast FromSource) -> Traverse

source§

fn enter_where_clause(&mut self, _where_clause: &'ast WhereClause) -> Traverse

source§

fn exit_where_clause(&mut self, _where_clause: &'ast WhereClause) -> Traverse

source§

fn enter_having_clause( &mut self, _having_clause: &'ast HavingClause ) -> Traverse

source§

fn exit_having_clause(&mut self, _having_clause: &'ast HavingClause) -> Traverse

source§

fn enter_join_spec(&mut self, _join_spec: &'ast JoinSpec) -> Traverse

source§

fn exit_join_spec(&mut self, _join_spec: &'ast JoinSpec) -> Traverse

source§

fn enter_order_by_expr(&mut self, _order_by_expr: &'ast OrderByExpr) -> Traverse

source§

fn exit_order_by_expr(&mut self, _order_by_expr: &'ast OrderByExpr) -> Traverse

source§

fn enter_limit_offset_clause( &mut self, _limit_offset: &'ast LimitOffsetClause ) -> Traverse

source§

fn exit_limit_offset_clause( &mut self, _limit_offset: &'ast LimitOffsetClause ) -> Traverse

source§

fn enter_sort_spec(&mut self, _sort_spec: &'ast SortSpec) -> Traverse

source§

fn exit_sort_spec(&mut self, _sort_spec: &'ast SortSpec) -> Traverse

source§

fn enter_custom_type(&mut self, _custom_type: &'ast CustomType) -> Traverse

source§

fn exit_custom_type(&mut self, _custom_type: &'ast CustomType) -> Traverse

Auto Trait Implementations§

§

impl<'c> !RefUnwindSafe for NameResolver<'c>

§

impl<'c> !Send for NameResolver<'c>

§

impl<'c> !Sync for NameResolver<'c>

§

impl<'c> Unpin for NameResolver<'c>

§

impl<'c> !UnwindSafe for NameResolver<'c>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.