Programming Support¶
General information¶
- 
const BuildInfo &
arrow::GetBuildInfo()¶ Get runtime build info.
The returned values correspond to exact loaded version of the Arrow library, rather than the values frozen at application compile-time through the
ARROW_*preprocessor definitions.
- 
struct 
arrow::BuildInfo¶ Public Members
- 
int 
version¶ The packed version number, e.g. 1002003 (decimal) for Arrow 1.2.3.
- 
int 
version_major¶ The “major” version number, e.g. 1 for Arrow 1.2.3.
- 
int 
version_minor¶ The “minor” version number, e.g. 2 for Arrow 1.2.3.
- 
int 
version_patch¶ The “patch” version number, e.g. 3 for Arrow 1.2.3.
- 
std::string 
version_string¶ The version string, e.g. “1.2.3”.
- 
int 
 
Error return and reporting¶
- 
class 
arrow::Status: public arrow::util::EqualityComparable<Status>, public arrow::util::ToStringOstreamable<Status>¶ Status outcome object (success or error)
The Status object is an object holding the outcome of an operation. The outcome is represented as a StatusCode, either success (StatusCode::OK) or an error (any other of the StatusCode enumeration values).
Additionally, if an error occurred, a specific error message is generally attached.
Public Functions
Pluggable constructor for use by sub-systems. detail cannot be null.
- 
bool 
ok() const¶ Return true iff the status indicates success.
- 
bool 
IsOutOfMemory() const¶ Return true iff the status indicates an out-of-memory error.
- 
bool 
IsKeyError() const¶ Return true iff the status indicates a key lookup error.
- 
bool 
IsInvalid() const¶ Return true iff the status indicates invalid data.
- 
bool 
IsIOError() const¶ Return true iff the status indicates an IO-related failure.
- 
bool 
IsCapacityError() const¶ Return true iff the status indicates a container reaching capacity limits.
- 
bool 
IsIndexError() const¶ Return true iff the status indicates an out of bounds index.
- 
bool 
IsTypeError() const¶ Return true iff the status indicates a type error.
- 
bool 
IsUnknownError() const¶ Return true iff the status indicates an unknown error.
- 
bool 
IsNotImplemented() const¶ Return true iff the status indicates an unimplemented operation.
- 
bool 
IsSerializationError() const¶ Return true iff the status indicates a (de)serialization failure.
- 
bool 
IsRError() const¶ Return true iff the status indicates a R-originated error.
- 
std::string 
ToString() const¶ Return a string representation of this status suitable for printing.
The string “OK” is returned for success.
- 
std::string 
CodeAsString() const¶ Return a string representation of the status code, without the message text or POSIX code information.
- 
StatusCode 
code() const¶ Return the StatusCode value attached to this status.
- 
std::string 
message() const¶ Return the specific error message attached to this status.
Return a new Status copying the existing status, but updating with the existing detail.
Public Static Functions
- 
template<typename ...
Args>
StatusOutOfMemory(Args&&... args)¶ Return an error status for out-of-memory conditions.
- 
template<typename ...
Args>
StatusKeyError(Args&&... args)¶ Return an error status for failed key lookups (e.g. column name in a table)
- 
template<typename ...
Args>
StatusTypeError(Args&&... args)¶ Return an error status for type errors (such as mismatching data types)
- 
template<typename ...
Args>
StatusUnknownError(Args&&... args)¶ Return an error status for unknown errors.
- 
template<typename ...
Args>
StatusNotImplemented(Args&&... args)¶ Return an error status when an operation or a combination of operation and data types is unimplemented.
- 
template<typename ...
Args>
StatusInvalid(Args&&... args)¶ Return an error status for invalid data (for example a string that fails parsing)
- 
template<typename ...
Args>
StatusIndexError(Args&&... args)¶ Return an error status when an index is out of bounds.
- 
template<typename ...
Args>
StatusCapacityError(Args&&... args)¶ Return an error status when a container’s capacity would exceed its limits.
- 
class 
arrow::StatusDetail¶ An opaque class that allows subsystems to retain additional information inside the Status.
Subclassed by arrow::flight::FlightStatusDetail, arrow::flight::FlightWriteSizeStatusDetail
Public Functions
- 
const char *
type_id() const = 0¶ Return a unique id for the type of the StatusDetail (effectively a poor man’s substitute for RTTI).
- 
std::string 
ToString() const = 0¶ Produce a human-readable description of this status.
- 
const char *
 
- 
template<class 
T>
classarrow::Result¶ A class for representing either a usable value, or an error.
A Result object either contains a value of type
Tor a Status object explaining why such a value is not present. The typeTmust be copy-constructible and/or move-constructible.The state of a Result object may be determined by calling ok() or status(). The ok() method returns true if the object contains a valid value. The status() method returns the internal Status object. A Result object that contains a valid value will return an OK Status for a call to status().
A value of type
Tmay be extracted from a Result object through a call to ValueOrDie(). This function should only be called if a call to ok() returns true. Sample usage:arrow::Result<Foo> result = CalculateFoo(); if (result.ok()) { Foo foo = result.ValueOrDie(); foo.DoSomethingCool(); } else { ARROW_LOG(ERROR) << result.status(); }
If
Tis a move-only type, likestd::unique_ptr<>, then the value should only be extracted after invokingstd::move()on the Result object. Sample usage:arrow::Result<std::unique_ptr<Foo>> result = CalculateFoo(); if (result.ok()) { std::unique_ptr<Foo> foo = std::move(result).ValueOrDie(); foo->DoSomethingCool(); } else { ARROW_LOG(ERROR) << result.status(); }
Result is provided for the convenience of implementing functions that return some value but may fail during execution. For instance, consider a function with the following signature:
arrow::Status CalculateFoo(int *output);
This function may instead be written as:
arrow::Result<int> CalculateFoo();
Public Functions
- 
Result()¶ Constructs a Result object that contains a non-OK status.
This constructor is marked
explicitto prevent attempts toreturn {}from a function with a return type of, for example,Result<std::vector<int>>. Whilereturn {}seems like it would return an empty vector, it will actually invoke the default constructor of Result.
- 
Result(const Status &status)¶ Constructs a Result object with the given non-OK Status object.
All calls to ValueOrDie() on this object will abort. The given
statusmust not be an OK status, otherwise this constructor will abort.This constructor is not declared explicit so that a function with a return type of
Result<T>can return a Status object, and the status will be implicitly converted to the appropriate return type as a matter of convenience.- Parameters
 status: The non-OK Status object to initialize to.
- 
template<typename 
U, typenameE= typename std::enable_if<std::is_constructible<T, U>::value && std::is_convertible<U, T>::value && !std::is_same<typename std::remove_reference<typename std::remove_cv<U>::type>::type, Status>::value>::type>Result(U &&value) noexcept¶ Constructs a Result object that contains
value.The resulting object is considered to have an OK status. The wrapped element can be accessed with ValueOrDie().
This constructor is made implicit so that a function with a return type of
Result<T>can return an object of typeU &&, implicitly converting it to aResult<T>object.Note that
Tmust be implicitly constructible fromU, andUmust not be a (cv-qualified) Status or Status-reference type. Due to C++ reference-collapsing rules and perfect-forwarding semantics, this constructor matches invocations that passvalueeither as a const reference or as an rvalue reference. Since Result needs to work for both reference and rvalue-reference types, the constructor uses perfect forwarding to avoid invalidating arguments that were passed by reference. See http://thbecker.net/articles/rvalue_references/section_08.html for additional details.- Parameters
 value: The value to initialize to.
- 
Result(T &&value) noexcept¶ Constructs a Result object that contains
value.The resulting object is considered to have an OK status. The wrapped element can be accessed with ValueOrDie().
This constructor is made implicit so that a function with a return type of
Result<T>can return an object of typeT, implicitly converting it to aResult<T>object.- Parameters
 value: The value to initialize to.
- 
Result(const Result &other)¶ Copy constructor.
This constructor needs to be explicitly defined because the presence of the move-assignment operator deletes the default copy constructor. In such a scenario, since the deleted copy constructor has stricter binding rules than the templated copy constructor, the templated constructor cannot act as a copy constructor, and any attempt to copy-construct a
Resultobject results in a compilation error.- Parameters
 other: The value to copy from.
- 
template<typename 
U, typenameE= typename std::enable_if<std::is_constructible<T, const U&>::value && std::is_convertible<U, T>::value>::type>Result(const Result<U> &other)¶ Templatized constructor that constructs a
Result<T>from a const reference to aResult<U>.Tmust be implicitly constructible fromconst U &.- Parameters
 other: The value to copy from.
- 
Result &
operator=(const Result &other)¶ Copy-assignment operator.
- Parameters
 other: The Result object to copy.
- 
template<typename 
U, typenameE= typename std::enable_if<std::is_constructible<T, U&&>::value && std::is_convertible<U, T>::value>::type>Result(Result<U> &&other) noexcept¶ Templatized constructor which constructs a
Result<T>by moving the contents of aResult<U>.Tmust be implicitly constructible fromU &&.Sets
otherto contain a non-OK status with aStatusError::Invaliderror code.- Parameters
 other: The Result object to move from and set to a non-OK status.
- 
Result &
operator=(Result &&other) noexcept¶ Move-assignment operator.
Sets
otherto an invalid state..- Parameters
 other: The Result object to assign from and set to a non-OK status.
- 
bool 
ok() const¶ Indicates whether the object contains a
Tvalue.Generally instead of accessing this directly you will want to use ASSIGN_OR_RAISE defined below.
- Return
 True if this Result object’s status is OK (i.e. a call to ok() returns true). If this function returns true, then it is safe to access the wrapped element through a call to ValueOrDie().
- 
const Status &
status() const¶ Equivalent to ok().
Gets the stored status object, or an OK status if a
Tvalue is stored.- Return
 The stored non-OK status object, or an OK status if this object has a value.
- 
const T &
ValueOrDie() const &¶ Gets the stored
Tvalue.This method should only be called if this Result object’s status is OK (i.e. a call to ok() returns true), otherwise this call will abort.
- Return
 The stored
Tvalue.
- 
T &
ValueOrDie() &¶ Gets a mutable reference to the stored
Tvalue.This method should only be called if this Result object’s status is OK (i.e. a call to ok() returns true), otherwise this call will abort.
- Return
 The stored
Tvalue.
- 
T 
ValueOrDie() &&¶ Moves and returns the internally-stored
Tvalue.This method should only be called if this Result object’s status is OK (i.e. a call to ok() returns true), otherwise this call will abort. The Result object is invalidated after this call and will be updated to contain a non-OK status.
- Return
 The stored
Tvalue.
- 
template<typename 
U, typenameE= typename std::enable_if<std::is_constructible<U, T>::value>::type>
StatusValue(U *out) &&¶ Helper method for implementing Status returning functions in terms of semantically equivalent Result returning functions.
For example:
Status GetInt(int *out) { return GetInt().Value(out); }
- 
T 
ValueOr(T alternative) &&¶ Move and return the internally stored value or alternative if an error is stored.
- 
template<typename 
G>
TValueOrElse(G &&generate_alternative) &&¶ Retrieve the value if ok(), falling back to an alternative generated by the provided factory.
- 
template<typename 
M>
EnsureResult<typename std::result_of<M&&(T)>::type>::typeMap(M &&m) &&¶ Apply a function to the internally stored value to produce a new result or propagate the stored error.
- 
template<typename 
M>
EnsureResult<typename std::result_of<M&&(const T&)>::type>::typeMap(M &&m) const &¶ Apply a function to the internally stored value to produce a new result or propagate the stored error.
- 
 
- 
class 
ParquetException: public exception¶ Subclassed by parquet::HiddenColumnException, parquet::KeyAccessDeniedException, parquet::ParquetStatusException
- 
ARROW_RETURN_NOT_OK(status)¶ Propagate any non-successful Status to the caller.
- 
ARROW_ASSIGN_OR_RAISE(lhs, rexpr)¶ Execute an expression that returns a Result, extracting its value into the variable defined by
lhs(or returning a Status on error).Example: Assigning to a new value: ARROW_ASSIGN_OR_RAISE(auto value, MaybeGetValue(arg));
Example: Assigning to an existing value: ValueType value; ARROW_ASSIGN_OR_RAISE(value, MaybeGetValue(arg));
WARNING: ARROW_ASSIGN_OR_RAISE expands into multiple statements; it cannot be used in a single statement (e.g. as the body of an if statement without {})!
WARNING: ARROW_ASSIGN_OR_RAISE
std::moves its right operand. If you have an lvalue Result which you don’t want to move out of cast appropriately.
- 
PARQUET_THROW_NOT_OK(s)¶ 
- 
PARQUET_ASSIGN_OR_THROW(lhs, rexpr)¶