diff options
author | dcherednik <dcherednik@ydb.tech> | 2022-09-26 14:08:42 +0300 |
---|---|---|
committer | dcherednik <dcherednik@ydb.tech> | 2022-09-26 14:08:42 +0300 |
commit | 21b97bb68decb55309b8e3b7ca2bd978ae1e6272 (patch) | |
tree | 259fe12faaeae0fa5f9161bb111ff8df0922a52c | |
parent | c843de2f4eff352da4ae4d8b7639cd5de9abac05 (diff) | |
download | ydb-21b97bb68decb55309b8e3b7ca2bd978ae1e6272.tar.gz |
Fix ReadTable yson column. Yson value must be passed as bytes_value.
-rw-r--r-- | ydb/core/tx/datashard/read_table_scan.cpp | 4 | ||||
-rw-r--r-- | ydb/services/ydb/ydb_table_ut.cpp | 30 |
2 files changed, 30 insertions, 4 deletions
diff --git a/ydb/core/tx/datashard/read_table_scan.cpp b/ydb/core/tx/datashard/read_table_scan.cpp index 561484576d..3eb3ac3048 100644 --- a/ydb/core/tx/datashard/read_table_scan.cpp +++ b/ydb/core/tx/datashard/read_table_scan.cpp @@ -64,10 +64,12 @@ Y_FORCE_INLINE void AddCell(TOutValue& row, NScheme::TTypeId type, const TCell & val.set_double_value(cell.AsValue<double>()); break; case NUdf::TDataType<NUdf::TJson>::Id: - case NUdf::TDataType<NUdf::TYson>::Id: case NUdf::TDataType<NUdf::TUtf8>::Id: val.set_text_value(cell.Data(), cell.Size()); break; + case NUdf::TDataType<NUdf::TYson>::Id: + val.set_bytes_value(cell.Data(), cell.Size()); + break; case NUdf::TDataType<NUdf::TDecimal>::Id: { Y_VERIFY_DEBUG(cell.Size() == 16); diff --git a/ydb/services/ydb/ydb_table_ut.cpp b/ydb/services/ydb/ydb_table_ut.cpp index 9a23ff5732..bb827c5f45 100644 --- a/ydb/services/ydb/ydb_table_ut.cpp +++ b/ydb/services/ydb/ydb_table_ut.cpp @@ -1761,17 +1761,29 @@ R"___(<main>: Error: Transaction not found: , code: 2015 CREATE TABLE `Root/Test` ( Key Uint64, Value String, + SomeJson Json, + SomeYson Yson, PRIMARY KEY (Key) ); )___").ExtractValueSync(); UNIT_ASSERT_EQUAL(result.GetStatus(), EStatus::SUCCESS); result = session.ExecuteDataQuery(R"___( - UPSERT INTO `Root/Test` (Key, Value) VALUES (1u, "One"); + UPSERT INTO `Root/Test` (Key, Value, SomeJson, SomeYson) VALUES (1u, "One", "[1]", "[1]"); )___", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); UNIT_ASSERT_EQUAL(result.GetStatus(), EStatus::SUCCESS); { + auto selectResult = session.ExecuteDataQuery(R"( + SELECT Key, Value, SomeJson, SomeYson FROM `Root/Test`; + )", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync(); + + UNIT_ASSERT_EQUAL(selectResult.GetStatus(), EStatus::SUCCESS); + auto text = FormatResultSetYson(selectResult.GetResultSet(0)); + UNIT_ASSERT_VALUES_EQUAL("[[[1u];[\"One\"];[\"[1]\"];[\"[1]\"]]]", text); + } + + { TValueBuilder valueFrom; valueFrom.BeginTuple() .AddElement() @@ -1821,11 +1833,23 @@ R"___(<main>: Error: Transaction not found: , code: 2015 auto columnParser1 = std::move(rsParser.ColumnParser(0)); columnParser1.OpenOptional(); auto key = columnParser1.GetUint64(); - UNIT_ASSERT_EQUAL(key, 1); + UNIT_ASSERT_VALUES_EQUAL(key, 1); + auto& columnParser2 = rsParser.ColumnParser(1); columnParser2.OpenOptional(); auto val = columnParser2.GetString(); - UNIT_ASSERT_EQUAL(val, "One"); + UNIT_ASSERT_VALUES_EQUAL(val, "One"); + + auto& columnParser3 = rsParser.ColumnParser(2); + columnParser3.OpenOptional(); + auto json = columnParser3.GetJson(); + UNIT_ASSERT_VALUES_EQUAL(json, "[1]"); + + auto& columnParser4 = rsParser.ColumnParser(3); + columnParser4.OpenOptional(); + auto yson = columnParser4.GetYson(); + UNIT_ASSERT_VALUES_EQUAL(yson, "[1]"); + read = true; } } |