Skip to content

Commit e573b9d

Browse files
authored
Save more translation settings (#4890)
1 parent b9e6764 commit e573b9d

File tree

4 files changed

+46
-8
lines changed

4 files changed

+46
-8
lines changed

ydb/library/yql/core/facade/yql_facade.cpp

+24-2
Original file line numberDiff line numberDiff line change
@@ -572,13 +572,24 @@ void TProgram::HandleTranslationSettings(NSQLTranslation::TTranslationSettings&
572572
const NSQLTranslation::TTranslationSettings*& currentSettings)
573573
{
574574
if (QContext_.CanWrite()) {
575-
auto clusterMappingsNode = NYT::TNode();
575+
auto clusterMappingsNode = NYT::TNode::CreateMap();
576576
for (const auto& c : currentSettings->ClusterMapping) {
577577
clusterMappingsNode(c.first, c.second);
578578
}
579579

580+
auto sqlFlagsNode = NYT::TNode::CreateList();
581+
for (const auto& f : currentSettings->Flags) {
582+
sqlFlagsNode.Add(f);
583+
}
584+
580585
auto dataNode = NYT::TNode()
581-
("ClusterMapping", clusterMappingsNode);
586+
("ClusterMapping", clusterMappingsNode)
587+
("V0Behavior", ui64(currentSettings->V0Behavior))
588+
("V0WarnAsError", currentSettings->V0WarnAsError->Allow())
589+
("DqDefaultAuto", currentSettings->DqDefaultAuto->Allow())
590+
("BlockDefaultAuto", currentSettings->BlockDefaultAuto->Allow())
591+
("SqlFlags", sqlFlagsNode);
592+
582593
auto data = NYT::NodeToYsonString(dataNode, NYT::NYson::EYsonFormat::Binary);
583594
QContext_.GetWriter()->Put({FacadeComponent, TranslationLabel}, data).GetValueSync();
584595
} else if (QContext_.CanRead()) {
@@ -588,10 +599,20 @@ void TProgram::HandleTranslationSettings(NSQLTranslation::TTranslationSettings&
588599
}
589600

590601
auto dataNode = NYT::NodeFromYsonString(loaded->Value);
602+
loadedSettings.ClusterMapping.clear();
591603
for (const auto& c : dataNode["ClusterMapping"].AsMap()) {
592604
loadedSettings.ClusterMapping[c.first] = c.second.AsString();
593605
}
594606

607+
loadedSettings.Flags.clear();
608+
for (const auto& f : dataNode["SqlFlags"].AsList()) {
609+
loadedSettings.Flags.insert(f.AsString());
610+
}
611+
612+
loadedSettings.V0Behavior = (NSQLTranslation::EV0Behavior)dataNode["V0Behavior"].AsUint64();
613+
loadedSettings.V0WarnAsError = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["V0WarnAsError"].AsBool());
614+
loadedSettings.DqDefaultAuto = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["DqDefaultAuto"].AsBool());
615+
loadedSettings.BlockDefaultAuto = NSQLTranslation::ISqlFeaturePolicy::Make(dataNode["BlockDefaultAuto"].AsBool());
595616
currentSettings = &loadedSettings;
596617
}
597618
}
@@ -629,6 +650,7 @@ bool TProgram::ParseSql(const NSQLTranslation::TTranslationSettings& settings)
629650
HandleSourceCode(sourceCode);
630651
const NSQLTranslation::TTranslationSettings* currentSettings = &settings;
631652
NSQLTranslation::TTranslationSettings loadedSettings;
653+
loadedSettings.PgParser = settings.PgParser;
632654
if (QContext_) {
633655
HandleTranslationSettings(loadedSettings, currentSettings);
634656
}

ydb/library/yql/core/ut/yql_qplayer_ut.cpp

+14-5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ void WithTables(const F&& f) {
5050

5151
struct TRunSettings {
5252
bool IsSql = true;
53+
bool IsPg = false;
5354
THashMap<TString, TString> Tables;
5455
TMaybe<TString> ParametersYson;
5556
THashMap<TString, TString> StaticFiles, DynamicFiles;
@@ -114,16 +115,17 @@ bool RunProgram(bool replay, const TString& query, const TQContext& qContext, co
114115
program->AddUserDataTable(MakeUserTables(runSettings.DynamicFiles));
115116
}
116117

117-
if (runSettings.IsSql) {
118+
if (runSettings.IsSql || runSettings.IsPg) {
118119
NSQLTranslation::TTranslationSettings settings;
120+
settings.PgParser = runSettings.IsPg;
119121
if (!replay) {
120122
settings.ClusterMapping["plato"] = TString(YtProviderName);
121123
}
122124

123125
if (!program->ParseSql(settings)) {
124126
program->PrintErrorsTo(Cerr);
125127
return false;
126-
}
128+
}
127129
} else if (!program->ParseYql()) {
128130
program->PrintErrorsTo(Cerr);
129131
return false;
@@ -134,7 +136,7 @@ bool RunProgram(bool replay, const TString& query, const TQContext& qContext, co
134136
return false;
135137
}
136138

137-
TProgram::TStatus status = replay ?
139+
TProgram::TStatus status = replay ?
138140
program->Optimize(GetUsername()) :
139141
program->Run(GetUsername());
140142
if (status == TProgram::TStatus::Error) {
@@ -188,7 +190,7 @@ Y_UNIT_TEST_SUITE(QPlayerTests) {
188190
(return world)
189191
)
190192
)";
191-
193+
192194
TRunSettings runSettings;
193195
runSettings.IsSql = false;
194196
CheckProgram(s, runSettings);
@@ -200,12 +202,19 @@ Y_UNIT_TEST_SUITE(QPlayerTests) {
200202
CheckProgram(s, runSettings);
201203
}
202204

205+
Y_UNIT_TEST(SimplePg) {
206+
auto s = "select 1::text";
207+
TRunSettings runSettings;
208+
runSettings.IsPg = true;
209+
CheckProgram(s, runSettings);
210+
}
211+
203212
Y_UNIT_TEST(Udf) {
204213
auto s = "select String::AsciiToUpper('a')";
205214
TRunSettings runSettings;
206215
CheckProgram(s, runSettings);
207216
}
208-
217+
209218
Y_UNIT_TEST(YtGetFolder) {
210219
auto s = "select * from plato.folder('','_yql_row_spec')";
211220
WithTables([&](const auto& tables) {

ydb/library/yql/sql/settings/translation_settings.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ namespace NSQLTranslation {
4040
return new TAlwaysAllowPolicy;
4141
}
4242

43+
ISqlFeaturePolicy::TPtr ISqlFeaturePolicy::Make(bool allow) {
44+
return allow ? MakeAlwaysAllow() : MakeAlwaysDisallow();
45+
}
46+
4347
TTranslationSettings::TTranslationSettings()
4448
: ModuleMapping({{"core", "/lib/yql/core.yql"}})
4549
, BindingsMode(EBindingsMode::ENABLED)

ydb/library/yql/sql/settings/translation_settings.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ namespace NSQLTranslation {
4444

4545
using TIncrementMonCounterFunction = std::function<void(const TString&, const TString&)>;
4646

47-
enum class EV0Behavior {
47+
// persisted
48+
enum class EV0Behavior : ui32 {
4849
Silent = 0,
4950
Report,
5051
Disable
@@ -60,6 +61,8 @@ namespace NSQLTranslation {
6061
static TPtr MakeAlwaysDisallow();
6162

6263
static TPtr MakeAlwaysAllow();
64+
65+
static TPtr Make(bool allow);
6366
};
6467

6568
struct TTableBindingSettings {

0 commit comments

Comments
 (0)