diff options
author | uzhas <uzhas@ydb.tech> | 2022-08-21 14:56:31 +0300 |
---|---|---|
committer | uzhas <uzhas@ydb.tech> | 2022-08-21 14:56:31 +0300 |
commit | 80aa323e15b6ade7cd495ddb399980d8895f0745 (patch) | |
tree | d57127eda5a81efec5d7d598dc4684252eaa073e | |
parent | a24174a8deee6917a163833ab37e45da86281357 (diff) | |
download | ydb-80aa323e15b6ade7cd495ddb399980d8895f0745.tar.gz |
result formatter: support type name as string
3 files changed, 44 insertions, 8 deletions
diff --git a/ydb/core/yq/libs/result_formatter/result_formatter.cpp b/ydb/core/yq/libs/result_formatter/result_formatter.cpp index 8e57a5ee75b..19531dc4edc 100644 --- a/ydb/core/yq/libs/result_formatter/result_formatter.cpp +++ b/ydb/core/yq/libs/result_formatter/result_formatter.cpp @@ -6,6 +6,7 @@ #include <ydb/library/yql/providers/common/codec/yql_codec.h> #include <ydb/library/yql/public/udf/udf_data_type.h> #include <ydb/library/yql/ast/yql_expr.h> +#include <ydb/library/yql/ast/yql_type_string.h> #include <ydb/library/yql/minikql/mkql_node.h> #include <ydb/library/yql/minikql/computation/mkql_computation_node_holders.h> @@ -305,7 +306,8 @@ TTypePair FormatColumnType( NJson::TJsonValue& root, const NYdb::TType& type, NKikimr::NMiniKQL::TTypeEnvironment& typeEnv, - NYql::TExprContext& ctx) + NYql::TExprContext& ctx, + bool typeNameAsString) { TTypePair result; NYdb::TTypeParser parser(type); @@ -319,9 +321,10 @@ TTypePair FormatColumnType( return result; } - //NJson::ReadJsonTree( - // NJson2Yson::ConvertYson2Json(NYql::NCommon::WriteTypeToYson(result.MiniKQLType)), - // &root); + if (typeNameAsString) { + root = NYql::FormatType(result.TypeAnnotation); + return result; + } NJson::ReadJsonTree( NJson2Yson::ConvertYson2Json(NYql::NCommon::WriteTypeToYson(result.TypeAnnotation)), @@ -382,7 +385,7 @@ TString FormatSchema(const YandexQuery::Schema& schema) return NYql::NCommon::WriteTypeToYson(MakeStructType(typedColumns, ctx), NYson::EYsonFormat::Text); } -void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet) +void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet, bool typeNameAsString) { NYql::TExprContext ctx; NKikimr::NMiniKQL::TScopedAlloc alloc; @@ -391,7 +394,6 @@ void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet) TMemoryUsageInfo memInfo("BuildYdbResultSet"); THolderFactory holderFactory(alloc.Ref(), memInfo); - NJson::TJsonValue& columns = root["columns"]; const auto& columnsMeta = resultSet.GetColumnsMeta(); @@ -402,7 +404,7 @@ void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet) for (const NYdb::TColumn& columnMeta : columnsMeta) { NJson::TJsonValue& column = columns.AppendValue(NJson::TJsonValue()); column["name"] = columnMeta.Name; - columnTypes[i++] = FormatColumnType(column["type"], columnMeta.Type, typeEnv, ctx); + columnTypes[i++] = FormatColumnType(column["type"], columnMeta.Type, typeEnv, ctx, typeNameAsString); } NJson::TJsonValue& data = root["data"]; diff --git a/ydb/core/yq/libs/result_formatter/result_formatter.h b/ydb/core/yq/libs/result_formatter/result_formatter.h index 031196e0500..760c4147006 100644 --- a/ydb/core/yq/libs/result_formatter/result_formatter.h +++ b/ydb/core/yq/libs/result_formatter/result_formatter.h @@ -10,7 +10,7 @@ namespace NYq { -void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet); +void FormatResultSet(NJson::TJsonValue& root, const NYdb::TResultSet& resultSet, bool typeNameAsString = false); TString FormatSchema(const YandexQuery::Schema& schema); } // namespace NYq diff --git a/ydb/core/yq/libs/result_formatter/result_formatter_ut.cpp b/ydb/core/yq/libs/result_formatter/result_formatter_ut.cpp index 3b369ecbd3a..b30ca0e41eb 100644 --- a/ydb/core/yq/libs/result_formatter/result_formatter_ut.cpp +++ b/ydb/core/yq/libs/result_formatter/result_formatter_ut.cpp @@ -134,6 +134,40 @@ Y_UNIT_TEST_SUITE(ResultFormatter) { UNIT_ASSERT_VALUES_EQUAL(stream.Str(), expected); } + Y_UNIT_TEST(StructTypeNameAsString) { + Ydb::ResultSet rs; + { + auto& column = *rs.add_columns(); + column.set_name("column0"); + auto& struct_type = *column.mutable_type()->mutable_struct_type(); + auto& m1 = *struct_type.add_members(); + auto& m2 = *struct_type.add_members(); + + m1.set_name("k1"); + m1.mutable_type()->set_type_id(Ydb::Type::INT32); + + m2.set_name("k2"); + m2.mutable_type()->set_type_id(Ydb::Type::INT64); + } + { + auto& value = *rs.add_rows(); + auto& cell = *value.add_items(); + cell.add_items()->set_int32_value(31337); // k1 + cell.add_items()->set_int64_value(113370); // k2 + } + + NJson::TJsonValue root; + FormatResultSet(root, rs, true); + + TStringStream stream; + NJson::WriteJson(&stream, &root); + + //Cerr << stream.Str() << Endl; + TString expected = R"___({"data":[{"column0":["31337","113370"]}],"columns":[{"name":"column0","type":"Struct<'k1':Int32,'k2':Int64>"}]})___"; + + UNIT_ASSERT_VALUES_EQUAL(stream.Str(), expected); + } + Y_UNIT_TEST(Void) { Ydb::ResultSet rs; { |