23#include <unordered_set>
25#if defined(__cpp_lib_format)
70 template <
class F,
class N, input_metadata_container M = std::vector<metadata_pair>, std::ranges::input_range CHILDREN_OWNERSHIP>
71 requires std::constructible_from<arrow_schema_private_data::FormatType, F>
72 && std::constructible_from<arrow_schema_private_data::NameType, N>
73 && std::is_same_v<std::ranges::range_value_t<CHILDREN_OWNERSHIP>,
bool>
77 std::optional<M> metadata,
78 std::optional<std::unordered_set<ArrowFlag>> flags,
80 const CHILDREN_OWNERSHIP& children_ownership,
82 bool dictionary_ownership
96 template <
class F,
class N, input_metadata_container M = std::vector<metadata_pair>, std::ranges::input_range CHILDREN_OWNERSHIP>
97 requires std::constructible_from<arrow_schema_private_data::FormatType, F>
98 && std::constructible_from<arrow_schema_private_data::NameType, N>
99 && std::is_same_v<std::ranges::range_value_t<CHILDREN_OWNERSHIP>,
bool>
104 std::optional<M> metadata,
105 std::optional<std::unordered_set<ArrowFlag>> flags,
124 if (flags.has_value())
126 for (
const auto& flag : *flags)
128 schema.
flags |=
static_cast<int64_t
>(flag);
133 std::optional<std::string> metadata_str = metadata.has_value()
134 ? std::make_optional(
142 std::move(metadata_str),
148 schema.
format = private_data->format_ptr();
149 schema.
name = private_data->name_ptr();
150 schema.
metadata = private_data->metadata_ptr();
156 template <
class F,
class N, input_metadata_container M, std::ranges::input_range CHILDREN_OWNERSHIP>
157 requires std::constructible_from<arrow_schema_private_data::FormatType, F>
158 && std::constructible_from<arrow_schema_private_data::NameType, N>
159 && std::is_same_v<std::ranges::range_value_t<CHILDREN_OWNERSHIP>,
bool>
163 std::optional<M> metadata,
164 std::optional<std::unordered_set<ArrowFlag>> flags,
199 using namespace std::literals;
206 std::array<bool, 0>{},
266#if defined(__cpp_lib_format)
271 constexpr auto parse(std::format_parse_context& ctx)
276 auto format(
const ArrowSchema& obj, std::format_context& ctx)
const
278 std::string children_str = std::format(
"{}",
static_cast<void*
>(obj.
children));
281 children_str += std::format(
"\n-{}",
static_cast<void*
>(obj.
children[i]));
284 const std::string format = obj.
format ? obj.
format :
"nullptr";
285 const std::string name = obj.
name ? obj.
name :
"nullptr";
288 return std::format_to(
290 "ArrowSchema - ptr address: {}\n- format: {}\n- name: {}\n- metadata: {}\n- flags: {}\n- n_children: {}\n- children: {}\n- dictionary: {}\n- release: {}\n- private_data: {}\n",
291 static_cast<const void*
>(&obj),
299 static_cast<const void*
>(std::addressof(obj.
release)),
307 os << std::format(
"{}", value);
Private data for ArrowSchema.
#define SPARROW_ASSERT_TRUE(expr__)
#define SPARROW_ASSERT_FALSE(expr__)
std::ostream & operator<<(std::ostream &stream, primesum::uint128_t n)
The __int128_t type (GCC/Clang) is not well supported by the C++ standard library (in 2016) so we hav...
std::string key< ArrowSchema >()
ArrowSchema make_arrow_schema(F format, N name, std::optional< M > metadata, std::optional< std::unordered_set< ArrowFlag > > flags, ArrowSchema **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowSchema *dictionary, bool dictionary_ownership)
Creates an ArrowSchema owned by a unique_ptr and holding the provided data.
SPARROW_API void copy_schema(const ArrowSchema &source, ArrowSchema &target)
Fills the target ArrowSchema with a deep copy of the data from the source ArrowSchema.
SPARROW_API void release_arrow_schema(ArrowSchema *schema)
Release function to use for the ArrowSchema.release member.
std::unique_ptr< ArrowSchema, arrow_schema_deleter > schema_unique_ptr
std::string get_metadata_from_key_values(const T &metadata)
Converts a container of key-value pairs to binary metadata format.
SPARROW_API void empty_release_arrow_schema(ArrowSchema *schema)
Empty release function to use for the ArrowSchema.release member.
ArrowSchema move_schema(ArrowSchema &&source)
Moves the content of source into a stack-allocated array, and reset the source to an empty ArrowSchem...
bool SPARROW_API check_compatible_schema(const ArrowSchema &schema1, const ArrowSchema &schema2)
void fill_arrow_schema(ArrowSchema &schema, F format, N name, std::optional< M > metadata, std::optional< std::unordered_set< ArrowFlag > > flags, ArrowSchema **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowSchema *dictionary, bool dictionary_ownership)
SPARROW_API void swap(ArrowArray &lhs, ArrowArray &rhs) noexcept
Swaps the contents of the two ArrowArray objects.
ArrowSchema make_empty_arrow_schema()
struct ArrowSchema * dictionary
void(* release)(struct ArrowSchema *)
struct ArrowSchema ** children
SPARROW_API void operator()(ArrowSchema *schema) const