in src/nanoarrow/schema.c [1105:1184]
ArrowErrorCode ArrowSchemaViewInit(struct ArrowSchemaView* schema_view,
struct ArrowSchema* schema, struct ArrowError* error) {
if (schema == NULL) {
ArrowErrorSet(error, "Expected non-NULL schema");
return EINVAL;
}
if (schema->release == NULL) {
ArrowErrorSet(error, "Expected non-released schema");
return EINVAL;
}
schema_view->schema = schema;
const char* format = schema->format;
if (format == NULL) {
ArrowErrorSet(
error,
"Error parsing schema->format: Expected a null-terminated string but found NULL");
return EINVAL;
}
size_t format_len = strlen(format);
if (format_len == 0) {
ArrowErrorSet(error, "Error parsing schema->format: Expected a string with size > 0");
return EINVAL;
}
const char* format_end_out;
ArrowErrorCode result =
ArrowSchemaViewParse(schema_view, format, &format_end_out, error);
if (result != NANOARROW_OK) {
if (error != NULL) {
char child_error[1024];
memcpy(child_error, ArrowErrorMessage(error), 1024);
ArrowErrorSet(error, "Error parsing schema->format: %s", child_error);
}
return result;
}
if ((format + format_len) != format_end_out) {
ArrowErrorSet(error, "Error parsing schema->format '%s': parsed %d/%d characters",
format, (int)(format_end_out - format), (int)(format_len));
return EINVAL;
}
if (schema->dictionary != NULL) {
schema_view->type = NANOARROW_TYPE_DICTIONARY;
}
result = ArrowSchemaViewValidate(schema_view, schema_view->storage_type, error);
if (result != NANOARROW_OK) {
return result;
}
if (schema_view->storage_type != schema_view->type) {
result = ArrowSchemaViewValidate(schema_view, schema_view->type, error);
if (result != NANOARROW_OK) {
return result;
}
}
ArrowLayoutInit(&schema_view->layout, schema_view->storage_type);
if (schema_view->storage_type == NANOARROW_TYPE_FIXED_SIZE_BINARY) {
schema_view->layout.element_size_bits[1] = schema_view->fixed_size * 8;
} else if (schema_view->storage_type == NANOARROW_TYPE_FIXED_SIZE_LIST) {
schema_view->layout.child_size_elements = schema_view->fixed_size;
}
schema_view->extension_name = ArrowCharView(NULL);
schema_view->extension_metadata = ArrowCharView(NULL);
ArrowMetadataGetValue(schema->metadata, ArrowCharView("ARROW:extension:name"),
&schema_view->extension_name);
ArrowMetadataGetValue(schema->metadata, ArrowCharView("ARROW:extension:metadata"),
&schema_view->extension_metadata);
return NANOARROW_OK;
}