| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| */ | |
| #include "iceberg/arrow/arrow_register.h" | |
| #include <mutex> | |
| #include <string> | |
| #include <string_view> | |
| #include "iceberg/arrow/arrow_io_util.h" | |
| #include "iceberg/arrow/s3/s3_properties.h" | |
| #include "iceberg/file_io_registry.h" | |
| namespace iceberg { | |
| void RegisterArrowProjectBatch(); | |
| } | |
| namespace iceberg::arrow { | |
| namespace { | |
| void RegisterLocalFileIO() { | |
| FileIORegistry::Register( | |
| std::string(FileIORegistry::kArrowLocalFileIO), | |
| {.create = [](const FileIORegistry::Properties& /*properties*/) | |
| -> Result<std::unique_ptr<FileIO>> { return MakeLocalFileIO(); }, | |
| .accepts = | |
| [](std::string_view scheme) { return scheme.empty() || scheme == "file"; }}); | |
| } | |
| void RegisterS3FileIO() { | |
| #if ICEBERG_S3_ENABLED | |
| FileIORegistry::Register( | |
| std::string(FileIORegistry::kArrowS3FileIO), | |
| {.create = [](const FileIORegistry::Properties& properties) | |
| -> Result<std::unique_ptr<FileIO>> { return MakeS3FileIO(properties); }, | |
| .accepts = [](std::string_view scheme) { return IsS3Scheme(scheme); }}); | |
| #endif | |
| } | |
| void EnsureArrowFileIOsRegistered() { | |
| static std::once_flag flag; | |
| std::call_once(flag, []() { | |
| RegisterLocalFileIO(); | |
| RegisterS3FileIO(); | |
| }); | |
| } | |
| [[maybe_unused]] const bool kArrowFileIOsRegistered = []() { | |
| EnsureArrowFileIOsRegistered(); | |
| return true; | |
| }(); | |
| } // namespace | |
| void RegisterAll() { | |
| EnsureArrowFileIOsRegistered(); | |
| ::iceberg::RegisterArrowProjectBatch(); | |
| } | |
| } // namespace iceberg::arrow |