Skip to content

Commit d0efce9

Browse files
Koladata Teamcopybara-github
authored andcommitted
Fix ITEMID handling in deep_clone
PiperOrigin-RevId: 856174778 Change-Id: Ie2552dd4c8ba9b688e46480d9d33962142a88aaf
1 parent 650fc81 commit d0efce9

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

koladata/internal/op_utils/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ cc_test(
407407
"//koladata/internal/testing:matchers",
408408
"@com_google_absl//absl/types:span",
409409
"@com_google_arolla//arolla/dense_array",
410+
"@com_google_arolla//arolla/qtype",
410411
"@com_google_arolla//arolla/util",
411412
"@com_google_googletest//:gtest_main",
412413
],

koladata/internal/op_utils/deep_clone.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ class DeepCloneVisitor : AbstractVisitor {
261261

262262
absl::StatusOr<DataItem> GetValueImpl(const DataItem& item,
263263
const DataItem& schema) {
264-
if (!item.holds_value<ObjectId>()) {
264+
if (!item.holds_value<ObjectId>() || schema == schema::kItemId) {
265265
return item;
266266
}
267267
if (item.is_schema() && !is_schema_slice_ && !item.is_implicit_schema()) {

koladata/internal/op_utils/deep_clone_test.cc

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "gtest/gtest.h"
2323
#include "absl/types/span.h"
2424
#include "arolla/dense_array/dense_array.h"
25+
#include "arolla/qtype/qtype_traits.h"
2526
#include "arolla/util/bytes.h"
2627
#include "arolla/util/text.h"
2728
#include "koladata/internal/data_bag.h"
@@ -1081,5 +1082,63 @@ TEST_P(DeepCloneTest, SchemaMetadata_SchemaSlice) {
10811082
EXPECT_THAT(result_db, DataBagEqual(*expected_db));
10821083
}
10831084

1085+
TEST_P(DeepCloneTest, SparseSliceWithItemIds) {
1086+
const int64_t ds_size = 4;
1087+
1088+
auto db = DataBagImpl::CreateEmptyDatabag();
1089+
auto ds2 = DataSliceImpl::AllocateEmptyObjects(ds_size);
1090+
auto ds3 = DataSliceImpl::AllocateEmptyObjects(ds_size);
1091+
ASSERT_OK_AND_ASSIGN(
1092+
auto schemas2,
1093+
CreateUuidWithMainObject<internal::ObjectId::kUuidImplicitSchemaFlag>(
1094+
ds2, schema::kImplicitSchemaSeed));
1095+
ASSERT_OK(db->SetAttr(ds2, schema::kSchemaAttr, schemas2));
1096+
1097+
ASSERT_OK(db->SetSchemaAttr(schemas2, "a", DataItem(schema::kItemId)));
1098+
ASSERT_OK(db->SetSchemaAttr(schemas2, "b", DataItem(schema::kItemId)));
1099+
ASSERT_OK(db->SetAttr(ds2[2], "a", ds3[0]));
1100+
ASSERT_OK(db->SetAttr(ds2[3], "a", ds3[1]));
1101+
SetSchemaTriples(*db, GenSchemaTriplesFoTests());
1102+
SetDataTriples(*db, GenDataTriplesForTest());
1103+
1104+
auto result_db = DataBagImpl::CreateEmptyDatabag();
1105+
ASSERT_OK_AND_ASSIGN(
1106+
auto result,
1107+
DeepCloneOp(result_db.get())(ds2, DataItem(schema::kObject),
1108+
*GetMainDb(db), {GetFallbackDb(db).get()}));
1109+
1110+
EXPECT_EQ(result.present_count(), 4);
1111+
EXPECT_TRUE(result.dtype() == arolla::GetQType<ObjectId>());
1112+
ASSERT_OK_AND_ASSIGN(auto result_inner0, result_db->GetAttr(result[2], "a"));
1113+
ASSERT_OK_AND_ASSIGN(auto result_inner1, result_db->GetAttr(result[3], "a"));
1114+
ASSERT_OK_AND_ASSIGN(
1115+
auto result_schemas,
1116+
CreateUuidWithMainObject<internal::ObjectId::kUuidImplicitSchemaFlag>(
1117+
result, schema::kImplicitSchemaSeed));
1118+
EXPECT_EQ(result_schemas.present_count(), 4);
1119+
1120+
auto expected_db = DataBagImpl::CreateEmptyDatabag();
1121+
ASSERT_OK(expected_db->SetAttr(result, schema::kSchemaAttr, result_schemas));
1122+
TriplesT expected_data_triples = {
1123+
{result[0], {{"a", DataItem()}, {"b", DataItem()}}},
1124+
{result[1], {{"a", DataItem()}, {"b", DataItem()}}},
1125+
{result[2], {{"a", result_inner0}, {"b", DataItem()}}},
1126+
{result[3], {{"a", result_inner1}, {"b", DataItem()}}},
1127+
};
1128+
TriplesT expected_schema_triples = {
1129+
{result_schemas[0],
1130+
{{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}},
1131+
{result_schemas[1],
1132+
{{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}},
1133+
{result_schemas[2],
1134+
{{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}},
1135+
{result_schemas[3],
1136+
{{"a", DataItem(schema::kItemId)}, {"b", DataItem(schema::kItemId)}}},
1137+
};
1138+
SetDataTriples(*expected_db, expected_data_triples);
1139+
SetSchemaTriples(*expected_db, expected_schema_triples);
1140+
EXPECT_THAT(result_db, DataBagEqual(*expected_db));
1141+
}
1142+
10841143
} // namespace
10851144
} // namespace koladata::internal

0 commit comments

Comments
 (0)