paleolimbot commented on code in PR #456: URL: https://github.com/apache/arrow-nanoarrow/pull/456#discussion_r1594234054
########## python/src/nanoarrow/_lib.pyx: ########## @@ -2700,20 +2729,36 @@ cdef class CArrayStream: return CArrayStream(base, <uintptr_t>c_array_stream_out) @staticmethod - def from_array_list(arrays, CSchema schema, move=False, validate=True): + def from_c_arrays(arrays, CSchema schema, move=False, validate=True): cdef ArrowArrayStream* c_array_stream_out base = alloc_c_array_stream(&c_array_stream_out) - if not move: - schema = schema.__deepcopy__() - - cdef int code = ArrowBasicArrayStreamInit(c_array_stream_out, schema._ptr, len(arrays)) + # Don't create more copies than we have to (but make sure + # one exists for validation if requested) + cdef CSchema out_schema = schema + if validate and not move: + validate_schema = schema + out_schema = schema.__deepcopy__() + elif validate: + validate_schema = schema.__deepcopy__() + out_schema = schema + elif not move: + out_schema = schema.__deepcopy__() + + cdef int code = ArrowBasicArrayStreamInit(c_array_stream_out, out_schema._ptr, len(arrays)) Error.raise_error_not_ok("ArrowBasicArrayStreamInit()", code) cdef ArrowArray tmp cdef CArray array for i in range(len(arrays)): array = arrays[i] + + if validate and not validate_schema.type_equals(array.schema): + raise ValueError( + f"Expected schema {validate_schema._to_string()} " + f"but got {array.schema._to_string()}" + ) Review Comment: Done! (`CSchema.assert_type_equal()`) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org