diff --git a/ydb/library/yql/tools/dqrun/dqrun.cpp b/ydb/library/yql/tools/dqrun/dqrun.cpp index d9d5f081a647..c6d2c350b973 100644 --- a/ydb/library/yql/tools/dqrun/dqrun.cpp +++ b/ydb/library/yql/tools/dqrun/dqrun.cpp @@ -13,6 +13,8 @@ #include #include +#include + #include #include #include @@ -462,6 +464,7 @@ int RunMain(int argc, const char* argv[]) TString fileStorageCfg; TVector udfsPaths; TString udfsDir; + bool excludeLinkedUdfs = false; TMaybe dqHost; TMaybe dqPort; int threads = 16; @@ -543,6 +546,11 @@ int RunMain(int argc, const char* argv[]) opts.AddLongOption("udfs-dir", "Load all shared libraries with UDFs found" " in given directory") .StoreResult(&udfsDir); + opts.AddLongOption("exclude-linked-udfs", "Exclude linked udfs when same udf passed from -u or --udfs-dir") + .Optional() + .NoArgument() + .DefaultValue(excludeLinkedUdfs) + .SetFlag(&excludeLinkedUdfs); opts.AddLongOption("validate", "validate expression") .Optional() .NoArgument() @@ -780,7 +788,16 @@ int RunMain(int argc, const char* argv[]) NMiniKQL::FindUdfsInDir(udfsDir, &udfsPaths); auto funcRegistry = NMiniKQL::CreateFunctionRegistry(&NYql::NBacktrace::KikimrBackTrace, NMiniKQL::CreateBuiltinRegistry(), false, udfsPaths)->Clone(); - NKikimr::NMiniKQL::FillStaticModules(*funcRegistry); + if (excludeLinkedUdfs) { + for (const auto& wrapper : NYql::NUdf::GetStaticUdfModuleWrapperList()) { + auto [name, ptr] = wrapper(); + if (!funcRegistry->IsLoadedUdfModule(name)) { + funcRegistry->AddModule(TString(NKikimr::NMiniKQL::StaticModulePrefix) + name, name, std::move(ptr)); + } + } + } else { + NKikimr::NMiniKQL::FillStaticModules(*funcRegistry); + } TGatewaysConfig gatewaysConfig; ReadGatewaysConfig(gatewaysCfgFile, &gatewaysConfig, sqlFlags);