@@ -36,9 +36,25 @@ static auto CumSum(struct ArrowArrayStream *array_stream,
36
36
bool seen_na = false ;
37
37
std::stringstream ss{};
38
38
39
+ // TODO: we can simplify this further if we just iterate on the array
40
+ // and not the array view, but there is an upstream bug in nanoarrow
41
+ // that prevents that
42
+ // https://github.com/apache/arrow-nanoarrow/issues/701
43
+ nanoarrow::UniqueArrayView array_view{};
44
+ nanoarrow::UniqueSchema schema{};
45
+ NANOARROW_THROW_NOT_OK (
46
+ ArrowArrayStreamGetSchema (array_stream, schema.get (), nullptr ));
47
+
39
48
nanoarrow::ViewArrayStream array_stream_view (array_stream);
40
49
for (const auto &array : array_stream_view) {
41
- for (const auto &sv : nanoarrow::ViewArrayAsBytes<OffsetSize>(&array)) {
50
+ array_view.reset ();
51
+ NANOARROW_THROW_NOT_OK (
52
+ ArrowArrayViewInitFromSchema (array_view.get (), schema.get (), nullptr ));
53
+ NANOARROW_THROW_NOT_OK (
54
+ ArrowArrayViewSetArray (array_view.get (), &array, nullptr ));
55
+
56
+ for (const auto &sv :
57
+ nanoarrow::ViewArrayAsBytes<OffsetSize>(array_view.get ())) {
42
58
if ((!sv || seen_na) && !skipna) {
43
59
seen_na = true ;
44
60
ArrowArrayAppendNull (out, 1 );
@@ -68,9 +84,25 @@ static auto CumMinOrMax(struct ArrowArrayStream *array_stream,
68
84
bool seen_na = false ;
69
85
std::optional<std::string> current_str{};
70
86
87
+ // TODO: we can simplify this further if we just iterate on the array
88
+ // and not the array view, but there is an upstream bug in nanoarrow
89
+ // that prevents that
90
+ // https://github.com/apache/arrow-nanoarrow/issues/701
91
+ nanoarrow::UniqueArrayView array_view{};
92
+ nanoarrow::UniqueSchema schema{};
93
+ NANOARROW_THROW_NOT_OK (
94
+ ArrowArrayStreamGetSchema (array_stream, schema.get (), nullptr ));
95
+
71
96
nanoarrow::ViewArrayStream array_stream_view (array_stream);
72
97
for (const auto &array : array_stream_view) {
73
- for (const auto &sv : nanoarrow::ViewArrayAsBytes<OffsetSize>(&array)) {
98
+ array_view.reset ();
99
+ NANOARROW_THROW_NOT_OK (
100
+ ArrowArrayViewInitFromSchema (array_view.get (), schema.get (), nullptr ));
101
+ NANOARROW_THROW_NOT_OK (
102
+ ArrowArrayViewSetArray (array_view.get (), &array, nullptr ));
103
+
104
+ for (const auto &sv :
105
+ nanoarrow::ViewArrayAsBytes<OffsetSize>(array_view.get ())) {
74
106
if ((!sv || seen_na) && !skipna) {
75
107
seen_na = true ;
76
108
ArrowArrayAppendNull (out, 1 );
0 commit comments