Skip to content

Commit

Permalink
fix value parsing recursion issues (#12391)
Browse files Browse the repository at this point in the history
  • Loading branch information
adameat authored Dec 9, 2024
1 parent 29362cf commit e19930f
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions ydb/core/viewer/viewer_query.h
Original file line number Diff line number Diff line change
Expand Up @@ -422,22 +422,36 @@ class TJsonQuery : public TViewerPipeClient {
return ColumnPrimitiveValueToJsonValue(valueParser);

case NYdb::TTypeParser::ETypeKind::Optional:
valueParser.OpenOptional();
if (valueParser.IsNull()) {
return NJson::JSON_NULL;
}
switch(valueParser.GetKind()) {
case NYdb::TTypeParser::ETypeKind::Primitive:
return ColumnPrimitiveValueToJsonValue(valueParser);
case NYdb::TTypeParser::ETypeKind::Decimal:
return valueParser.GetDecimal().ToString();
default:
return NJson::JSON_UNDEFINED;
{
NJson::TJsonValue jsonOptional;
valueParser.OpenOptional();
if (valueParser.IsNull()) {
jsonOptional = NJson::JSON_NULL;
} else {
switch(valueParser.GetKind()) {
case NYdb::TTypeParser::ETypeKind::Primitive:
jsonOptional = ColumnPrimitiveValueToJsonValue(valueParser);
break;
case NYdb::TTypeParser::ETypeKind::Decimal:
jsonOptional = valueParser.GetDecimal().ToString();
break;
default:
jsonOptional = NJson::JSON_UNDEFINED;
break;
}
}
valueParser.CloseOptional();
return jsonOptional;
}

case NYdb::TTypeParser::ETypeKind::Tagged:
valueParser.OpenTagged();
return ColumnValueToJsonValue(valueParser);
{
NJson::TJsonValue jsonTagged;
valueParser.OpenTagged();
jsonTagged = ColumnValueToJsonValue(valueParser);
valueParser.CloseTagged();
return jsonTagged;
}

case NYdb::TTypeParser::ETypeKind::Pg:
return valueParser.GetPg().Content_;
Expand All @@ -453,6 +467,7 @@ class TJsonQuery : public TViewerPipeClient {
while (valueParser.TryNextListItem()) {
jsonList.AppendValue(ColumnValueToJsonValue(valueParser));
}
valueParser.CloseList();
return jsonList;
}

Expand All @@ -464,6 +479,7 @@ class TJsonQuery : public TViewerPipeClient {
while (valueParser.TryNextElement()) {
jsonTuple.AppendValue(ColumnValueToJsonValue(valueParser));
}
valueParser.CloseTuple();
return jsonTuple;
}

Expand All @@ -475,6 +491,7 @@ class TJsonQuery : public TViewerPipeClient {
while (valueParser.TryNextMember()) {
jsonStruct[valueParser.GetMemberName()] = ColumnValueToJsonValue(valueParser);
}
valueParser.CloseStruct();
return jsonStruct;
}

Expand All @@ -485,16 +502,21 @@ class TJsonQuery : public TViewerPipeClient {
valueParser.OpenDict();
while (valueParser.TryNextDictItem()) {
valueParser.DictKey();
TString key = valueParser.GetString();
NJson::TJsonValue jsonDictKey = ColumnValueToJsonValue(valueParser);
valueParser.DictPayload();
jsonDict[key] = ColumnValueToJsonValue(valueParser);
jsonDict[jsonDictKey.GetStringRobust()] = ColumnValueToJsonValue(valueParser);
}
valueParser.CloseDict();
return jsonDict;
}

case NYdb::TTypeParser::ETypeKind::Variant:
valueParser.OpenVariant();
return ColumnValueToJsonValue(valueParser);
{
valueParser.OpenVariant();
NJson::TJsonValue jsonVariant = ColumnValueToJsonValue(valueParser);
valueParser.CloseVariant();
return jsonVariant;
}

case NYdb::TTypeParser::ETypeKind::EmptyList:
return NJson::JSON_ARRAY;
Expand Down

0 comments on commit e19930f

Please sign in to comment.