![]() |
mutable
A Database System for Research and Fast Prototyping
|
A designator. More...
#include <AST.hpp>
Public Types | |
using | target_type = std::variant< std::monostate, const Expr *, const Attribute * > |
Public Member Functions | |
Designator (Token attr_name) | |
Designator (Token dot, Token table_name, Token attr_name) | |
Designator (Token dot, Token table_name, Token attr_name, const Type *type, target_type target) | |
bool | is_constant () const override |
Returns true iff this Expr is constant, i.e. | |
bool | can_be_null () const override |
Returns true iff this Expr is nullable, i.e. | |
bool | contains_free_variables () const override |
Returns true iff this Designator is a free variable. | |
bool | contains_bound_variables () const override |
Returns false iff this Designator is a free variable. | |
unsigned | binding_depth () const |
uint64_t | hash () const override |
Computes a hash of this , considering only syntactic properties. | |
bool | operator== (const Expr &other) const override |
Returns true iff other is syntactically equal to this . | |
void | accept (ASTExprVisitor &v) override |
void | accept (ConstASTExprVisitor &v) const override |
bool | has_explicit_table_name () const |
bool | is_identifier () const |
Returns true iff this Designator has no table name, neither explicitly nor implicitly (by sema). | |
bool | has_table_name () const |
ThreadSafePooledString | get_table_name () const |
const target_type & | target () const |
const Type * | type () const |
Returns the Type of this Expr . | |
void | type (const Type *type) |
Sets the Type of this Expr . | |
bool | has_type () const |
Returns true iff this Expr has been assigned a Type , most likely by Sema . | |
bool | operator!= (const Expr &other) const |
Returns false iff other is syntactically equal to this . | |
Schema | get_required () const |
Returns a Schema instance containing all required definitions. | |
void | dot (std::ostream &out) const |
Writes a Graphivz dot representation of this Expr to out . | |
M_LCOV_EXCL_STOP void | dump (std::ostream &out) const |
void | dump () const |
Data Fields | |
Token | table_name |
Token | attr_name |
Token | tok |
the token of the expression; serves as an anchor to locate the expression in the source | |
Private Member Functions | |
void | set_binding_depth (unsigned depth) |
Marks this Designator as free variable, i.e. | |
void | decrease_binding_depth () |
Private Attributes | |
target_type | target_ |
the target that is referenced by this designator | |
unsigned | binding_depth_ = 0 |
at which level above this designator is bound; 0 for bound variables, ≥ 1 for free | |
ThreadSafePooledOptionalString | unique_id_ |
a unique ID created for Designators in nested queries (for decorrelation) | |
const Type * | type_ = nullptr |
| |
bool | is_correlated_ = false |
Whether this Expr is correlated within its query, i.e. | |
Friends | |
struct | Sema |
A designator.
Identifies an attribute, optionally preceeded by a table name, a named expression, or a function.
using m::ast::Designator::target_type = std::variant<std::monostate, const Expr*, const Attribute*> |
|
inlineexplicit |
|
inline |
|
overridevirtual |
Implements m::ast::Expr.
|
overridevirtual |
Implements m::ast::Expr.
|
inlineoverridevirtual |
Returns true iff this Expr
is nullable, i.e.
may evaluate to NULL
at runtime.
Implements m::ast::Expr.
|
inlineoverridevirtual |
Returns false
iff this Designator
is a free variable.
Implements m::ast::Expr.
|
inlineoverridevirtual |
Returns true
iff this Designator
is a free variable.
Implements m::ast::Expr.
|
inlineprivate |
|
inherited |
Writes a Graphivz dot representation of this Expr
to out
.
Used to render ASTs with Graphivz.
Definition at line 205 of file AST.cpp.
References m::ast::Expr::dot().
Referenced by m::ast::Expr::dot().
|
inherited |
Definition at line 235 of file AST.cpp.
References m::ast::Expr::dump().
Referenced by m::ast::Expr::dump().
|
inherited |
|
inherited |
Returns a Schema
instance containing all required definitions.
Recursively traverses the Expr
to find all Designators
. Note, that FnApplicationExpr
s require special handling: a FnApplicationExpr
that is an aggregation is stringified to a Schema::Identifier
and not processed further recursively. The reason for this special treatment is that aggregations are performed during grouping and the aggregate value is referenced by the stringified expression (or alias, if given).
Definition at line 145 of file AST.cpp.
References m::Schema::add(), m::Catalog::Get(), m::Schema::has(), id, m::Catalog::pool(), and m::visit().
|
inline |
Definition at line 197 of file AST.hpp.
References M_insist, and m::ast::Token::text.
Referenced by hash().
|
inline |
|
inline |
Definition at line 196 of file AST.hpp.
References m::ast::Token::text.
Referenced by hash(), and operator==().
|
inlineinherited |
|
overridevirtual |
Computes a hash of this
, considering only syntactic properties.
Other properties are ignored, e.g. type or designator target.
Implements m::ast::Expr.
Definition at line 40 of file AST.cpp.
References attr_name, get_table_name(), has_table_name(), and m::ast::Token::text.
|
inlineoverridevirtual |
Returns true iff this Expr
is constant, i.e.
consists only of constants and can be evaluated at compilation time.
Implements m::ast::Expr.
|
inline |
Returns true
iff this Designator
has no table name, neither explicitly nor implicitly (by sema).
|
inlineinherited |
|
overridevirtual |
Returns true
iff other
is syntactically equal to this
.
Implements m::ast::Expr.
Definition at line 89 of file AST.cpp.
References m::and, attr_name, has_table_name(), table_name, and m::ast::Token::text.
|
inlineprivate |
Marks this Designator
as free variable, i.e.
not being bound by the query.
|
inline |
|
inlineinherited |
Returns the Type
of this Expr
.
Assumes that the Expr
has been assigned a Type
by the Sema
.
Definition at line 58 of file AST.hpp.
References M_notnull.
Referenced by m::ast::Sema::create_designator(), m::ast::UnaryExpr::hash(), m::ast::BinaryExpr::hash(), index_scan_codegen_compilation(), m::wasm::ExprCompiler::operator()(), and WeighExpr::operator()().
|
inlineinherited |
Should be used when constructing an Expr
outside of the Sema
. Should not be called to replace an already assigned type.
Definition at line 61 of file AST.hpp.
References M_insist, and m::ast::Expr::type().
Referenced by m::ast::Expr::type().
Token m::ast::Designator::attr_name |
Definition at line 139 of file AST.hpp.
Referenced by hash(), m::wasm::ExprCompiler::operator()(), and operator==().
|
private |
|
privateinherited |
Token m::ast::Designator::table_name |
Definition at line 138 of file AST.hpp.
Referenced by m::wasm::ExprCompiler::operator()(), and operator==().
|
private |
|
inherited |
the token of the expression; serves as an anchor to locate the expression in the source
Definition at line 43 of file AST.hpp.
Referenced by m::ast::Sema::create_designator(), m::ast::Constant::hash(), m::Interpreter::M_OPERATOR_LIST(), and m::ast::Constant::operator==().
|
privateinherited |
|
private |