Skip to content

Commit a837a20

Browse files
authored
Antlr4 sql flag (#9091)
1 parent 8d11d04 commit a837a20

File tree

4 files changed

+26
-10
lines changed

4 files changed

+26
-10
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ namespace NSQLTranslation {
7474
return false;
7575
}
7676

77+
if (settings.Flags.contains("Antlr4")) {
78+
settings.Antlr4Parser = true;
79+
}
80+
7781
TSplitDelimiters lineDelimiters("\n\r");
7882
TDelimitersSplit linesSplit(query, lineDelimiters);
7983
auto lineIterator = linesSplit.Iterator();
@@ -126,6 +130,8 @@ namespace NSQLTranslation {
126130
settings.AnsiLexer = true;
127131
} else if (value == "antlr4_parser") {
128132
settings.Antlr4Parser = true;
133+
} else if (value == "antlr3_parser") {
134+
settings.Antlr4Parser = false;
129135
} else if (value == "syntax_pg") {
130136
settings.PgParser = true;
131137
} else {

ydb/library/yql/tools/yqlrun/http/yql_server.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class TOptPipelineConfigurator : public IPipelineConfigurator, TLogLevelPromoute
138138
IOutputStream* Stream;
139139
};
140140

141-
NSQLTranslation::TTranslationSettings GetTranslationSettings(const THolder<TGatewaysConfig>& gatewaysConfig) {
141+
NSQLTranslation::TTranslationSettings GetTranslationSettings(const THashSet<TString>& sqlFlags) {
142142
static const THashMap<TString, TString> clusters = {
143143
{ "plato", TString(YtProviderName) },
144144
{ "plato_rtmr", TString(RtmrProviderName) },
@@ -151,9 +151,7 @@ NSQLTranslation::TTranslationSettings GetTranslationSettings(const THolder<TGate
151151
settings.SyntaxVersion = 1;
152152
settings.InferSyntaxVersion = true;
153153
settings.V0Behavior = NSQLTranslation::EV0Behavior::Report;
154-
if (gatewaysConfig && gatewaysConfig->HasSqlCore()) {
155-
settings.Flags.insert(gatewaysConfig->GetSqlCore().GetTranslationFlags().begin(), gatewaysConfig->GetSqlCore().GetTranslationFlags().end());
156-
}
154+
settings.Flags = sqlFlags;
157155
return settings;
158156
}
159157

@@ -326,7 +324,7 @@ YQL_ACTION(Parse)
326324

327325
bool parsed = (options & TYqlAction::YqlProgram)
328326
? prg->ParseYql()
329-
: prg->ParseSql(GetTranslationSettings(YqlServer.GatewaysConfig));
327+
: prg->ParseSql(GetTranslationSettings(YqlServer.SqlFlags));
330328

331329
if (parsed) {
332330
ui32 prettyFlg = TAstPrintFlags::PerLine | TAstPrintFlags::ShortQuote;
@@ -353,7 +351,7 @@ YQL_ACTION(Compile)
353351
TProgramPtr prg = MakeFileProgram(program, YqlServer, {}, {}, tmpDir.Name());
354352
prg->SetParametersYson(parameters);
355353

356-
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.GatewaysConfig));
354+
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.SqlFlags));
357355
noError = noError && prg->Compile(GetUsername());
358356

359357
if (options & (EOptions::PrintAst | EOptions::PrintExpr)) {
@@ -387,7 +385,7 @@ YQL_ACTION(OptimizeOrValidateFile)
387385
TTempDir tmpDir;
388386
TProgramPtr prg = MakeFileProgram(program, input, attr, inputFile, outputFile, YqlServer, tmpDir.Name());
389387

390-
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.GatewaysConfig));
388+
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.SqlFlags));
391389

392390
prg->SetParametersYson(parameters);
393391
prg->SetDiagnosticFormat(NYson::EYsonFormat::Pretty);
@@ -462,7 +460,7 @@ YQL_ACTION(FileRun)
462460
TTempDir tmpDir;
463461
TProgramPtr prg = MakeFileProgram(program, input, attr, inputFile, outputFile, YqlServer, tmpDir.Name());
464462

465-
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.GatewaysConfig));
463+
bool noError = (options & TYqlAction::YqlProgram) ? prg->ParseYql() : prg->ParseSql(GetTranslationSettings(YqlServer.SqlFlags));
466464

467465
prg->SetDiagnosticFormat(NYson::EYsonFormat::Pretty);
468466
prg->SetParametersYson(parameters);
@@ -634,13 +632,14 @@ TAutoPtr<TYqlServer> CreateYqlServer(
634632
ui64 nextUniqueId,
635633
TUserDataTable filesMapping,
636634
THolder<TGatewaysConfig>&& gatewaysConfig,
635+
const THashSet<TString>& sqlFlags,
637636
IModuleResolver::TPtr modules,
638637
IUdfResolver::TPtr udfResolver,
639638
TFileStoragePtr fileStorage)
640639
{
641640
TAutoPtr<TYqlServer> server = new TYqlServer(
642641
config, functionRegistry, udfIndex, nextUniqueId,
643-
std::move(filesMapping), std::move(gatewaysConfig), modules, udfResolver, fileStorage);
642+
std::move(filesMapping), std::move(gatewaysConfig), sqlFlags, modules, udfResolver, fileStorage);
644643

645644
server->RegisterAction<TYqlActionPaste>("/api/yql/paste");
646645
server->RegisterAction<TYqlActionParse>("/api/yql/parse");

ydb/library/yql/tools/yqlrun/http/yql_server.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class TYqlServer: private TNonCopyable
3737
ui64 nextUniqueId,
3838
TUserDataTable filesMapping,
3939
THolder<TGatewaysConfig>&& gatewaysConfig,
40+
const THashSet<TString>& sqlFlags,
4041
IModuleResolver::TPtr modules,
4142
IUdfResolver::TPtr udfResolver,
4243
TFileStoragePtr fileStorage)
@@ -46,6 +47,7 @@ class TYqlServer: private TNonCopyable
4647
, NextUniqueId(nextUniqueId)
4748
, FilesMapping(std::move(filesMapping))
4849
, GatewaysConfig(std::move(gatewaysConfig))
50+
, SqlFlags(sqlFlags)
4951
, Modules(modules)
5052
, UdfResolver(udfResolver)
5153
, FileStorage(fileStorage)
@@ -72,6 +74,7 @@ class TYqlServer: private TNonCopyable
7274
ui64 NextUniqueId;
7375
TUserDataTable FilesMapping;
7476
const THolder<TGatewaysConfig> GatewaysConfig;
77+
const THashSet<TString> SqlFlags;
7578
IModuleResolver::TPtr Modules;
7679
IUdfResolver::TPtr UdfResolver;
7780
TFileStoragePtr FileStorage;
@@ -84,6 +87,7 @@ TAutoPtr<TYqlServer> CreateYqlServer(
8487
ui64 nextUniqueId,
8588
TUserDataTable filesMapping,
8689
THolder<TGatewaysConfig>&& gatewaysConfig,
90+
const THashSet<TString>& sqlFlags,
8791
IModuleResolver::TPtr modules = nullptr,
8892
IUdfResolver::TPtr udfResolver = nullptr,
8993
TFileStoragePtr fileStorage = nullptr);

ydb/library/yql/tools/yqlrun/yqlrun.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,7 @@ int RunUI(int argc, const char* argv[])
935935

936936
THashMap<TString, TString> clusterMapping;
937937
clusterMapping["plato"] = YtProviderName;
938+
THashSet<TString> sqlFlags;
938939

939940
NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default();
940941
opts.AddLongOption('u', "udf", "Load shared library with UDF by given path").AppendTo(&udfsPaths);
@@ -951,6 +952,7 @@ int RunUI(int argc, const char* argv[])
951952
opts.AddLongOption("gateways-cfg", "gateways configuration file").Optional().RequiredArgument("FILE").StoreResult(&gatewaysCfgFile);
952953
opts.AddLongOption("fs-cfg", "fs configuration file").Optional().RequiredArgument("FILE").StoreResult(&fsCfgFile);
953954
opts.AddLongOption("pg-ext", "pg extensions config file").StoreResult(&pgExtConfig);
955+
opts.AddLongOption("sql-flags", "SQL translator pragma flags").SplitHandler(&sqlFlags, ',');
954956

955957
TServerConfig config;
956958
config.SetAssetsPath("http/www");
@@ -993,6 +995,10 @@ int RunUI(int argc, const char* argv[])
993995
if (!gatewaysConfig) {
994996
return -1;
995997
}
998+
999+
if (gatewaysConfig->HasSqlCore()) {
1000+
sqlFlags.insert(gatewaysConfig->GetSqlCore().GetTranslationFlags().begin(), gatewaysConfig->GetSqlCore().GetTranslationFlags().end());
1001+
}
9961002
}
9971003

9981004
THolder<TFileStorageConfig> fsConfig;
@@ -1028,7 +1034,7 @@ int RunUI(int argc, const char* argv[])
10281034
return -1;
10291035
}
10301036

1031-
moduleResolver = std::make_shared<TModuleResolver>(std::move(modules), ctx.NextUniqueId, clusterMapping, THashSet<TString>());
1037+
moduleResolver = std::make_shared<TModuleResolver>(std::move(modules), ctx.NextUniqueId, clusterMapping, sqlFlags);
10321038
} else {
10331039
if (!GetYqlDefaultModuleResolver(ctx, moduleResolver, clusterMapping)) {
10341040
Cerr << "Errors loading default YQL libraries:" << Endl;
@@ -1058,6 +1064,7 @@ int RunUI(int argc, const char* argv[])
10581064
funcRegistry.Get(), udfIndex, ctx.NextUniqueId,
10591065
userData,
10601066
std::move(gatewaysConfig),
1067+
sqlFlags,
10611068
moduleResolver, udfResolver, fileStorage);
10621069
server->Start();
10631070
server->Wait();

0 commit comments

Comments
 (0)