aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2022-08-21 14:56:31 +0300
committeruzhas <uzhas@ydb.tech>2022-08-21 14:56:31 +0300
commit80aa323e15b6ade7cd495ddb399980d8895f0745 (patch)
treed57127eda5a81efec5d7d598dc4684252eaa073e
parenta24174a8deee6917a163833ab37e45da86281357 (diff)
downloadydb-80aa323e15b6ade7cd495ddb399980d8895f0745.tar.gz
result formatter: support type name as string
-rw-r--r--ydb/core/yq/libs/result_formatter/result_formatter.cpp16
-rw-r--r--ydb/core/yq/libs/result_formatter/result_formatter.h2
-rw-r--r--ydb/core/yq/libs/result_formatter/result_formatter_ut.cpp34
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;
{