diff options
author | vitya-smirnov <[email protected]> | 2025-10-01 20:51:41 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-10-01 21:25:50 +0300 |
commit | f3f7b33a285e94cb3e27aaa4d9b23b543ece4106 (patch) | |
tree | 89740eeddb803123f1ed3d6b6f7be2bcd865f68c /yql/essentials/sql/v1/sql_select.h | |
parent | 5cfb01d33937d2b2e038abf3b50e04136dcf7496 (diff) |
YQL-20307: Support inline subqueries
- Alter grammar to support inline subqueries.
- Support inline subqueries in `sql/v1` (translator).
- Introduce `sql/v1/proto_ast/parse_tree.h` for reusable parse tree predicates.
- Support inline subqueries in `sql/v1/format`.
- Support inline subqueries in `sql/v1/complete`.
- Add some SQL-tests.
- Pass all tests.
commit_hash:075b2240778d071e1c7542f912d3cc83019ef849
Diffstat (limited to 'yql/essentials/sql/v1/sql_select.h')
-rw-r--r-- | yql/essentials/sql/v1/sql_select.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/yql/essentials/sql/v1/sql_select.h b/yql/essentials/sql/v1/sql_select.h index f4097396745..9bd553d49ab 100644 --- a/yql/essentials/sql/v1/sql_select.h +++ b/yql/essentials/sql/v1/sql_select.h @@ -16,6 +16,8 @@ public: TSourcePtr Build(const TRule_select_stmt& node, TPosition& selectPos); TSourcePtr Build(const TRule_select_unparenthesized_stmt& node, TPosition& selectPos); + TSourcePtr BuildSubSelect(const TRule_select_kind_partial& node); + TSourcePtr BuildSubSelect(const TRule_select_subexpr& node); private: bool SelectTerm(TVector<TNodePtr>& terms, const TRule_result_column& node); @@ -75,22 +77,30 @@ private: template <typename TRule> requires std::same_as<TRule, TRule_select_stmt> || - std::same_as<TRule, TRule_select_unparenthesized_stmt> + std::same_as<TRule, TRule_select_unparenthesized_stmt> || + std::same_as<TRule, TRule_select_subexpr> TSourcePtr BuildStmt(const TRule& node, TPosition& pos); + TSourcePtr BuildStmt(const TRule_select_kind_partial& node); + + TSourcePtr BuildStmt(TSourcePtr result, TBuildExtra extra); + template <typename TRule> requires std::same_as<TRule, TRule_select_stmt> || - std::same_as<TRule, TRule_select_unparenthesized_stmt> + std::same_as<TRule, TRule_select_unparenthesized_stmt> || + std::same_as<TRule, TRule_select_subexpr> TSourcePtr BuildUnionException(const TRule& node, TPosition& pos, TBuildExtra& extra); template <typename TRule> requires std::same_as<TRule, TRule_select_stmt_intersect> || - std::same_as<TRule, TRule_select_unparenthesized_stmt_intersect> + std::same_as<TRule, TRule_select_unparenthesized_stmt_intersect> || + std::same_as<TRule, TRule_select_subexpr_intersect> TSourcePtr BuildIntersection(const TRule& node, TPosition& pos, TSelectKindPlacement placement, TBuildExtra& extra); template <typename TRule> requires std::same_as<TRule, TRule_select_kind_parenthesis> || - std::same_as<TRule, TRule_select_kind_partial> + std::same_as<TRule, TRule_select_kind_partial> || + std::same_as<TRule, TRule_select_or_expr> TSelectKindResult BuildAtom(const TRule& node, TPosition& pos, TSelectKindPlacement placement, TBuildExtra& extra); TSelectKindResult SelectKind(const TRule_select_kind& node, TPosition& selectPos, TMaybe<TSelectKindPlacement> placement); |