| 1251 | } |
| 1252 | |
| 1253 | Status FromParquetSchema( |
| 1254 | const SchemaDescriptor* schema, const ArrowReaderProperties& properties, |
| 1255 | const std::shared_ptr<const KeyValueMetadata>& key_value_metadata, |
| 1256 | std::shared_ptr<::arrow::Schema>* out) { |
| 1257 | SchemaManifest manifest; |
| 1258 | RETURN_NOT_OK(SchemaManifest::Make(schema, key_value_metadata, properties, &manifest)); |
| 1259 | std::vector<std::shared_ptr<Field>> fields(manifest.schema_fields.size()); |
| 1260 | |
| 1261 | for (int i = 0; i < static_cast<int>(fields.size()); i++) { |
| 1262 | const auto& schema_field = manifest.schema_fields[i]; |
| 1263 | fields[i] = schema_field.field; |
| 1264 | } |
| 1265 | if (manifest.origin_schema) { |
| 1266 | // ARROW-8980: If the ARROW:schema was in the input metadata, then |
| 1267 | // manifest.origin_schema will have it scrubbed out |
| 1268 | *out = ::arrow::schema(fields, manifest.origin_schema->metadata()); |
| 1269 | } else { |
| 1270 | *out = ::arrow::schema(fields, key_value_metadata); |
| 1271 | } |
| 1272 | return Status::OK(); |
| 1273 | } |
| 1274 | |
| 1275 | Status FromParquetSchema(const SchemaDescriptor* parquet_schema, |
| 1276 | const ArrowReaderProperties& properties, |