@@ -70,6 +70,30 @@ NYql::TIssues DeserializeIssues(const TString& issuesSerialized) {
7070 return issues;
7171}
7272
73+ template <typename TProto>
74+ void SerializeBinaryProto (const TProto& proto, NJson::TJsonValue& value) {
75+ value.SetType (NJson::EJsonValueType::JSON_MAP);
76+
77+ const auto config = NProtobufJson::TProto2JsonConfig ()
78+ .AddStringTransform (MakeIntrusive<NProtobufJson::TBase64EncodeBytesTransform>());
79+
80+ NProtobufJson::Proto2Json (proto, value[" encoded_proto" ], config);
81+ }
82+
83+ template <typename TProto>
84+ void DeserializeBinaryProto (const NJson::TJsonValue& value, TProto& proto) {
85+ const auto & valueMap = value.GetMap ();
86+ const auto encodedProto = valueMap.find (" encoded_proto" );
87+ if (encodedProto == valueMap.end ()) {
88+ return NProtobufJson::Json2Proto (value, proto, NProtobufJson::TJson2ProtoConfig ());
89+ }
90+
91+ const auto config = NProtobufJson::TJson2ProtoConfig ()
92+ .AddStringTransform (MakeIntrusive<NProtobufJson::TBase64DecodeBytesTransform>());
93+
94+ NProtobufJson::Json2Proto (encodedProto->second , proto, config);
95+ }
96+
7397
7498class TQueryBase : public NKikimr ::TQueryBase {
7599public:
@@ -2272,7 +2296,7 @@ class TSaveScriptExternalEffectActor : public TQueryBase {
22722296 NJson::TJsonValue::TArray& jsonArray = value.GetArraySafe ();
22732297 jsonArray.resize (sinks.size ());
22742298 for (size_t i = 0 ; i < sinks.size (); ++i) {
2275- NProtobufJson::Proto2Json (sinks[i], jsonArray[i], NProtobufJson::TProto2JsonConfig () );
2299+ SerializeBinaryProto (sinks[i], jsonArray[i]);
22762300 }
22772301
22782302 NJsonWriter::TBuf serializedSinks;
@@ -2416,7 +2440,7 @@ class TSaveScriptFinalStatusActor : public TQueryBase {
24162440 value.GetValuePointer (i, &serializedSink);
24172441
24182442 NKqpProto::TKqpExternalSink sink;
2419- NProtobufJson::Json2Proto (*serializedSink, sink);
2443+ DeserializeBinaryProto (*serializedSink, sink);
24202444 Response->Sinks .push_back (sink);
24212445 }
24222446 }
0 commit comments