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.

Public functions

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

GetSchemaSource(size_t idx) const

const SchemaSource *

GetSchema(size_t idx) 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

void

void

Empty() const

bool

GetColumnNum() const

size_t

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 idxth schema source.

function GetSchemaSource

const SchemaSource * GetSchemaSource(
    size_t idx
) const

Get idxth schema source.

function GetSchema

const codec::Schema * GetSchema(
    size_t idx
) const

Get raw schema for idxth 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