summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_select.h
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-10-01 20:51:41 +0300
committervitya-smirnov <[email protected]>2025-10-01 21:25:50 +0300
commitf3f7b33a285e94cb3e27aaa4d9b23b543ece4106 (patch)
tree89740eeddb803123f1ed3d6b6f7be2bcd865f68c /yql/essentials/sql/v1/sql_select.h
parent5cfb01d33937d2b2e038abf3b50e04136dcf7496 (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.h18
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);