Skip to content

Commit 87c0970

Browse files
authored
Merge 3acf9dd into c206738
2 parents c206738 + 3acf9dd commit 87c0970

File tree

2 files changed

+49
-12
lines changed

2 files changed

+49
-12
lines changed

ydb/core/kqp/ut/view/view_ut.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,24 @@ Y_UNIT_TEST_SUITE(TKQPViewTest) {
316316
UNIT_ASSERT(dropResult.GetIssues().ToString().Contains("Error: Path does not exist"));
317317
}
318318
}
319+
320+
Y_UNIT_TEST(ContextPollution) {
321+
TKikimrRunner kikimr(TKikimrSettings().SetWithSampleTables(false));
322+
EnableViewsFeatureFlag(kikimr);
323+
auto session = kikimr.GetTableClient().CreateSession().GetValueSync().GetSession();
324+
325+
ExecuteDataDefinitionQuery(session, R"(
326+
CREATE VIEW InnerView WITH (security_invoker = TRUE) AS SELECT 1;
327+
)");
328+
ExecuteDataDefinitionQuery(session, R"(
329+
CREATE VIEW OuterView WITH (security_invoker = TRUE) AS SELECT * FROM InnerView;
330+
)");
331+
332+
ExecuteDataDefinitionQuery(session, R"(
333+
DROP VIEW OuterView;
334+
CREATE VIEW OuterView WITH (security_invoker = TRUE) AS SELECT * FROM InnerView;
335+
)");
336+
}
319337
}
320338

321339
Y_UNIT_TEST_SUITE(TSelectFromViewTest) {

ydb/library/yql/sql/v1/sql_translation.cpp

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,33 @@ TString CollectTokens(const TRule_select_stmt& selectStatement) {
5353
return tokenCollector.Tokens;
5454
}
5555

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+
5683
}
5784

5885
namespace NSQLTranslationV1 {
@@ -4484,19 +4511,11 @@ bool TSqlTranslation::ParseViewQuery(std::map<TString, TDeferredAtom>& features,
44844511
const TString queryText = CollectTokens(query);
44854512
features["query_text"] = {Ctx.Pos(), queryText};
44864513

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;
44994517
}
4518+
features["query_ast"] = {viewSelect, Ctx};
45004519

45014520
return true;
45024521
}

0 commit comments

Comments
 (0)