diff options
author | uzhas <uzhas@ydb.tech> | 2022-08-24 12:45:45 +0300 |
---|---|---|
committer | uzhas <uzhas@ydb.tech> | 2022-08-24 12:45:45 +0300 |
commit | b5e423791064ac4a6403e9ab60a78d9987bca786 (patch) | |
tree | 69b81e71cdcedad2bbe32feb2c1eff728ba06bbb | |
parent | de502915fff58d768033431a6c0b3baab3f5be9a (diff) | |
download | ydb-b5e423791064ac4a6403e9ab60a78d9987bca786.tar.gz |
support idempotency-key, cover results for primitive types and optional
-rw-r--r-- | ydb/core/viewer/json_handlers_fq.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/ydb/core/viewer/json_handlers_fq.cpp b/ydb/core/viewer/json_handlers_fq.cpp index 01c20fb8a33..d12bb378fec 100644 --- a/ydb/core/viewer/json_handlers_fq.cpp +++ b/ydb/core/viewer/json_handlers_fq.cpp @@ -108,7 +108,7 @@ FederatedQueryHttp::GetQueryResult::ComputeStatus RemapQueryStatus(YandexQuery:: case YandexQuery::QueryMeta::ABORTED_BY_USER: [[fallthrough]]; - case YandexQuery::QueryMeta::ABORTING_BY_SYSTEM: + case YandexQuery::QueryMeta::ABORTED_BY_SYSTEM: [[fallthrough]]; case YandexQuery::QueryMeta::FAILED: return FederatedQueryHttp::GetQueryResult::FAILED; @@ -186,12 +186,26 @@ void FqPackToJson(TStringStream& json, const T& httpResult, const TJsonSettings& void FqPackToJson(TStringStream& json, const FederatedQueryHttp::GetResultDataResult& httpResult, const TJsonSettings&) { auto resultSet = NYdb::TResultSet(httpResult.result_set()); NJson::TJsonValue v; - NYq::FormatResultSet(v, resultSet, true); + NYq::FormatResultSet(v, resultSet, true, true); NJson::TJsonWriterConfig jsonWriterConfig; jsonWriterConfig.WriteNanAsString = true; NJson::WriteJson(&json, &v, jsonWriterConfig); } +template <typename T> +void SetIdempotencyKey(T& dst, const TString& key) { + Y_UNUSED(dst); + Y_UNUSED(key); + + if constexpr ( + std::is_same<T, YandexQuery::CreateQueryRequest>::value || + std::is_same<T, YandexQuery::ControlQueryRequest>::value || + std::is_same<T, YandexQuery::DeleteQueryRequest>::value) + { + dst.set_idempotency_key(key); + } +} + template <typename GrpcProtoRequestType, typename HttpProtoRequestType, typename GrpcProtoResultType, typename HttpProtoResultType, typename GrpcProtoResponseType> class TGrpcCallWrapper : public TActorBootstrapped<TGrpcCallWrapper<GrpcProtoRequestType, HttpProtoRequestType, GrpcProtoResultType, HttpProtoResultType, GrpcProtoResponseType>> { IViewer* const Viewer; @@ -259,6 +273,8 @@ public: SetProtoMessageField(request, name, value); } FqConvert(request, grpcRequest); + SetIdempotencyKey(grpcRequest, TString(httpRequest.GetHeader("idempotency-key"))); + return true; } catch (const std::exception& e) { ReplyError(ctx, TStringBuilder() << "Error in parsing: " << e.what() << ", original text: " << GetEvent()->Get()->Request.GetPostContent()); @@ -333,7 +349,7 @@ template <typename ProtoType> void ProtoToPublicJsonSchema(IOutputStream& to) { TJsonSettings settings; settings.EnumAsNumbers = false; - settings.EmptyRepeated = false; + settings.EmptyRepeated = true; settings.EnumValueFilter = [](const TString& value) { return !value.EndsWith("UNSPECIFIED"); }; |