@@ -53,6 +53,33 @@ TString CollectTokens(const TRule_select_stmt& selectStatement) {
53
53
return tokenCollector.Tokens ;
54
54
}
55
55
56
+ NSQLTranslation::TTranslationSettings CreateViewTranslationSettings (const NSQLTranslation::TTranslationSettings& base) {
57
+ NSQLTranslation::TTranslationSettings settings;
58
+
59
+ settings.ClusterMapping = base.ClusterMapping ;
60
+ settings.Mode = NSQLTranslation::ESqlMode::LIMITED_VIEW;
61
+
62
+ return settings;
63
+ }
64
+
65
+ TNodePtr BuildViewSelect (const TRule_select_stmt& query, TContext& ctx) {
66
+ const auto viewTranslationSettings = CreateViewTranslationSettings (ctx.Settings );
67
+ TContext viewParsingContext (viewTranslationSettings, {}, ctx.Issues );
68
+ TSqlSelect select (viewParsingContext, viewTranslationSettings.Mode );
69
+ TPosition pos;
70
+ auto source = select.Build (query, pos);
71
+ if (!source) {
72
+ return nullptr ;
73
+ }
74
+ return BuildSelectResult (
75
+ pos,
76
+ std::move (source),
77
+ false ,
78
+ false ,
79
+ viewParsingContext.Scoped
80
+ );
81
+ }
82
+
56
83
}
57
84
58
85
namespace NSQLTranslationV1 {
@@ -4484,19 +4511,11 @@ bool TSqlTranslation::ParseViewQuery(std::map<TString, TDeferredAtom>& features,
4484
4511
const TString queryText = CollectTokens (query);
4485
4512
features[" query_text" ] = {Ctx.Pos (), queryText};
4486
4513
4487
- {
4488
- TSqlSelect select (Ctx, Mode);
4489
- TPosition pos;
4490
- auto source = select.Build (query, pos);
4491
- if (!source) {
4492
- return false ;
4493
- }
4494
- features[" query_ast" ] = {BuildSelectResult (pos,
4495
- std::move (source),
4496
- false ,
4497
- false ,
4498
- Ctx.Scoped ), Ctx};
4514
+ const auto viewSelect = BuildViewSelect (query, Ctx);
4515
+ if (!viewSelect) {
4516
+ return false ;
4499
4517
}
4518
+ features[" query_ast" ] = {viewSelect, Ctx};
4500
4519
4501
4520
return true ;
4502
4521
}
0 commit comments