@@ -40,7 +40,7 @@ using internal::checked_cast;
4040using internal::GetCpuThreadPool;
4141using internal::TaskGroup;
4242
43- void AssertBuilding (const std::unique_ptr <ChunkedArrayBuilder>& builder,
43+ void AssertBuilding (const std::shared_ptr <ChunkedArrayBuilder>& builder,
4444 const std::vector<std::string>& chunks,
4545 std::shared_ptr<ChunkedArray>* out) {
4646 ArrayVector unconverted;
@@ -67,9 +67,8 @@ std::shared_ptr<ChunkedArray> ExtractField(const std::string& name,
6767 for (auto & chunk : chunks) {
6868 chunk = checked_cast<const StructArray&>(*chunk).GetFieldByName (name);
6969 }
70- auto struct_type = static_cast <const StructType*>(columns.type ().get ());
71- return std::make_shared<ChunkedArray>(chunks,
72- struct_type->GetFieldByName (name)->type ());
70+ const auto & struct_type = checked_cast<const StructType&>(*columns.type ());
71+ return std::make_shared<ChunkedArray>(chunks, struct_type.GetFieldByName (name)->type ());
7372}
7473
7574void AssertFieldEqual (const std::vector<std::string>& path,
@@ -83,27 +82,9 @@ void AssertFieldEqual(const std::vector<std::string>& path,
8382 AssertChunkedEqual (expected, *actual);
8483}
8584
86- template <typename T>
87- std::string RowsOfOneColumn (string_view name, std::initializer_list<T> values,
88- decltype (std::to_string(*values.begin()))* = nullptr) {
89- std::stringstream ss;
90- for (auto value : values) {
91- ss << R"( {")" << name << R"( ":)" << std::to_string (value) << " }\n " ;
92- }
93- return ss.str ();
94- }
95-
96- std::string RowsOfOneColumn (string_view name, std::initializer_list<std::string> values) {
97- std::stringstream ss;
98- for (auto value : values) {
99- ss << R"( {")" << name << R"( ":)" << value << " }\n " ;
100- }
101- return ss.str ();
102- }
103-
10485TEST (ChunkedArrayBuilder, Empty) {
10586 auto tg = TaskGroup::MakeSerial ();
106- std::unique_ptr <ChunkedArrayBuilder> builder;
87+ std::shared_ptr <ChunkedArrayBuilder> builder;
10788 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), nullptr ,
10889 struct_ ({field (" a" , int32 ())}), &builder));
10990
@@ -116,7 +97,7 @@ TEST(ChunkedArrayBuilder, Empty) {
11697
11798TEST (ChunkedArrayBuilder, Basics) {
11899 auto tg = TaskGroup::MakeSerial ();
119- std::unique_ptr <ChunkedArrayBuilder> builder;
100+ std::shared_ptr <ChunkedArrayBuilder> builder;
120101 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), nullptr ,
121102 struct_ ({field (" a" , int32 ())}), &builder));
122103
@@ -130,7 +111,7 @@ TEST(ChunkedArrayBuilder, Basics) {
130111
131112TEST (ChunkedArrayBuilder, Insert) {
132113 auto tg = TaskGroup::MakeSerial ();
133- std::unique_ptr <ChunkedArrayBuilder> builder;
114+ std::shared_ptr <ChunkedArrayBuilder> builder;
134115 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), nullptr ,
135116 struct_ ({field (" a" , int32 ())}), &builder));
136117
@@ -151,7 +132,7 @@ TEST(ChunkedArrayBuilder, Insert) {
151132
152133TEST (ChunkedArrayBuilder, MultipleChunks) {
153134 auto tg = TaskGroup::MakeSerial ();
154- std::unique_ptr <ChunkedArrayBuilder> builder;
135+ std::shared_ptr <ChunkedArrayBuilder> builder;
155136 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), nullptr ,
156137 struct_ ({field (" a" , int32 ())}), &builder));
157138
@@ -170,7 +151,7 @@ TEST(ChunkedArrayBuilder, MultipleChunks) {
170151
171152TEST (ChunkedArrayBuilder, MultipleChunksParallel) {
172153 auto tg = TaskGroup::MakeThreaded (GetCpuThreadPool ());
173- std::unique_ptr <ChunkedArrayBuilder> builder;
154+ std::shared_ptr <ChunkedArrayBuilder> builder;
174155 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), nullptr ,
175156 struct_ ({field (" a" , int32 ())}), &builder));
176157
@@ -194,7 +175,7 @@ TEST(ChunkedArrayBuilder, MultipleChunksParallel) {
194175
195176TEST (InferringChunkedArrayBuilder, Empty) {
196177 auto tg = TaskGroup::MakeSerial ();
197- std::unique_ptr <ChunkedArrayBuilder> builder;
178+ std::shared_ptr <ChunkedArrayBuilder> builder;
198179 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
199180 struct_ ({}), &builder));
200181
@@ -207,7 +188,7 @@ TEST(InferringChunkedArrayBuilder, Empty) {
207188
208189TEST (InferringChunkedArrayBuilder, SingleChunkNull) {
209190 auto tg = TaskGroup::MakeSerial ();
210- std::unique_ptr <ChunkedArrayBuilder> builder;
191+ std::shared_ptr <ChunkedArrayBuilder> builder;
211192 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
212193 struct_ ({}), &builder));
213194
@@ -224,7 +205,7 @@ TEST(InferringChunkedArrayBuilder, SingleChunkNull) {
224205
225206TEST (InferringChunkedArrayBuilder, MultipleChunkNull) {
226207 auto tg = TaskGroup::MakeSerial ();
227- std::unique_ptr <ChunkedArrayBuilder> builder;
208+ std::shared_ptr <ChunkedArrayBuilder> builder;
228209 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
229210 struct_ ({}), &builder));
230211
@@ -244,7 +225,7 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkNull) {
244225
245226TEST (InferringChunkedArrayBuilder, SingleChunkInteger) {
246227 auto tg = TaskGroup::MakeSerial ();
247- std::unique_ptr <ChunkedArrayBuilder> builder;
228+ std::shared_ptr <ChunkedArrayBuilder> builder;
248229 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
249230 struct_ ({}), &builder));
250231
@@ -264,7 +245,7 @@ TEST(InferringChunkedArrayBuilder, SingleChunkInteger) {
264245
265246TEST (InferringChunkedArrayBuilder, MultipleChunkInteger) {
266247 auto tg = TaskGroup::MakeSerial ();
267- std::unique_ptr <ChunkedArrayBuilder> builder;
248+ std::shared_ptr <ChunkedArrayBuilder> builder;
268249 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
269250 struct_ ({}), &builder));
270251
@@ -285,7 +266,7 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkInteger) {
285266
286267TEST (InferringChunkedArrayBuilder, SingleChunkDouble) {
287268 auto tg = TaskGroup::MakeSerial ();
288- std::unique_ptr <ChunkedArrayBuilder> builder;
269+ std::shared_ptr <ChunkedArrayBuilder> builder;
289270 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
290271 struct_ ({}), &builder));
291272
@@ -305,7 +286,7 @@ TEST(InferringChunkedArrayBuilder, SingleChunkDouble) {
305286
306287TEST (InferringChunkedArrayBuilder, MultipleChunkDouble) {
307288 auto tg = TaskGroup::MakeSerial ();
308- std::unique_ptr <ChunkedArrayBuilder> builder;
289+ std::shared_ptr <ChunkedArrayBuilder> builder;
309290 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
310291 struct_ ({}), &builder));
311292
@@ -327,7 +308,7 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkDouble) {
327308
328309TEST (InferringChunkedArrayBuilder, SingleChunkTimestamp) {
329310 auto tg = TaskGroup::MakeSerial ();
330- std::unique_ptr <ChunkedArrayBuilder> builder;
311+ std::shared_ptr <ChunkedArrayBuilder> builder;
331312 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
332313 struct_ ({}), &builder));
333314
@@ -348,7 +329,7 @@ TEST(InferringChunkedArrayBuilder, SingleChunkTimestamp) {
348329
349330TEST (InferringChunkedArrayBuilder, MultipleChunkTimestamp) {
350331 auto tg = TaskGroup::MakeSerial ();
351- std::unique_ptr <ChunkedArrayBuilder> builder;
332+ std::shared_ptr <ChunkedArrayBuilder> builder;
352333 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
353334 struct_ ({}), &builder));
354335
@@ -371,7 +352,7 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkTimestamp) {
371352
372353TEST (InferringChunkedArrayBuilder, SingleChunkString) {
373354 auto tg = TaskGroup::MakeSerial ();
374- std::unique_ptr <ChunkedArrayBuilder> builder;
355+ std::shared_ptr <ChunkedArrayBuilder> builder;
375356 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
376357 struct_ ({}), &builder));
377358
@@ -392,7 +373,7 @@ TEST(InferringChunkedArrayBuilder, SingleChunkString) {
392373
393374TEST (InferringChunkedArrayBuilder, MultipleChunkString) {
394375 auto tg = TaskGroup::MakeSerial ();
395- std::unique_ptr <ChunkedArrayBuilder> builder;
376+ std::shared_ptr <ChunkedArrayBuilder> builder;
396377 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
397378 struct_ ({}), &builder));
398379
@@ -415,7 +396,7 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkString) {
415396
416397TEST (InferringChunkedArrayBuilder, MultipleChunkIntegerParallel) {
417398 auto tg = TaskGroup::MakeThreaded (GetCpuThreadPool ());
418- std::unique_ptr <ChunkedArrayBuilder> builder;
399+ std::shared_ptr <ChunkedArrayBuilder> builder;
419400 ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
420401 struct_ ({}), &builder));
421402
@@ -433,5 +414,41 @@ TEST(InferringChunkedArrayBuilder, MultipleChunkIntegerParallel) {
433414 AssertFieldEqual ({" a" }, actual, *expected);
434415}
435416
417+ TEST (InferringChunkedArrayBuilder, SingleChunkList) {
418+ auto tg = TaskGroup::MakeSerial ();
419+ std::shared_ptr<ChunkedArrayBuilder> builder;
420+ ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
421+ struct_ ({}), &builder));
422+
423+ std::shared_ptr<ChunkedArray> actual;
424+ AssertBuilding (builder,
425+ {
426+ std::string (" {}\n " ) + " {\" a\" : []}\n " + " {\" a\" : [1, 2]}\n " ,
427+ },
428+ &actual);
429+
430+ auto expected = ChunkedArrayFromJSON (list (int64 ()), {" [null, [], [1, 2]]" });
431+ AssertFieldEqual ({" a" }, actual, *expected);
432+ }
433+
434+ TEST (InferringChunkedArrayBuilder, MultipleChunkList) {
435+ auto tg = TaskGroup::MakeSerial ();
436+ std::shared_ptr<ChunkedArrayBuilder> builder;
437+ ASSERT_OK (MakeChunkedArrayBuilder (tg, default_memory_pool (), GetPromotionGraph (),
438+ struct_ ({}), &builder));
439+
440+ std::shared_ptr<ChunkedArray> actual;
441+ AssertBuilding (builder,
442+ {
443+ " {}\n " ,
444+ " {\" a\" : []}\n " ,
445+ " {\" a\" : [1, 2]}\n " ,
446+ },
447+ &actual);
448+
449+ auto expected = ChunkedArrayFromJSON (list (int64 ()), {" [null]" , " [[]]" , " [[1, 2]]" });
450+ AssertFieldEqual ({" a" }, actual, *expected);
451+ }
452+
436453} // namespace json
437454} // namespace arrow
0 commit comments