hybridse::vm::SchemasContext
#include <schemas_context.h>
Summary
class hybridse::vm::SchemasContext;
Utility context to resolve column spec into detailed column information. This class should be explicitly initialized with schema source list info or some physical node with schema intiailized. If initialized by physical node, current context will take a relation name used when column search is assiociated with a relation name. and the node graph can be traversed to resolve column inherited from input nodes.
SchemasContext(const PhysicalOpNode * root)
ResolveColumnIndexByName(const std::string & relation_name, const std::string & column_name, size_t * schema_idx, size_t * col_idx) const
base::Status
ResolveColumnIndexByID(size_t column_id, size_t * schema_idx, size_t * col_idx) const
base::Status
ResolveColumnNameByID(size_t column_id, std::string * name) const
base::Status
ResolveColumnRefIndex(const node::ColumnRefNode * column_ref, size_t * schema_idx, size_t * col_idx) const
base::Status
ResolveColumnID(const std::string & relation_name, const std::string & column_name, size_t * column_id) const
base::Status
ResolveColumnID(const std::string & relation_name, const std::string & column_name, size_t * column_id, int * child_path_idx, size_t * child_column_id, size_t * source_column_id, const PhysicalOpNode ** source_node) const
base::Status
ResolveExprDependentColumns(const node::ExprNode * expr, std::set< size_t > * column_ids) const
base::Status
ResolveExprDependentColumns(const node::ExprNode * expr, std::vector< const node::ExprNode * > * columns) const
base::Status
GetName() const
const std::string &
GetRoot() const
const PhysicalOpNode *
GetRowFormat(size_t idx) const
const codec::RowFormat *
GetSchemaSource(size_t idx) const
const SchemaSource *
GetSchema(size_t idx) const
const codec::Schema *
GetSchemaSourceSize() const
size_t
SetName(const std::string & name)
void
Merge(size_t child_idx, const SchemasContext * child)
void
MergeWithNewID(size_t child_idx, const SchemasContext * child, PhysicalPlanContext * plan_ctx)
void
Clear()
void
Build()
void
Empty() const
bool
GetColumnNum() const
size_t
GetOutputSchema() const
const codec::Schema *
BuildTrivial(const std::vector< const codec::Schema * > & schemas)
void
BuildTrivial(const std::vector< const type::TableDef * > & tables)
void
Public Functions
function SchemasContext
inline SchemasContext()
function SchemasContext
inline explicit SchemasContext(
const PhysicalOpNode * root
)
function ~SchemasContext
~SchemasContext()
function ResolveColumnIndexByName
base::Status ResolveColumnIndexByName(
const std::string & relation_name,
const std::string & column_name,
size_t * schema_idx,
size_t * col_idx
) const
Given relation name and column name, return schema slice index and column index within current context.
function ResolveColumnIndexByID
base::Status ResolveColumnIndexByID(
size_t column_id,
size_t * schema_idx,
size_t * col_idx
) const
Given unique column id, return schema slice index and column index within schema slice within current context.
function ResolveColumnNameByID
base::Status ResolveColumnNameByID(
size_t column_id,
std::string * name
) const
Given unique column id, return column name.
function ResolveColumnRefIndex
base::Status ResolveColumnRefIndex(
const node::ColumnRefNode * column_ref,
size_t * schema_idx,
size_t * col_idx
) const
Resolve index for column reference expression
function ResolveColumnID
base::Status ResolveColumnID(
const std::string & relation_name,
const std::string & column_name,
size_t * column_id
) const
Given relation name and column name, return column unique id under current context.
function ResolveColumnID
base::Status ResolveColumnID(
const std::string & relation_name,
const std::string & column_name,
size_t * column_id,
int * child_path_idx,
size_t * child_column_id,
size_t * source_column_id,
const PhysicalOpNode ** source_node
) const
Resolve source column by relation name and column name recursively. If it can be resolved in current node, child_path_id
is -1, else child_path_id
is the index of the child which the column is resolved from.
function ResolveExprDependentColumns
base::Status ResolveExprDependentColumns(
const node::ExprNode * expr,
std::set< size_t > * column_ids
) const
Resolve all columns input expression will depend on. Return column id list.
function ResolveExprDependentColumns
base::Status ResolveExprDependentColumns(
const node::ExprNode * expr,
std::vector< const node::ExprNode * > * columns
) const
function GetName
const std::string & GetName() const
Get the relation name for this schema context, default ""
function GetRoot
const PhysicalOpNode * GetRoot() const
function GetRowFormat
const codec::RowFormat * GetRowFormat(
size_t idx
) const
Get detailed format for idx
th schema source.
function GetSchemaSource
const SchemaSource * GetSchemaSource(
size_t idx
) const
Get idx
th schema source.
function GetSchema
const codec::Schema * GetSchema(
size_t idx
) const
Get raw schema for idx
th schema source.
function GetSchemaSourceSize
size_t GetSchemaSourceSize() const
Get num of total schema sources.
function SetName
void SetName(
const std::string & name
)
Set the relation name for this schema context.
function AddSource
SchemaSource * AddSource()
Add new schema source and return the mutable instance of added source.
function Merge
void Merge(
size_t child_idx,
const SchemasContext * child
)
Add schema sources from child and inherit column identifiers.
function MergeWithNewID
void MergeWithNewID(
size_t child_idx,
const SchemasContext * child,
PhysicalPlanContext * plan_ctx
)
Add schema sources from child with new column identifiers. The source informations are set to traceback which child column the new column is from.
function Clear
void Clear()
function Build
void Build()
function Empty
inline bool Empty() const
function GetColumnNum
size_t GetColumnNum() const
Get total column num of all schema sources.
function GetOutputSchema
const codec::Schema * GetOutputSchema() const
function BuildTrivial
void BuildTrivial(
const std::vector< const codec::Schema * > & schemas
)
Helper method to init schemas context with trival schema sources this can be commonly used when no plan node is provided.
function BuildTrivial
void BuildTrivial(
const std::vector< const type::TableDef * > & tables
)
Last updated