lidavidm commented on code in PR #175: URL: https://github.com/apache/arrow-nanoarrow/pull/175#discussion_r1151996728
########## src/nanoarrow/nanoarrow_types.h: ########## @@ -319,6 +319,25 @@ enum ArrowTimeUnit { NANOARROW_TIME_UNIT_NANO = 3 }; +/// \brief Validation level enumerator +/// \ingroup nanoarrow-array +enum ArrowValidationLevel { + /// \brief Do not validate buffer sizes or content. + NANOARROW_VALIDATION_LEVEL_NONE = 0, + + /// \brief Validate buffer sizes that depend on array length but do not validate buffer + /// sizes that depend on buffer data access. Review Comment: In other words, we never actually access any buffers right? ########## src/nanoarrow/array.c: ########## @@ -458,17 +467,38 @@ ArrowErrorCode ArrowArrayFinishBuilding(struct ArrowArray* array, return result; } + if (validation_level == NANOARROW_VALIDATION_LEVEL_MINIMAL) { + ArrowArrayViewReset(&array_view); + return NANOARROW_OK; + } + result = ArrowArrayViewSetArray(&array_view, array, error); if (result != NANOARROW_OK) { ArrowArrayViewReset(&array_view); return result; } result = ArrowArrayCheckInternalBufferSizes(array, &array_view, 0, error); + if (result != NANOARROW_OK) { + ArrowArrayViewReset(&array_view); + return result; + } + + if (validation_level == NANOARROW_VALIDATION_LEVEL_DEFAULT) { + ArrowArrayViewReset(&array_view); + return NANOARROW_OK; + } + + result = ArrowArrayViewValidateFull(&array_view, error); Review Comment: Hmm, if validation fails, should we free the array too? ########## src/nanoarrow/array.c: ########## @@ -458,17 +467,38 @@ ArrowErrorCode ArrowArrayFinishBuilding(struct ArrowArray* array, return result; } + if (validation_level == NANOARROW_VALIDATION_LEVEL_MINIMAL) { + ArrowArrayViewReset(&array_view); + return NANOARROW_OK; + } + result = ArrowArrayViewSetArray(&array_view, array, error); if (result != NANOARROW_OK) { ArrowArrayViewReset(&array_view); return result; } result = ArrowArrayCheckInternalBufferSizes(array, &array_view, 0, error); + if (result != NANOARROW_OK) { + ArrowArrayViewReset(&array_view); + return result; + } + + if (validation_level == NANOARROW_VALIDATION_LEVEL_DEFAULT) { + ArrowArrayViewReset(&array_view); + return NANOARROW_OK; + } + + result = ArrowArrayViewValidateFull(&array_view, error); Review Comment: Either way, the behavior should be documented -- 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