robot-piglet 1 год назад
Родитель
Сommit
de51b1709d

+ 1 - 0
yt/yql/plugin/bridge/interface.h

@@ -24,6 +24,7 @@ struct TBridgeYqlPluginOptions
     const char* DefaultCluster;
 
     const char* OperationAttributes;
+    ssize_t OperationAttributesLength = 0;
 
     const char* YTTokenPath;
 

+ 5 - 6
yt/yql/plugin/bridge/plugin.cpp

@@ -52,9 +52,7 @@ public:
            });
         }
 
-        const char* operationAttributes = options.OperationAttributes
-            ? options.OperationAttributes.ToString().data()
-            : nullptr;
+        auto operationAttributesString = options.OperationAttributes ? options.OperationAttributes.ToString() : "{}";
 
         const char* defaultCluster = options.DefaultCluster
             ? options.DefaultCluster->data()
@@ -66,7 +64,8 @@ public:
             .ClusterCount = static_cast<int>(bridgeClusters.size()),
             .Clusters = bridgeClusters.data(),
             .DefaultCluster = defaultCluster,
-            .OperationAttributes = operationAttributes,
+            .OperationAttributes = operationAttributesString.data(),
+            .OperationAttributesLength = static_cast<int>(operationAttributesString.size()),
             .YTTokenPath = options.YTTokenPath.data(),
             .LogBackend = &options.LogBackend,
         };
@@ -76,8 +75,8 @@ public:
 
     TQueryResult Run(TString impersonationUser, TString queryText, NYson::TYsonString settings) noexcept override
     {
-        const char* settingsData = settings ? settings.ToString().data() : nullptr;
-        auto* bridgeQueryResult = BridgeRun(BridgePlugin_, impersonationUser.data(), queryText.data(), settingsData);
+        auto settingsString = settings ? settings.ToString() : "{}";
+        auto* bridgeQueryResult = BridgeRun(BridgePlugin_, impersonationUser.data(), queryText.data(), settingsString.data());
         auto toString = [] (const char* str, size_t strLength) -> std::optional<TString> {
             if (!str) {
                 return std::nullopt;

+ 4 - 4
yt/yql/plugin/dynamic/impl.cpp

@@ -18,9 +18,9 @@ TBridgeYqlPlugin* BridgeCreateYqlPlugin(const TBridgeYqlPluginOptions* bridgeOpt
         clusters[Cluster.Cluster] = Cluster.Proxy;
     }
 
-    TYsonString operationAttributes = bridgeOptions->OperationAttributes
-        ? TYsonString(TString(bridgeOptions->OperationAttributes))
-        : TYsonString{};
+    auto operationAttributes = bridgeOptions->OperationAttributes
+        ? TYsonString(TString(bridgeOptions->OperationAttributes, bridgeOptions->OperationAttributesLength))
+        : TYsonString();
 
     TYqlPluginOptions options{
         .MRJobBinary = TString(bridgeOptions->MRJobBinary),
@@ -53,7 +53,7 @@ void BridgeFreeQueryResult(TBridgeQueryResult* result)
 
 TBridgeQueryResult* BridgeRun(TBridgeYqlPlugin* plugin, const char* impersonationUser, const char* queryText, const char* settings)
 {
-    static const TYsonString EmptyMap = TYsonString(TString("{}"));
+    static const auto EmptyMap = TYsonString(TString("{}"));
 
     auto* nativePlugin = reinterpret_cast<IYqlPlugin*>(plugin);
     auto* bridgeResult = new TBridgeQueryResult;

+ 3 - 4
yt/yql/plugin/native/plugin.cpp

@@ -128,7 +128,7 @@ public:
 
             FuncRegistry_->SetSystemModulePaths(systemModules);
 
-            NYql::TUserDataTable userDataTable = GetYqlModuleResolver(ExprContext_, ModuleResolver_, {}, Clusters_, {});
+            auto userDataTable = GetYqlModuleResolver(ExprContext_, ModuleResolver_, {}, Clusters_, {});
 
             if (!userDataTable) {
                 TStringStream err;
@@ -261,13 +261,12 @@ private:
     THashMap<TString, TString> Clusters_;
     std::optional<TString> DefaultCluster_;
     THashMap<TString, TString> Modules_;
-    THashSet<TString> Libraries_;
     TYsonString OperationAttributes_;
 
     TString PatchQueryAttributes(TYsonString configAttributes, TYsonString querySettings)
     {
-        NYT::TNode querySettingsMap = NodeFromYsonString(querySettings.ToString());
-        NYT::TNode resultAttributesMap = NodeFromYsonString(configAttributes.ToString());
+        auto querySettingsMap = NodeFromYsonString(querySettings.ToString());
+        auto resultAttributesMap = NodeFromYsonString(configAttributes.ToString());
 
         for (const auto& item: querySettingsMap.AsMap()) {
             resultAttributesMap[item.first] = item.second;