aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2022-08-24 12:45:45 +0300
committeruzhas <uzhas@ydb.tech>2022-08-24 12:45:45 +0300
commitb5e423791064ac4a6403e9ab60a78d9987bca786 (patch)
tree69b81e71cdcedad2bbe32feb2c1eff728ba06bbb
parentde502915fff58d768033431a6c0b3baab3f5be9a (diff)
downloadydb-b5e423791064ac4a6403e9ab60a78d9987bca786.tar.gz
support idempotency-key, cover results for primitive types and optional
-rw-r--r--ydb/core/viewer/json_handlers_fq.cpp22
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");
};