ArrayBuilder and Slice UT
TEST(TestNestArrayPrototype, ListType) {
auto nestype = std::make_shared<ListType>(list(arrow::int8()));
auto nestarray = ArrayFromJSON(nestype, "[[[1, 2], [3, 4]], [[5, 6, 7], null, [8]], [[9, 10]]]");
auto nestlistarr = std::static_pointer_cast<arrow::ListArray>(nestarray);
std::cout << "nestlistarr->ToString():\n" << nestlistarr->ToString() << std::endl;
std::unique_ptr<arrow::ArrayBuilder> numeric_builder;
MakeBuilder(default_memory_pool(), arrow::int8(), &numeric_builder);
auto child_builder = std::make_shared<arrow::ListBuilder>(default_memory_pool(), std::move(numeric_builder));
auto nest_builder = std::make_shared<arrow::ListBuilder>(default_memory_pool(), std::move(child_builder));
nest_builder->AppendArraySlice(*(nestlistarr->data().get()), 2, 1);
nest_builder->AppendArraySlice(*(nestlistarr->data().get()), 0, 1);
std::shared_ptr<arrow::Array> build_arr;
nest_builder->Finish(&build_arr);
std::cout << "build_arr->ToString():\n" << build_arr->ToString() << std::endl;
// 推荐的构造方式
// 一步到位, 直接构建基类ArrayBuilder
// 直接传递嵌套类型list(list(arrow::int8()), 不管多少层
std::unique_ptr<arrow::ArrayBuilder> testnestbuilder;
MakeBuilder(default_memory_pool(), list(list(arrow::int8())), &testnestbuilder);
//Slice nestlistarr row 序号为2,行数为1的的数据
// 指针用法也可以这样用 testnestbuilder->AppendArraySlice(*nestlistarr->data(), 2, 1);
testnestbuilder->AppendArraySlice(*(nestlistarr->data().get()), 2, 1);
testnestbuilder->AppendArraySlice(*(nestlistarr->data().get()), 0, 1);
std::shared_ptr<arrow::Array> test_arr;
testnestbuilder->Finish(&test_arr);
std::cout << "test_arr->ToString()\n:" << test_arr->ToString() << std::endl;
}