diff options
author | vitya-smirnov <[email protected]> | 2025-10-07 09:34:39 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-10-07 09:52:14 +0300 |
commit | babe7533f18c11be1f8a195ed2324d2d9a89436a (patch) | |
tree | 45b7627141bf5a52b45a3d61fd1fbdd564bb8dd9 /yql/essentials/sql/v1/complete/analysis/global/use.cpp | |
parent | 8fe7cfe254fde2772477a8933a163b5f303716b4 (diff) |
YQL-20086 sql/v1
commit_hash:55bc611cdaa0d8a0fc3c4c7708ed9f17cc4976cf
Diffstat (limited to 'yql/essentials/sql/v1/complete/analysis/global/use.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/analysis/global/use.cpp | 172 |
1 files changed, 86 insertions, 86 deletions
diff --git a/yql/essentials/sql/v1/complete/analysis/global/use.cpp b/yql/essentials/sql/v1/complete/analysis/global/use.cpp index 89e5ae458e6..58b6b13bb09 100644 --- a/yql/essentials/sql/v1/complete/analysis/global/use.cpp +++ b/yql/essentials/sql/v1/complete/analysis/global/use.cpp @@ -5,111 +5,111 @@ namespace NSQLComplete { - namespace { - - class TVisitor: public TSQLv1NarrowingVisitor { - public: - TVisitor(const TParsedInput& input, const TNamedNodes* nodes) - : TSQLv1NarrowingVisitor(input) - , Nodes_(nodes) - { - } - - std::any visitSql_stmt_core(SQLv1::Sql_stmt_coreContext* ctx) override { - if (ctx->use_stmt() || IsEnclosing(ctx)) { - return visitChildren(ctx); - } - return {}; - } - - std::any visitUse_stmt(SQLv1::Use_stmtContext* ctx) override { - SQLv1::Cluster_exprContext* expr = ctx->cluster_expr(); - if (!expr) { - return {}; - } - - TMaybe<TClusterContext> cluster = ParseClusterContext(expr, *Nodes_); - if (!cluster) { - return {}; - } +namespace { + +class TVisitor: public TSQLv1NarrowingVisitor { +public: + TVisitor(const TParsedInput& input, const TNamedNodes* nodes) + : TSQLv1NarrowingVisitor(input) + , Nodes_(nodes) + { + } - return *cluster; - } + std::any visitSql_stmt_core(SQLv1::Sql_stmt_coreContext* ctx) override { + if (ctx->use_stmt() || IsEnclosing(ctx)) { + return visitChildren(ctx); + } + return {}; + } - private: - const TNamedNodes* Nodes_; - }; + std::any visitUse_stmt(SQLv1::Use_stmtContext* ctx) override { + SQLv1::Cluster_exprContext* expr = ctx->cluster_expr(); + if (!expr) { + return {}; + } - class TClusterVisitor: public TSQLv1BaseVisitor { - public: - explicit TClusterVisitor(const TNamedNodes* nodes) - : Nodes_(nodes) - { - } + TMaybe<TClusterContext> cluster = ParseClusterContext(expr, *Nodes_); + if (!cluster) { + return {}; + } - std::any visitCluster_expr(SQLv1::Cluster_exprContext* ctx) { - std::string provider; - std::string cluster; + return *cluster; + } - if (SQLv1::An_idContext* id = ctx->an_id()) { - provider = id->getText(); - } +private: + const TNamedNodes* Nodes_; +}; - if (SQLv1::Pure_column_or_namedContext* named = ctx->pure_column_or_named()) { - if (auto id = GetId(named)) { - cluster = std::move(*id); - } - } +class TClusterVisitor: public TSQLv1BaseVisitor { +public: + explicit TClusterVisitor(const TNamedNodes* nodes) + : Nodes_(nodes) + { + } - if (cluster.empty()) { - return {}; - } + std::any visitCluster_expr(SQLv1::Cluster_exprContext* ctx) { + std::string provider; + std::string cluster; - return TClusterContext{ - .Provider = std::move(provider), - .Name = std::move(cluster), - }; - } + if (SQLv1::An_idContext* id = ctx->an_id()) { + provider = id->getText(); + } - private: - TMaybe<TString> GetId(SQLv1::Pure_column_or_namedContext* ctx) const { - if (auto* x = ctx->bind_parameter()) { - return GetId(x); - } else if (auto* x = ctx->an_id()) { - return x->getText(); - } else { - Y_ABORT("You should change implementation according grammar changes"); - } + if (SQLv1::Pure_column_or_namedContext* named = ctx->pure_column_or_named()) { + if (auto id = GetId(named)) { + cluster = std::move(*id); } + } - TMaybe<TString> GetId(SQLv1::Bind_parameterContext* ctx) const { - NYT::TNode node = Evaluate(ctx, *Nodes_); - if (!node.HasValue() || !node.IsString()) { - return Nothing(); - } - return node.AsString(); - } + if (cluster.empty()) { + return {}; + } - const TNamedNodes* Nodes_; + return TClusterContext{ + .Provider = std::move(provider), + .Name = std::move(cluster), }; + } - } // namespace - - TMaybe<TClusterContext> ParseClusterContext(SQLv1::Cluster_exprContext* ctx, const TNamedNodes& nodes) { - std::any result = TClusterVisitor(&nodes).visit(ctx); - if (!result.has_value()) { - return Nothing(); +private: + TMaybe<TString> GetId(SQLv1::Pure_column_or_namedContext* ctx) const { + if (auto* x = ctx->bind_parameter()) { + return GetId(x); + } else if (auto* x = ctx->an_id()) { + return x->getText(); + } else { + Y_ABORT("You should change implementation according grammar changes"); } - return std::any_cast<TClusterContext>(result); } - // TODO(YQL-19747): Use any to maybe conversion function - TMaybe<TClusterContext> FindUseStatement(TParsedInput input, const TNamedNodes& nodes) { - std::any result = TVisitor(input, &nodes).visit(input.SqlQuery); - if (!result.has_value()) { + TMaybe<TString> GetId(SQLv1::Bind_parameterContext* ctx) const { + NYT::TNode node = Evaluate(ctx, *Nodes_); + if (!node.HasValue() || !node.IsString()) { return Nothing(); } - return std::any_cast<TClusterContext>(result); + return node.AsString(); + } + + const TNamedNodes* Nodes_; +}; + +} // namespace + +TMaybe<TClusterContext> ParseClusterContext(SQLv1::Cluster_exprContext* ctx, const TNamedNodes& nodes) { + std::any result = TClusterVisitor(&nodes).visit(ctx); + if (!result.has_value()) { + return Nothing(); + } + return std::any_cast<TClusterContext>(result); +} + +// TODO(YQL-19747): Use any to maybe conversion function +TMaybe<TClusterContext> FindUseStatement(TParsedInput input, const TNamedNodes& nodes) { + std::any result = TVisitor(input, &nodes).visit(input.SqlQuery); + if (!result.has_value()) { + return Nothing(); } + return std::any_cast<TClusterContext>(result); +} } // namespace NSQLComplete |