aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcherednik <dcherednik@ydb.tech>2022-09-26 14:08:42 +0300
committerdcherednik <dcherednik@ydb.tech>2022-09-26 14:08:42 +0300
commit21b97bb68decb55309b8e3b7ca2bd978ae1e6272 (patch)
tree259fe12faaeae0fa5f9161bb111ff8df0922a52c
parentc843de2f4eff352da4ae4d8b7639cd5de9abac05 (diff)
downloadydb-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.cpp4
-rw-r--r--ydb/services/ydb/ydb_table_ut.cpp30
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;
}
}