@@ -937,55 +937,60 @@ TEST(ColumnDynamic, rollback)
937937 ASSERT_EQ (num_rows, column_variant.size ());
938938 };
939939
940- auto check_checkpoint = [&](const ColumnCheckpoint & cp, std::vector< size_t > sizes)
940+ auto check_checkpoint = [&](const ColumnCheckpoint & cp, std::unordered_map<String, size_t > sizes)
941941 {
942- const auto & nested = assert_cast<const ColumnCheckpointWithMultipleNested &>(cp).nested ;
942+ const auto & variants_checkpoints = assert_cast<const DynamicColumnCheckpoint &>(cp).variants_checkpoints ;
943943 size_t num_rows = 0 ;
944944
945- for (size_t i = 0 ; i < nested. size (); ++i )
945+ for (const auto & [variant, checkpoint] : variants_checkpoints )
946946 {
947- ASSERT_EQ (nested[i] ->size , sizes[i] );
948- num_rows += sizes[i] ;
947+ ASSERT_EQ (checkpoint ->size , sizes. at (variant) );
948+ num_rows += sizes. at (variant) ;
949949 }
950950
951951 ASSERT_EQ (num_rows, cp.size );
952952 };
953953
954- std::vector<std::pair<ColumnCheckpointPtr, std::vector<size_t >>> checkpoints;
954+ std::vector<std::vector<size_t >> variant_checkpoints_sizes;
955+ std::vector<std::pair<ColumnCheckpointPtr, std::unordered_map<String, size_t >>> dynamic_checkpoints;
955956
956957 auto column = ColumnDynamic::create (2 );
957958 auto checkpoint = column->getCheckpoint ();
958959
959960 column->insert (Field (42 ));
960-
961961 column->updateCheckpoint (*checkpoint);
962- checkpoints.emplace_back (checkpoint, std::vector<size_t >{0 , 1 , 0 });
963-
964962 column->insert (Field (" str1" ));
965963 column->rollback (*checkpoint);
966964
967- check_checkpoint (*checkpoint, checkpoints.back ().second );
968- check_variant (column->getVariantColumn (), checkpoints.back ().second );
965+ variant_checkpoints_sizes.emplace_back (std::vector<size_t >{0 , 1 , 0 });
966+ dynamic_checkpoints.emplace_back (checkpoint, std::unordered_map<String, size_t >{{" SharedVariant" , 0 }, {" Int8" , 1 }, {" String" , 0 }});
967+
968+ check_checkpoint (*checkpoint, dynamic_checkpoints.back ().second );
969+ check_variant (column->getVariantColumn (), variant_checkpoints_sizes.back ());
969970
970971 column->insert (" str1" );
971- checkpoints.emplace_back (column->getCheckpoint (), std::vector<size_t >{0 , 1 , 1 });
972+ variant_checkpoints_sizes.emplace_back (std::vector<size_t >{0 , 1 , 1 });
973+ dynamic_checkpoints.emplace_back (column->getCheckpoint (), std::unordered_map<String, size_t >{{" SharedVariant" , 0 }, {" Int8" , 1 }, {" String" , 1 }});
972974
973975 column->insert (" str2" );
974- checkpoints.emplace_back (column->getCheckpoint (), std::vector<size_t >{0 , 1 , 2 });
976+ variant_checkpoints_sizes.emplace_back (std::vector<size_t >{0 , 1 , 2 });
977+ dynamic_checkpoints.emplace_back (column->getCheckpoint (), std::unordered_map<String, size_t >{{" SharedVariant" , 0 }, {" Int8" , 1 }, {" String" , 2 }});
975978
976979 column->insert (Array ({1 , 2 }));
977- checkpoints.emplace_back (column->getCheckpoint (), std::vector<size_t >{1 , 1 , 2 });
980+ variant_checkpoints_sizes.emplace_back (std::vector<size_t >{1 , 1 , 2 });
981+ dynamic_checkpoints.emplace_back (column->getCheckpoint (), std::unordered_map<String, size_t >{{" SharedVariant" , 1 }, {" Int8" , 1 }, {" String" , 2 }});
978982
979983 column->insert (Field (42.42 ));
980- checkpoints.emplace_back (column->getCheckpoint (), std::vector<size_t >{2 , 1 , 2 });
984+ variant_checkpoints_sizes.emplace_back (std::vector<size_t >{2 , 1 , 2 });
985+ dynamic_checkpoints.emplace_back (column->getCheckpoint (), std::unordered_map<String, size_t >{{" SharedVariant" , 2 }, {" Int8" , 1 }, {" String" , 2 }});
981986
982- for (const auto & [cp, sizes] : checkpoints )
987+ for (size_t i = 0 ; i != variant_checkpoints_sizes. size (); ++i )
983988 {
984989 auto column_copy = column->clone ();
985- column_copy->rollback (*cp );
990+ column_copy->rollback (*dynamic_checkpoints[i]. first );
986991
987- check_checkpoint (*cp, sizes );
988- check_variant (assert_cast<const ColumnDynamic &>(*column_copy).getVariantColumn (), sizes );
992+ check_checkpoint (*dynamic_checkpoints[i]. first , dynamic_checkpoints[i]. second );
993+ check_variant (assert_cast<const ColumnDynamic &>(*column_copy).getVariantColumn (), variant_checkpoints_sizes[i] );
989994 }
990995}
991996
0 commit comments