c_glib/arrow-glib/scalar.cpp (1,726 lines of code) (raw):

/* * 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 <arrow-glib/basic-array.hpp> #include <arrow-glib/buffer.hpp> #include <arrow-glib/compute.h> #include <arrow-glib/data-type.hpp> #include <arrow-glib/decimal.hpp> #include <arrow-glib/error.hpp> #include <arrow-glib/interval.hpp> #include <arrow-glib/scalar.hpp> #include <arrow/compute/cast.h> G_BEGIN_DECLS /** * SECTION: scalar * @section_id: scalar-classes * @title: Scalar classes * @include: arrow-glib/arrow-glib.h * * #GArrowScalar is a base class for all scalar classes such as * #GArrowBooleanScalar. * * #GArrowNullScalar is a class for a null scalar. * * #GArrowBooleanScalar is a class for a boolean scalar. * * #GArrowInt8Scalar is a class for a 8-bit integer scalar. * * #GArrowInt16Scalar is a class for a 16-bit integer scalar. * * #GArrowInt32Scalar is a class for a 32-bit integer scalar. * * #GArrowInt64Scalar is a class for a 64-bit integer scalar. * * #GArrowUInt8Scalar is a class for a 8-bit unsigned integer scalar. * * #GArrowUInt16Scalar is a class for a 16-bit unsigned integer scalar. * * #GArrowUInt32Scalar is a class for a 32-bit unsigned integer scalar. * * #GArrowUInt64Scalar is a class for a 64-bit unsigned integer scalar. * * #GArrowHalfFloatScalar is a class for a 16-bit floating point scalar. * * #GArrowFloatScalar is a class for a 32-bit floating point scalar. * * #GArrowDoubleScalar is a class for a 64-bit floating point scalar. * * #GArrowBaseBinaryScalar is a base class for all binary and string * scalar classes such as #GArrowBinaryScalar. * * #GArrowBinaryScalar is a class for a binary scalar. * * #GArrowStringScalar is a class for an UTF-8 encoded string scalar. * * #GArrowLargeBinaryScalar is a class for a 64-bit offsets binary * scalar. * * #GArrowLargeStringScalar is a class for a 64-bit offsets UTF-8 * encoded string scalar. * * #GArrowFixedSizeBinaryScalar is a class for a fixed-size binary * scalar. * * #GArrowDate32Scalar is a class for the number of days since UNIX * epoch in a 32-bit signed integer scalar. * * #GArrowDate64Scalar is a class for the number of milliseconds * since UNIX epoch in a 64-bit signed integer scalar. * * #GArrowTime32Scalar is a class for the number of seconds or * milliseconds since midnight in a 32-bit signed integer scalar. * * #GArrowTime64Scalar is a class for the number of microseconds or * nanoseconds since midnight in a 64-bit signed integer scalar. * * #GArrowTimestampScalar is a class for the number of * seconds/milliseconds/microseconds/nanoseconds since UNIX epoch in * a 64-bit signed integer scalar. * * #GArrowMonthIntervalScalar is a class for the month intarval scalar. * * #GArrowDayTimeIntervalScalar is a class for the day time intarval scalar. * * #GArrowMonthDayNanoIntervalScalar is a class for the month day nano * intarval scalar. * * #GArrowDecimal32Scalar is a class for a 32-bit decimal scalar. * * #GArrowDecimal64Scalar is a class for a 64-bit decimal scalar. * * #GArrowDecimal128Scalar is a class for a 128-bit decimal scalar. * * #GArrowDecimal256Scalar is a class for a 256-bit decimal scalar. * * #GArrowBaseListScalar is a base class for all list scalar classes * such as #GArrowListScalar. * * #GArrowListScalar is a class for a list scalar. * * #GArrowLargeListScalar is a class for a large list scalar. * * #GArrowMapScalar is a class for a map list scalar. * * #GArrowStructScalar is a class for a struct list scalar. * * #GArrowUnionScalar is a base class for all union scalar classes * such as #GArrowSparseUnionScalar. * * #GArrowSparseUnionScalar is a class for a sparse union scalar. * * #GArrowDenseUnionScalar is a class for a dense union scalar. * * #GArrowExtensionScalar is a base class for user-defined extension * scalar. */ typedef struct GArrowScalarPrivate_ { std::shared_ptr<arrow::Scalar> scalar; GArrowDataType *data_type; } GArrowScalarPrivate; enum { PROP_SCALAR = 1, PROP_DATA_TYPE, }; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowScalar, garrow_scalar, G_TYPE_OBJECT) #define GARROW_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowScalarPrivate *>( \ garrow_scalar_get_instance_private(GARROW_SCALAR(obj))) static void garrow_scalar_dispose(GObject *object) { auto priv = GARROW_SCALAR_GET_PRIVATE(object); if (priv->data_type) { g_object_unref(priv->data_type); priv->data_type = NULL; } G_OBJECT_CLASS(garrow_scalar_parent_class)->dispose(object); } static void garrow_scalar_finalize(GObject *object) { auto priv = GARROW_SCALAR_GET_PRIVATE(object); priv->scalar.~shared_ptr(); G_OBJECT_CLASS(garrow_scalar_parent_class)->finalize(object); } static void garrow_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_SCALAR: priv->scalar = *static_cast<std::shared_ptr<arrow::Scalar> *>(g_value_get_pointer(value)); break; case PROP_DATA_TYPE: priv->data_type = GARROW_DATA_TYPE(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_scalar_init(GArrowScalar *object) { auto priv = GARROW_SCALAR_GET_PRIVATE(object); new (&priv->scalar) std::shared_ptr<arrow::Scalar>; } static void garrow_scalar_class_init(GArrowScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_scalar_dispose; gobject_class->finalize = garrow_scalar_finalize; gobject_class->set_property = garrow_scalar_set_property; GParamSpec *spec; spec = g_param_spec_pointer( "scalar", "Scalar", "The raw std::shared<arrow::Scalar> *", static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCALAR, spec); /** * GArrowScalar:data-type: * * The data type of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "data-type", "Data type", "The data type of the scalar", GARROW_TYPE_DATA_TYPE, static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec); } /** * garrow_scalar_parse: * @data_type: A #GArrowDataType for the parsed scalar. * @data: (array length=size): Data to be parsed. * @size: The number of bytes of the data. * @error: (nullable): Return location for a #GError or %NULL. * * Returns: (nullable) (transfer full): * A newly created #GArrowScalar if the data is parsed successfully, * %NULL otherwise. * * Since: 5.0.0 */ GArrowScalar * garrow_scalar_parse(GArrowDataType *data_type, const guint8 *data, gsize size, GError **error) { const auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_data = std::string_view(reinterpret_cast<const char *>(data), size); auto arrow_scalar_result = arrow::Scalar::Parse(arrow_data_type, arrow_data); if (garrow::check(error, arrow_scalar_result, "[scalar][parse]")) { auto arrow_scalar = *arrow_scalar_result; return garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, NULL); } else { return NULL; } } /** * garrow_scalar_get_data_type: * @scalar: A #GArrowScalar. * * Returns: (transfer none): The #GArrowDataType for the scalar. * * Since: 5.0.0 */ GArrowDataType * garrow_scalar_get_data_type(GArrowScalar *scalar) { auto priv = GARROW_SCALAR_GET_PRIVATE(scalar); if (!priv->data_type) { priv->data_type = garrow_data_type_new_raw(&(priv->scalar->type)); } return priv->data_type; } /** * garrow_scalar_is_valid: * @scalar: A #GArrowScalar. * * Returns: %TRUE if the scalar is valid, %FALSE otherwise. * * Since: 5.0.0 */ gboolean garrow_scalar_is_valid(GArrowScalar *scalar) { const auto arrow_scalar = garrow_scalar_get_raw(scalar); return arrow_scalar->is_valid; } /** * garrow_scalar_equal: * @scalar: A #GArrowScalar. * @other_scalar: A #GArrowScalar to be compared. * * Returns: %TRUE if both of them have the same data, %FALSE * otherwise. * * Since: 5.0.0 */ gboolean garrow_scalar_equal(GArrowScalar *scalar, GArrowScalar *other_scalar) { return garrow_scalar_equal_options(scalar, other_scalar, NULL); } /** * garrow_scalar_equal_options: * @scalar: A #GArrowScalar. * @other_scalar: A #GArrowScalar to be compared. * @options: (nullable): A #GArrowEqualOptions. * * Returns: %TRUE if both of them have the same data, %FALSE * otherwise. * * Since: 5.0.0 */ gboolean garrow_scalar_equal_options(GArrowScalar *scalar, GArrowScalar *other_scalar, GArrowEqualOptions *options) { const auto arrow_scalar = garrow_scalar_get_raw(scalar); const auto arrow_other_scalar = garrow_scalar_get_raw(other_scalar); if (options) { auto is_approx = garrow_equal_options_is_approx(options); const auto arrow_options = garrow_equal_options_get_raw(options); if (is_approx) { return arrow_scalar->ApproxEquals(*arrow_other_scalar, *arrow_options); } else { return arrow_scalar->Equals(*arrow_other_scalar, *arrow_options); } } else { return arrow_scalar->Equals(*arrow_other_scalar); } } /** * garrow_scalar_to_string: * @scalar: A #GArrowScalar. * * Returns: The string representation of the scalar. * * It should be freed with g_free() when no longer needed. * * Since: 5.0.0 */ gchar * garrow_scalar_to_string(GArrowScalar *scalar) { const auto arrow_scalar = garrow_scalar_get_raw(scalar); const auto string = arrow_scalar->ToString(); return g_strdup(string.c_str()); } /** * garrow_scalar_cast: * @scalar: A #GArrowScalar. * @data_type: A #GArrowDataType of the casted scalar. * @options: (nullable): A #GArrowCastOptions. * @error: (nullable): Return location for a #GError or %NULL. * * Returns: (nullable) (transfer full): * A newly created casted scalar on success, %NULL on error. * * Since: 5.0.0 */ GArrowScalar * garrow_scalar_cast(GArrowScalar *scalar, GArrowDataType *data_type, GArrowCastOptions *options, GError **error) { const auto arrow_scalar = garrow_scalar_get_raw(scalar); const auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_casted_scalar_result = arrow::compute::Cast(arrow_scalar, arrow_data_type); if (garrow::check(error, arrow_casted_scalar_result, "[scalar][cast]")) { auto arrow_casted_scalar = (*arrow_casted_scalar_result).scalar(); return garrow_scalar_new_raw(&arrow_casted_scalar, "scalar", &arrow_casted_scalar, "data-type", data_type, NULL); } else { return NULL; } } G_DEFINE_TYPE(GArrowNullScalar, garrow_null_scalar, GARROW_TYPE_SCALAR) static void garrow_null_scalar_init(GArrowNullScalar *object) { } static void garrow_null_scalar_class_init(GArrowNullScalarClass *klass) { } /** * garrow_null_scalar_new: * * Returns: A newly created #GArrowNullScalar. * * Since: 5.0.0 */ GArrowNullScalar * garrow_null_scalar_new(void) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::NullScalar>()); return GARROW_NULL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } G_DEFINE_TYPE(GArrowBooleanScalar, garrow_boolean_scalar, GARROW_TYPE_SCALAR) static void garrow_boolean_scalar_init(GArrowBooleanScalar *object) { } static void garrow_boolean_scalar_class_init(GArrowBooleanScalarClass *klass) { } /** * garrow_boolean_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowBooleanScalar. * * Since: 5.0.0 */ GArrowBooleanScalar * garrow_boolean_scalar_new(gboolean value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::BooleanScalar>(value)); return GARROW_BOOLEAN_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_boolean_scalar_get_value: * @scalar: A #GArrowBooleanScalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gboolean garrow_boolean_scalar_get_value(GArrowBooleanScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::BooleanScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowInt8Scalar, garrow_int8_scalar, GARROW_TYPE_SCALAR) static void garrow_int8_scalar_init(GArrowInt8Scalar *object) { } static void garrow_int8_scalar_class_init(GArrowInt8ScalarClass *klass) { } /** * garrow_int8_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowInt8Scalar. * * Since: 5.0.0 */ GArrowInt8Scalar * garrow_int8_scalar_new(gint8 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Int8Scalar>(value)); return GARROW_INT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_int8_scalar_get_value: * @scalar: A #GArrowInt8Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint8 garrow_int8_scalar_get_value(GArrowInt8Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Int8Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowInt16Scalar, garrow_int16_scalar, GARROW_TYPE_SCALAR) static void garrow_int16_scalar_init(GArrowInt16Scalar *object) { } static void garrow_int16_scalar_class_init(GArrowInt16ScalarClass *klass) { } /** * garrow_int16_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowInt16Scalar. * * Since: 5.0.0 */ GArrowInt16Scalar * garrow_int16_scalar_new(gint16 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Int16Scalar>(value)); return GARROW_INT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_int16_scalar_get_value: * @scalar: A #GArrowInt16Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint16 garrow_int16_scalar_get_value(GArrowInt16Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Int16Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowInt32Scalar, garrow_int32_scalar, GARROW_TYPE_SCALAR) static void garrow_int32_scalar_init(GArrowInt32Scalar *object) { } static void garrow_int32_scalar_class_init(GArrowInt32ScalarClass *klass) { } /** * garrow_int32_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowInt32Scalar. * * Since: 5.0.0 */ GArrowInt32Scalar * garrow_int32_scalar_new(gint32 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Int32Scalar>(value)); return GARROW_INT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_int32_scalar_get_value: * @scalar: A #GArrowInt32Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint32 garrow_int32_scalar_get_value(GArrowInt32Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Int32Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowInt64Scalar, garrow_int64_scalar, GARROW_TYPE_SCALAR) static void garrow_int64_scalar_init(GArrowInt64Scalar *object) { } static void garrow_int64_scalar_class_init(GArrowInt64ScalarClass *klass) { } /** * garrow_int64_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowInt64Scalar. * * Since: 5.0.0 */ GArrowInt64Scalar * garrow_int64_scalar_new(gint64 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Int64Scalar>(value)); return GARROW_INT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_int64_scalar_get_value: * @scalar: A #GArrowInt64Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint64 garrow_int64_scalar_get_value(GArrowInt64Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Int64Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowUInt8Scalar, garrow_uint8_scalar, GARROW_TYPE_SCALAR) static void garrow_uint8_scalar_init(GArrowUInt8Scalar *object) { } static void garrow_uint8_scalar_class_init(GArrowUInt8ScalarClass *klass) { } /** * garrow_uint8_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowUInt8Scalar. * * Since: 5.0.0 */ GArrowUInt8Scalar * garrow_uint8_scalar_new(guint8 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::UInt8Scalar>(value)); return GARROW_UINT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_uint8_scalar_get_value: * @scalar: A #GArrowUInt8Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ guint8 garrow_uint8_scalar_get_value(GArrowUInt8Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::UInt8Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowUInt16Scalar, garrow_uint16_scalar, GARROW_TYPE_SCALAR) static void garrow_uint16_scalar_init(GArrowUInt16Scalar *object) { } static void garrow_uint16_scalar_class_init(GArrowUInt16ScalarClass *klass) { } /** * garrow_uint16_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowUInt16Scalar. * * Since: 5.0.0 */ GArrowUInt16Scalar * garrow_uint16_scalar_new(guint16 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::UInt16Scalar>(value)); return GARROW_UINT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_uint16_scalar_get_value: * @scalar: A #GArrowUInt16Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ guint16 garrow_uint16_scalar_get_value(GArrowUInt16Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::UInt16Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowUInt32Scalar, garrow_uint32_scalar, GARROW_TYPE_SCALAR) static void garrow_uint32_scalar_init(GArrowUInt32Scalar *object) { } static void garrow_uint32_scalar_class_init(GArrowUInt32ScalarClass *klass) { } /** * garrow_uint32_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowUInt32Scalar. * * Since: 5.0.0 */ GArrowUInt32Scalar * garrow_uint32_scalar_new(guint32 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::UInt32Scalar>(value)); return GARROW_UINT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_uint32_scalar_get_value: * @scalar: A #GArrowUInt32Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ guint32 garrow_uint32_scalar_get_value(GArrowUInt32Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::UInt32Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowUInt64Scalar, garrow_uint64_scalar, GARROW_TYPE_SCALAR) static void garrow_uint64_scalar_init(GArrowUInt64Scalar *object) { } static void garrow_uint64_scalar_class_init(GArrowUInt64ScalarClass *klass) { } /** * garrow_uint64_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowUInt64Scalar. * * Since: 5.0.0 */ GArrowUInt64Scalar * garrow_uint64_scalar_new(guint64 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::UInt64Scalar>(value)); return GARROW_UINT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_uint64_scalar_get_value: * @scalar: A #GArrowUInt64Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ guint64 garrow_uint64_scalar_get_value(GArrowUInt64Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::UInt64Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowHalfFloatScalar, garrow_half_float_scalar, GARROW_TYPE_SCALAR) static void garrow_half_float_scalar_init(GArrowHalfFloatScalar *object) { } static void garrow_half_float_scalar_class_init(GArrowHalfFloatScalarClass *klass) { } /** * garrow_half_float_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowHalfFloatScalar. * * Since: 11.0.0 */ GArrowHalfFloatScalar * garrow_half_float_scalar_new(guint16 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::HalfFloatScalar>(value)); return GARROW_HALF_FLOAT_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_half_float_scalar_get_value: * @scalar: A #GArrowHalfFloatScalar. * * Returns: The value of this scalar. * * Since: 11.0.0 */ guint16 garrow_half_float_scalar_get_value(GArrowHalfFloatScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::HalfFloatScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowFloatScalar, garrow_float_scalar, GARROW_TYPE_SCALAR) static void garrow_float_scalar_init(GArrowFloatScalar *object) { } static void garrow_float_scalar_class_init(GArrowFloatScalarClass *klass) { } /** * garrow_float_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowFloatScalar. * * Since: 5.0.0 */ GArrowFloatScalar * garrow_float_scalar_new(gfloat value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::FloatScalar>(value)); return GARROW_FLOAT_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_float_scalar_get_value: * @scalar: A #GArrowFloatScalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gfloat garrow_float_scalar_get_value(GArrowFloatScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::FloatScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowDoubleScalar, garrow_double_scalar, GARROW_TYPE_SCALAR) static void garrow_double_scalar_init(GArrowDoubleScalar *object) { } static void garrow_double_scalar_class_init(GArrowDoubleScalarClass *klass) { } /** * garrow_double_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowDoubleScalar. * * Since: 5.0.0 */ GArrowDoubleScalar * garrow_double_scalar_new(gdouble value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::DoubleScalar>(value)); return GARROW_DOUBLE_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_double_scalar_get_value: * @scalar: A #GArrowDoubleScalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gdouble garrow_double_scalar_get_value(GArrowDoubleScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::DoubleScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } typedef struct GArrowBaseBinaryScalarPrivate_ { GArrowBuffer *value; } GArrowBaseBinaryScalarPrivate; enum { PROP_VALUE = 1, }; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseBinaryScalar, garrow_base_binary_scalar, GARROW_TYPE_SCALAR) #define GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowBaseBinaryScalarPrivate *>( \ garrow_base_binary_scalar_get_instance_private(GARROW_BASE_BINARY_SCALAR(obj))) static void garrow_base_binary_scalar_dispose(GObject *object) { auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_base_binary_scalar_parent_class)->dispose(object); } static void garrow_base_binary_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_BUFFER(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_base_binary_scalar_init(GArrowBaseBinaryScalar *object) { } static void garrow_base_binary_scalar_class_init(GArrowBaseBinaryScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_base_binary_scalar_dispose; gobject_class->set_property = garrow_base_binary_scalar_set_property; GParamSpec *spec; /** * GArrowBaseBinaryScalar:value: * * The value of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", GARROW_TYPE_BUFFER, static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS template <typename ArrowBinaryScalarType> GArrowScalar * garrow_base_binary_scalar_new(GArrowBuffer *value) { auto arrow_value = garrow_buffer_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<ArrowBinaryScalarType>(arrow_value)); return garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "value", value, NULL); } G_BEGIN_DECLS /** * garrow_base_binary_scalar_get_value: * @scalar: A #GArrowBaseBinaryScalar. * * Returns: (transfer none): The value of this scalar. * * Since: 5.0.0 */ GArrowBuffer * garrow_base_binary_scalar_get_value(GArrowBaseBinaryScalar *scalar) { auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { const auto arrow_scalar = std::static_pointer_cast<arrow::BaseBinaryScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); priv->value = garrow_buffer_new_raw( const_cast<std::shared_ptr<arrow::Buffer> *>(&(arrow_scalar->value))); } return priv->value; } G_DEFINE_TYPE(GArrowBinaryScalar, garrow_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_binary_scalar_init(GArrowBinaryScalar *object) { } static void garrow_binary_scalar_class_init(GArrowBinaryScalarClass *klass) { } /** * garrow_binary_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowBinaryScalar. * * Since: 5.0.0 */ GArrowBinaryScalar * garrow_binary_scalar_new(GArrowBuffer *value) { return GARROW_BINARY_SCALAR(garrow_base_binary_scalar_new<arrow::BinaryScalar>(value)); } G_DEFINE_TYPE(GArrowStringScalar, garrow_string_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_string_scalar_init(GArrowStringScalar *object) { } static void garrow_string_scalar_class_init(GArrowStringScalarClass *klass) { } /** * garrow_string_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowStringScalar. * * Since: 5.0.0 */ GArrowStringScalar * garrow_string_scalar_new(GArrowBuffer *value) { return GARROW_STRING_SCALAR(garrow_base_binary_scalar_new<arrow::StringScalar>(value)); } G_DEFINE_TYPE(GArrowLargeBinaryScalar, garrow_large_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_large_binary_scalar_init(GArrowLargeBinaryScalar *object) { } static void garrow_large_binary_scalar_class_init(GArrowLargeBinaryScalarClass *klass) { } /** * garrow_large_binary_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowLargeBinaryScalar. * * Since: 5.0.0 */ GArrowLargeBinaryScalar * garrow_large_binary_scalar_new(GArrowBuffer *value) { return GARROW_LARGE_BINARY_SCALAR( garrow_base_binary_scalar_new<arrow::LargeBinaryScalar>(value)); } G_DEFINE_TYPE(GArrowLargeStringScalar, garrow_large_string_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_large_string_scalar_init(GArrowLargeStringScalar *object) { } static void garrow_large_string_scalar_class_init(GArrowLargeStringScalarClass *klass) { } /** * garrow_large_string_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowLargeStringScalar. * * Since: 5.0.0 */ GArrowLargeStringScalar * garrow_large_string_scalar_new(GArrowBuffer *value) { return GARROW_LARGE_STRING_SCALAR( garrow_base_binary_scalar_new<arrow::LargeStringScalar>(value)); } G_DEFINE_TYPE(GArrowFixedSizeBinaryScalar, garrow_fixed_size_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_fixed_size_binary_scalar_init(GArrowFixedSizeBinaryScalar *object) { } static void garrow_fixed_size_binary_scalar_class_init(GArrowFixedSizeBinaryScalarClass *klass) { } /** * garrow_fixed_size_binary_scalar_new: * @data_type: A #GArrowFixedSizeBinaryDataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowFixedSizeBinaryScalar. * * Since: 5.0.0 */ GArrowFixedSizeBinaryScalar * garrow_fixed_size_binary_scalar_new(GArrowFixedSizeBinaryDataType *data_type, GArrowBuffer *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_buffer_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::FixedSizeBinaryScalar>(arrow_value, arrow_data_type)); return GARROW_FIXED_SIZE_BINARY_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL)); } G_DEFINE_TYPE(GArrowDate32Scalar, garrow_date32_scalar, GARROW_TYPE_SCALAR) static void garrow_date32_scalar_init(GArrowDate32Scalar *object) { } static void garrow_date32_scalar_class_init(GArrowDate32ScalarClass *klass) { } /** * garrow_date32_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowDate32Scalar. * * Since: 5.0.0 */ GArrowDate32Scalar * garrow_date32_scalar_new(gint32 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Date32Scalar>(value)); return GARROW_DATE32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_date32_scalar_get_value: * @scalar: A #GArrowDate32Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint32 garrow_date32_scalar_get_value(GArrowDate32Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Date32Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowDate64Scalar, garrow_date64_scalar, GARROW_TYPE_SCALAR) static void garrow_date64_scalar_init(GArrowDate64Scalar *object) { } static void garrow_date64_scalar_class_init(GArrowDate64ScalarClass *klass) { } /** * garrow_date64_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowDate64Scalar. * * Since: 5.0.0 */ GArrowDate64Scalar * garrow_date64_scalar_new(gint64 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>(std::make_shared<arrow::Date64Scalar>(value)); return GARROW_DATE64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_date64_scalar_get_value: * @scalar: A #GArrowDate64Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint64 garrow_date64_scalar_get_value(GArrowDate64Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Date64Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowTime32Scalar, garrow_time32_scalar, GARROW_TYPE_SCALAR) static void garrow_time32_scalar_init(GArrowTime32Scalar *object) { } static void garrow_time32_scalar_class_init(GArrowTime32ScalarClass *klass) { } /** * garrow_time32_scalar_new: * @data_type: A #GArrowTime32DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowTime32Scalar. * * Since: 5.0.0 */ GArrowTime32Scalar * garrow_time32_scalar_new(GArrowTime32DataType *data_type, gint32 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Time32Scalar>(value, arrow_data_type)); return GARROW_TIME32_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, NULL)); } /** * garrow_time32_scalar_get_value: * @scalar: A #GArrowTime32Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint32 garrow_time32_scalar_get_value(GArrowTime32Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Time32Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowTime64Scalar, garrow_time64_scalar, GARROW_TYPE_SCALAR) static void garrow_time64_scalar_init(GArrowTime64Scalar *object) { } static void garrow_time64_scalar_class_init(GArrowTime64ScalarClass *klass) { } /** * garrow_time64_scalar_new: * @data_type: A #GArrowTime64DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowTime64Scalar. * * Since: 5.0.0 */ GArrowTime64Scalar * garrow_time64_scalar_new(GArrowTime64DataType *data_type, gint64 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Time64Scalar>(value, arrow_data_type)); return GARROW_TIME64_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, NULL)); } /** * garrow_time64_scalar_get_value: * @scalar: A #GArrowTime64Scalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint64 garrow_time64_scalar_get_value(GArrowTime64Scalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::Time64Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowTimestampScalar, garrow_timestamp_scalar, GARROW_TYPE_SCALAR) static void garrow_timestamp_scalar_init(GArrowTimestampScalar *object) { } static void garrow_timestamp_scalar_class_init(GArrowTimestampScalarClass *klass) { } /** * garrow_timestamp_scalar_new: * @data_type: A #GArrowTimestampDataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowTimestampScalar. * * Since: 5.0.0 */ GArrowTimestampScalar * garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, gint64 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::TimestampScalar>(value, arrow_data_type)); return GARROW_TIMESTAMP_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, NULL)); } /** * garrow_timestamp_scalar_get_value: * @scalar: A #GArrowTimestampScalar. * * Returns: The value of this scalar. * * Since: 5.0.0 */ gint64 garrow_timestamp_scalar_get_value(GArrowTimestampScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::TimestampScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } G_DEFINE_TYPE(GArrowMonthIntervalScalar, garrow_month_interval_scalar, GARROW_TYPE_SCALAR) static void garrow_month_interval_scalar_init(GArrowMonthIntervalScalar *object) { } static void garrow_month_interval_scalar_class_init(GArrowMonthIntervalScalarClass *klass) { } /** * garrow_month_interval_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowMonthIntervalScalar. * * Since: 8.0.0 */ GArrowMonthIntervalScalar * garrow_month_interval_scalar_new(gint32 value) { auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::MonthIntervalScalar>(value)); return GARROW_MONTH_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_month_interval_scalar_get_value: * @scalar: A #GArrowMonthIntervalScalar. * * Returns: The value of this scalar. * * Since: 8.0.0 */ gint32 garrow_month_interval_scalar_get_value(GArrowMonthIntervalScalar *scalar) { const auto arrow_scalar = std::static_pointer_cast<arrow::MonthIntervalScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } typedef struct GArrowDayTimeIntervalScalarPrivate_ { GArrowDayMillisecond *value; } GArrowDayTimeIntervalScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowDayTimeIntervalScalar, garrow_day_time_interval_scalar, GARROW_TYPE_SCALAR) #define GARROW_DAY_TIME_INTERVAL_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowDayTimeIntervalScalarPrivate *>( \ garrow_day_time_interval_scalar_get_instance_private( \ GARROW_DAY_TIME_INTERVAL_SCALAR(obj))) static void garrow_day_time_interval_scalar_init(GArrowDayTimeIntervalScalar *object) { } static void garrow_day_time_interval_scalar_class_init(GArrowDayTimeIntervalScalarClass *klass) { } /** * garrow_day_time_interval_scalar_new: * @value: The value of GArrowDayMillisecond. * * Returns: A newly created #GArrowDayTimeIntervalScalar. * * Since: 8.0.0 */ GArrowDayTimeIntervalScalar * garrow_day_time_interval_scalar_new(GArrowDayMillisecond *value) { auto arrow_value = garrow_day_millisecond_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::DayTimeIntervalScalar>(*arrow_value)); return GARROW_DAY_TIME_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_day_time_interval_scalar_get_value: * @scalar: A #GArrowDayTimeIntervalScalar. * * Returns: (transfer none): The value of this scalar. * * Since: 8.0.0 */ GArrowDayMillisecond * garrow_day_time_interval_scalar_get_value(GArrowDayTimeIntervalScalar *scalar) { auto priv = GARROW_DAY_TIME_INTERVAL_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::DayTimeIntervalScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = arrow_scalar->value; priv->value = garrow_day_millisecond_new_raw(&arrow_value); } return priv->value; } typedef struct GArrowMonthDayNanoIntervalScalarPrivate_ { GArrowMonthDayNano *value; } GArrowMonthDayNanoIntervalScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowMonthDayNanoIntervalScalar, garrow_month_day_nano_interval_scalar, GARROW_TYPE_SCALAR) #define GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowMonthDayNanoIntervalScalarPrivate *>( \ garrow_month_day_nano_interval_scalar_get_instance_private( \ GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR(obj))) static void garrow_month_day_nano_interval_scalar_init(GArrowMonthDayNanoIntervalScalar *object) { } static void garrow_month_day_nano_interval_scalar_class_init( GArrowMonthDayNanoIntervalScalarClass *klass) { } /** * garrow_month_day_nano_interval_scalar_new: * @value: The value of GArrowMonthDayNano. * * Returns: A newly created #GArrowMonthDayNanoIntervalScalar. * * Since: 8.0.0 */ GArrowMonthDayNanoIntervalScalar * garrow_month_day_nano_interval_scalar_new(GArrowMonthDayNano *value) { auto arrow_value = garrow_month_day_nano_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::MonthDayNanoIntervalScalar>(*arrow_value)); return GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } /** * garrow_month_day_nano_interval_scalar_get_value: * @scalar: A #GArrowMonthDayNanoIntervalScalar. * * Returns: (transfer none): The value of this scalar. * * Since: 8.0.0 */ GArrowMonthDayNano * garrow_month_day_nano_interval_scalar_get_value(GArrowMonthDayNanoIntervalScalar *scalar) { auto priv = GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::MonthDayNanoIntervalScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); priv->value = garrow_month_day_nano_new_raw(&arrow_scalar->value); } return priv->value; } typedef struct GArrowDecimal32ScalarPrivate_ { GArrowDecimal32 *value; } GArrowDecimal32ScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal32Scalar, garrow_decimal32_scalar, GARROW_TYPE_SCALAR) #define GARROW_DECIMAL32_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowDecimal32ScalarPrivate *>( \ garrow_decimal32_scalar_get_instance_private(GARROW_DECIMAL32_SCALAR(obj))) static void garrow_decimal32_scalar_dispose(GObject *object) { auto priv = GARROW_DECIMAL32_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_decimal32_scalar_parent_class)->dispose(object); } static void garrow_decimal32_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_DECIMAL32_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_DECIMAL32(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_decimal32_scalar_init(GArrowDecimal32Scalar *object) { } static void garrow_decimal32_scalar_class_init(GArrowDecimal32ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_decimal32_scalar_dispose; gobject_class->set_property = garrow_decimal32_scalar_set_property; GParamSpec *spec; /** * GArrowDecimal32Scalar:value: * * The value of the scalar. * * Since: 19.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", garrow_decimal32_get_type(), static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } /** * garrow_decimal32_scalar_new: * @data_type: A #GArrowDecimal32DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowDecimal32Scalar. * * Since: 19.0.0 */ GArrowDecimal32Scalar * garrow_decimal32_scalar_new(GArrowDecimal32DataType *data_type, GArrowDecimal32 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal32_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Decimal32Scalar>(*arrow_value, arrow_data_type)); return GARROW_DECIMAL32_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL)); } /** * garrow_decimal32_scalar_get_value: * @scalar: A #GArrowDecimal32Scalar. * * Returns: (transfer none): The value of this scalar. * * Since: 19.0.0 */ GArrowDecimal32 * garrow_decimal32_scalar_get_value(GArrowDecimal32Scalar *scalar) { auto priv = GARROW_DECIMAL32_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::Decimal32Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared<arrow::Decimal32>(arrow_scalar->value); priv->value = garrow_decimal32_new_raw(&arrow_value); } return priv->value; } typedef struct GArrowDecimal64ScalarPrivate_ { GArrowDecimal64 *value; } GArrowDecimal64ScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal64Scalar, garrow_decimal64_scalar, GARROW_TYPE_SCALAR) #define GARROW_DECIMAL64_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowDecimal64ScalarPrivate *>( \ garrow_decimal64_scalar_get_instance_private(GARROW_DECIMAL64_SCALAR(obj))) static void garrow_decimal64_scalar_dispose(GObject *object) { auto priv = GARROW_DECIMAL64_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_decimal64_scalar_parent_class)->dispose(object); } static void garrow_decimal64_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_DECIMAL64_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_DECIMAL64(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_decimal64_scalar_init(GArrowDecimal64Scalar *object) { } static void garrow_decimal64_scalar_class_init(GArrowDecimal64ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_decimal64_scalar_dispose; gobject_class->set_property = garrow_decimal64_scalar_set_property; GParamSpec *spec; /** * GArrowDecimal64Scalar:value: * * The value of the scalar. * * Since: 19.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", garrow_decimal64_get_type(), static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } /** * garrow_decimal64_scalar_new: * @data_type: A #GArrowDecimal64DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowDecimal64Scalar. * * Since: 19.0.0 */ GArrowDecimal64Scalar * garrow_decimal64_scalar_new(GArrowDecimal64DataType *data_type, GArrowDecimal64 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal64_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Decimal64Scalar>(*arrow_value, arrow_data_type)); return GARROW_DECIMAL64_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL)); } /** * garrow_decimal64_scalar_get_value: * @scalar: A #GArrowDecimal64Scalar. * * Returns: (transfer none): The value of this scalar. * * Since: 19.0.0 */ GArrowDecimal64 * garrow_decimal64_scalar_get_value(GArrowDecimal64Scalar *scalar) { auto priv = GARROW_DECIMAL64_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::Decimal64Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared<arrow::Decimal64>(arrow_scalar->value); priv->value = garrow_decimal64_new_raw(&arrow_value); } return priv->value; } typedef struct GArrowDecimal128ScalarPrivate_ { GArrowDecimal128 *value; } GArrowDecimal128ScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal128Scalar, garrow_decimal128_scalar, GARROW_TYPE_SCALAR) #define GARROW_DECIMAL128_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowDecimal128ScalarPrivate *>( \ garrow_decimal128_scalar_get_instance_private(GARROW_DECIMAL128_SCALAR(obj))) static void garrow_decimal128_scalar_dispose(GObject *object) { auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_decimal128_scalar_parent_class)->dispose(object); } static void garrow_decimal128_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_DECIMAL128(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_decimal128_scalar_init(GArrowDecimal128Scalar *object) { } static void garrow_decimal128_scalar_class_init(GArrowDecimal128ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_decimal128_scalar_dispose; gobject_class->set_property = garrow_decimal128_scalar_set_property; GParamSpec *spec; /** * GArrowDecimal128Scalar:value: * * The value of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", garrow_decimal128_get_type(), static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } /** * garrow_decimal128_scalar_new: * @data_type: A #GArrowDecimal128DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowDecimal128Scalar. * * Since: 5.0.0 */ GArrowDecimal128Scalar * garrow_decimal128_scalar_new(GArrowDecimal128DataType *data_type, GArrowDecimal128 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal128_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Decimal128Scalar>(*arrow_value, arrow_data_type)); return GARROW_DECIMAL128_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL)); } /** * garrow_decimal128_scalar_get_value: * @scalar: A #GArrowDecimal128Scalar. * * Returns: (transfer none): The value of this scalar. * * Since: 5.0.0 */ GArrowDecimal128 * garrow_decimal128_scalar_get_value(GArrowDecimal128Scalar *scalar) { auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::Decimal128Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared<arrow::Decimal128>(arrow_scalar->value); priv->value = garrow_decimal128_new_raw(&arrow_value); } return priv->value; } typedef struct GArrowDecimal256ScalarPrivate_ { GArrowDecimal256 *value; } GArrowDecimal256ScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal256Scalar, garrow_decimal256_scalar, GARROW_TYPE_SCALAR) #define GARROW_DECIMAL256_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowDecimal256ScalarPrivate *>( \ garrow_decimal256_scalar_get_instance_private(GARROW_DECIMAL256_SCALAR(obj))) static void garrow_decimal256_scalar_dispose(GObject *object) { auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_decimal256_scalar_parent_class)->dispose(object); } static void garrow_decimal256_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_DECIMAL256(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_decimal256_scalar_init(GArrowDecimal256Scalar *object) { } static void garrow_decimal256_scalar_class_init(GArrowDecimal256ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_decimal256_scalar_dispose; gobject_class->set_property = garrow_decimal256_scalar_set_property; GParamSpec *spec; /** * GArrowDecimal256Scalar:value: * * The value of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", garrow_decimal256_get_type(), static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } /** * garrow_decimal256_scalar_new: * @data_type: A #GArrowDecimal256DataType for this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowDecimal256Scalar. * * Since: 5.0.0 */ GArrowDecimal256Scalar * garrow_decimal256_scalar_new(GArrowDecimal256DataType *data_type, GArrowDecimal256 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal256_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::Decimal256Scalar>(*arrow_value, arrow_data_type)); return GARROW_DECIMAL256_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL)); } /** * garrow_decimal256_scalar_get_value: * @scalar: A #GArrowDecimal256Scalar. * * Returns: (transfer none): The value of this scalar. * * Since: 5.0.0 */ GArrowDecimal256 * garrow_decimal256_scalar_get_value(GArrowDecimal256Scalar *scalar) { auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::Decimal256Scalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared<arrow::Decimal256>(arrow_scalar->value); priv->value = garrow_decimal256_new_raw(&arrow_value); } return priv->value; } typedef struct GArrowBaseListScalarPrivate_ { GArrowArray *value; } GArrowBaseListScalarPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseListScalar, garrow_base_list_scalar, GARROW_TYPE_SCALAR) #define GARROW_BASE_LIST_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowBaseListScalarPrivate *>( \ garrow_base_list_scalar_get_instance_private(GARROW_BASE_LIST_SCALAR(obj))) static void garrow_base_list_scalar_dispose(GObject *object) { auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_base_list_scalar_parent_class)->dispose(object); } static void garrow_base_list_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_ARRAY(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_base_list_scalar_init(GArrowBaseListScalar *object) { } static void garrow_base_list_scalar_class_init(GArrowBaseListScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_base_list_scalar_dispose; gobject_class->set_property = garrow_base_list_scalar_set_property; GParamSpec *spec; /** * GArrowBaseListScalar:value: * * The value of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", GARROW_TYPE_ARRAY, static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS template <typename ArrowListScalarType> GArrowScalar * garrow_base_list_scalar_new(GArrowArray *value) { auto arrow_value = garrow_array_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<ArrowListScalarType>(arrow_value)); auto data_type = garrow_array_get_value_data_type(value); auto scalar = garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL); g_object_unref(data_type); return scalar; } G_BEGIN_DECLS /** * garrow_base_list_scalar_get_value: * @scalar: A #GArrowBaseListScalar. * * Returns: (transfer none): The value of this scalar. * * Since: 5.0.0 */ GArrowArray * garrow_base_list_scalar_get_value(GArrowBaseListScalar *scalar) { auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { const auto arrow_scalar = std::static_pointer_cast<arrow::BaseListScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); priv->value = garrow_array_new_raw( const_cast<std::shared_ptr<arrow::Array> *>(&(arrow_scalar->value))); } return priv->value; } G_DEFINE_TYPE(GArrowListScalar, garrow_list_scalar, GARROW_TYPE_BASE_LIST_SCALAR) static void garrow_list_scalar_init(GArrowListScalar *object) { } static void garrow_list_scalar_class_init(GArrowListScalarClass *klass) { } /** * garrow_list_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowListScalar. * * Since: 5.0.0 */ GArrowListScalar * garrow_list_scalar_new(GArrowListArray *value) { return GARROW_LIST_SCALAR( garrow_base_list_scalar_new<arrow::ListScalar>(GARROW_ARRAY(value))); } G_DEFINE_TYPE(GArrowLargeListScalar, garrow_large_list_scalar, GARROW_TYPE_BASE_LIST_SCALAR) static void garrow_large_list_scalar_init(GArrowLargeListScalar *object) { } static void garrow_large_list_scalar_class_init(GArrowLargeListScalarClass *klass) { } /** * garrow_large_list_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowLargeListScalar. * * Since: 5.0.0 */ GArrowLargeListScalar * garrow_large_list_scalar_new(GArrowLargeListArray *value) { return GARROW_LARGE_LIST_SCALAR( garrow_base_list_scalar_new<arrow::LargeListScalar>(GARROW_ARRAY(value))); } G_DEFINE_TYPE(GArrowMapScalar, garrow_map_scalar, GARROW_TYPE_BASE_LIST_SCALAR) static void garrow_map_scalar_init(GArrowMapScalar *object) { } static void garrow_map_scalar_class_init(GArrowMapScalarClass *klass) { } /** * garrow_map_scalar_new: * @value: The value of this scalar. * * Returns: A newly created #GArrowMapScalar. * * Since: 5.0.0 */ GArrowMapScalar * garrow_map_scalar_new(GArrowStructArray *value) { return GARROW_MAP_SCALAR( garrow_base_list_scalar_new<arrow::MapScalar>(GARROW_ARRAY(value))); } typedef struct GArrowStructScalarPrivate_ { GList *value; } GArrowStructScalarPrivate; G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructScalar, garrow_struct_scalar, GARROW_TYPE_SCALAR) #define GARROW_STRUCT_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowStructScalarPrivate *>( \ garrow_struct_scalar_get_instance_private(GARROW_STRUCT_SCALAR(obj))) static void garrow_struct_scalar_dispose(GObject *object) { auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(object); if (priv->value) { g_list_free_full(priv->value, g_object_unref); priv->value = NULL; } G_OBJECT_CLASS(garrow_struct_scalar_parent_class)->dispose(object); } static void garrow_struct_scalar_init(GArrowStructScalar *object) { } static void garrow_struct_scalar_class_init(GArrowStructScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_struct_scalar_dispose; } /** * garrow_struct_scalar_new: * @data_type: A #GArrowStructDataType for this scalar. * @value: (element-type GArrowScalar): The value of this scalar. * * Returns: A newly created #GArrowDecimal256Scalar. * * Since: 5.0.0 */ GArrowStructScalar * garrow_struct_scalar_new(GArrowStructDataType *data_type, GList *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); std::vector<std::shared_ptr<arrow::Scalar>> arrow_value; for (GList *node = value; node; node = node->next) { auto field = GARROW_SCALAR(node->data); auto arrow_field = garrow_scalar_get_raw(field); arrow_value.push_back(arrow_field); } auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::StructScalar>(arrow_value, arrow_data_type)); auto scalar = GARROW_STRUCT_SCALAR(garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, NULL)); auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar); priv->value = g_list_copy_deep(value, reinterpret_cast<GCopyFunc>(g_object_ref), NULL); return scalar; } /** * garrow_struct_scalar_get_value: * @scalar: A #GArrowStructScalar. * * Returns: (element-type GArrowScalar) (transfer none): * The value of this scalar. * * Since: 5.0.0 */ GList * garrow_struct_scalar_get_value(GArrowStructScalar *scalar) { auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { auto arrow_scalar = std::static_pointer_cast<arrow::StructScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); for (auto arrow_element : arrow_scalar->value) { priv->value = g_list_prepend(priv->value, garrow_scalar_new_raw(&arrow_element)); } priv->value = g_list_reverse(priv->value); } return priv->value; } typedef struct GArrowUnionScalarPrivate_ { GArrowScalar *value; } GArrowUnionScalarPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowUnionScalar, garrow_union_scalar, GARROW_TYPE_SCALAR) #define GARROW_UNION_SCALAR_GET_PRIVATE(obj) \ static_cast<GArrowUnionScalarPrivate *>( \ garrow_union_scalar_get_instance_private(GARROW_UNION_SCALAR(obj))) static void garrow_union_scalar_dispose(GObject *object) { auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(object); if (priv->value) { g_object_unref(priv->value); priv->value = NULL; } G_OBJECT_CLASS(garrow_union_scalar_parent_class)->dispose(object); } static void garrow_union_scalar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(object); switch (prop_id) { case PROP_VALUE: priv->value = GARROW_SCALAR(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void garrow_union_scalar_init(GArrowUnionScalar *object) { } static void garrow_union_scalar_class_init(GArrowUnionScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_union_scalar_dispose; gobject_class->set_property = garrow_union_scalar_set_property; GParamSpec *spec; /** * GArrowUnionScalar:value: * * The value of the scalar. * * Since: 5.0.0 */ spec = g_param_spec_object( "value", "Value", "The value of the scalar", GARROW_TYPE_SCALAR, static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS template <typename ArrowUnionScalarType> GArrowScalar * garrow_union_scalar_new(GArrowDataType *data_type, gint8 type_code, GArrowScalar *value) { auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_value = garrow_scalar_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<ArrowUnionScalarType>(arrow_value, type_code, arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL); return scalar; } G_BEGIN_DECLS /** * garrow_union_scalar_get_type_code: * @scalar: A #GArrowUnionScalar. * * Returns: The type code of this scalar. * * Since: 6.0.0 */ gint8 garrow_union_scalar_get_type_code(GArrowUnionScalar *scalar) { const auto &arrow_scalar = std::static_pointer_cast<arrow::UnionScalar>( garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->type_code; } /** * garrow_union_scalar_get_value: * @scalar: A #GArrowUnionScalar. * * Returns: (transfer none): The value of this scalar. * * Since: 5.0.0 */ GArrowScalar * garrow_union_scalar_get_value(GArrowUnionScalar *scalar) { auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(scalar); return priv->value; } G_DEFINE_TYPE(GArrowSparseUnionScalar, garrow_sparse_union_scalar, GARROW_TYPE_UNION_SCALAR) static void garrow_sparse_union_scalar_init(GArrowSparseUnionScalar *object) { } static void garrow_sparse_union_scalar_class_init(GArrowSparseUnionScalarClass *klass) { } /** * garrow_sparse_union_scalar_new: * @data_type: A #GArrowSparseUnionDataType for this scalar. * @type_code: The type code of this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowSparseUnionScalar. * * Since: 5.0.0 */ GArrowSparseUnionScalar * garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type, gint8 type_code, GArrowScalar *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto &arrow_type_codes = std::dynamic_pointer_cast<arrow::SparseUnionType>(arrow_data_type)->type_codes(); auto arrow_value = garrow_scalar_get_raw(value); arrow::SparseUnionScalar::ValueType arrow_field_values; for (int i = 0; i < arrow_data_type->num_fields(); ++i) { if (arrow_type_codes[i] == type_code) { arrow_field_values.emplace_back(arrow_value); } else { arrow_field_values.emplace_back( arrow::MakeNullScalar(arrow_data_type->field(i)->type())); } } auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::SparseUnionScalar>(arrow_field_values, type_code, arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL); return GARROW_SPARSE_UNION_SCALAR(scalar); } G_DEFINE_TYPE(GArrowDenseUnionScalar, garrow_dense_union_scalar, GARROW_TYPE_UNION_SCALAR) static void garrow_dense_union_scalar_init(GArrowDenseUnionScalar *object) { } static void garrow_dense_union_scalar_class_init(GArrowDenseUnionScalarClass *klass) { } /** * garrow_dense_union_scalar_new: * @data_type: A #GArrowDenseUnionDataType for this scalar. * @type_code: The type code of this scalar. * @value: The value of this scalar. * * Returns: A newly created #GArrowDenseUnionScalar. * * Since: 5.0.0 */ GArrowDenseUnionScalar * garrow_dense_union_scalar_new(GArrowDenseUnionDataType *data_type, gint8 type_code, GArrowScalar *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_scalar_get_raw(value); auto arrow_scalar = std::static_pointer_cast<arrow::Scalar>( std::make_shared<arrow::DenseUnionScalar>(arrow_value, type_code, arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, "scalar", &arrow_scalar, "data-type", data_type, "value", value, NULL); return GARROW_DENSE_UNION_SCALAR(scalar); } G_DEFINE_TYPE(GArrowExtensionScalar, garrow_extension_scalar, GARROW_TYPE_SCALAR) static void garrow_extension_scalar_init(GArrowExtensionScalar *object) { } static void garrow_extension_scalar_class_init(GArrowExtensionScalarClass *klass) { } G_END_DECLS GArrowScalar * garrow_scalar_new_raw(std::shared_ptr<arrow::Scalar> *arrow_scalar) { return garrow_scalar_new_raw(arrow_scalar, "scalar", arrow_scalar, NULL); } GArrowScalar * garrow_scalar_new_raw(std::shared_ptr<arrow::Scalar> *arrow_scalar, const gchar *first_property_name, ...) { va_list args; va_start(args, first_property_name); auto array = garrow_scalar_new_raw_valist(arrow_scalar, first_property_name, args); va_end(args); return array; } GArrowScalar * garrow_scalar_new_raw_valist(std::shared_ptr<arrow::Scalar> *arrow_scalar, const gchar *first_property_name, va_list args) { GType type; GArrowScalar *scalar; switch ((*arrow_scalar)->type->id()) { case arrow::Type::type::NA: type = GARROW_TYPE_NULL_SCALAR; break; case arrow::Type::type::BOOL: type = GARROW_TYPE_BOOLEAN_SCALAR; break; case arrow::Type::type::INT8: type = GARROW_TYPE_INT8_SCALAR; break; case arrow::Type::type::INT16: type = GARROW_TYPE_INT16_SCALAR; break; case arrow::Type::type::INT32: type = GARROW_TYPE_INT32_SCALAR; break; case arrow::Type::type::INT64: type = GARROW_TYPE_INT64_SCALAR; break; case arrow::Type::type::UINT8: type = GARROW_TYPE_UINT8_SCALAR; break; case arrow::Type::type::UINT16: type = GARROW_TYPE_UINT16_SCALAR; break; case arrow::Type::type::UINT32: type = GARROW_TYPE_UINT32_SCALAR; break; case arrow::Type::type::UINT64: type = GARROW_TYPE_UINT64_SCALAR; break; case arrow::Type::type::HALF_FLOAT: type = GARROW_TYPE_HALF_FLOAT_SCALAR; break; case arrow::Type::type::FLOAT: type = GARROW_TYPE_FLOAT_SCALAR; break; case arrow::Type::type::DOUBLE: type = GARROW_TYPE_DOUBLE_SCALAR; break; case arrow::Type::type::BINARY: type = GARROW_TYPE_BINARY_SCALAR; break; case arrow::Type::type::STRING: type = GARROW_TYPE_STRING_SCALAR; break; case arrow::Type::type::LARGE_BINARY: type = GARROW_TYPE_LARGE_BINARY_SCALAR; break; case arrow::Type::type::LARGE_STRING: type = GARROW_TYPE_LARGE_STRING_SCALAR; break; case arrow::Type::type::FIXED_SIZE_BINARY: type = GARROW_TYPE_FIXED_SIZE_BINARY_SCALAR; break; case arrow::Type::type::DATE32: type = GARROW_TYPE_DATE32_SCALAR; break; case arrow::Type::type::DATE64: type = GARROW_TYPE_DATE64_SCALAR; break; case arrow::Type::type::TIME32: type = GARROW_TYPE_TIME32_SCALAR; break; case arrow::Type::type::TIME64: type = GARROW_TYPE_TIME64_SCALAR; break; case arrow::Type::type::TIMESTAMP: type = GARROW_TYPE_TIMESTAMP_SCALAR; break; case arrow::Type::type::INTERVAL_MONTHS: type = GARROW_TYPE_MONTH_INTERVAL_SCALAR; break; case arrow::Type::type::INTERVAL_DAY_TIME: type = GARROW_TYPE_DAY_TIME_INTERVAL_SCALAR; break; case arrow::Type::type::INTERVAL_MONTH_DAY_NANO: type = GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_SCALAR; break; case arrow::Type::type::DECIMAL32: type = GARROW_TYPE_DECIMAL32_SCALAR; break; case arrow::Type::type::DECIMAL64: type = GARROW_TYPE_DECIMAL64_SCALAR; break; case arrow::Type::type::DECIMAL128: type = GARROW_TYPE_DECIMAL128_SCALAR; break; case arrow::Type::type::DECIMAL256: type = GARROW_TYPE_DECIMAL256_SCALAR; break; case arrow::Type::type::LIST: type = GARROW_TYPE_LIST_SCALAR; break; case arrow::Type::type::LARGE_LIST: type = GARROW_TYPE_LARGE_LIST_SCALAR; break; /* case arrow::Type::type::FIXED_SIZE_LIST: type = GARROW_TYPE_FIXED_SIZE_LIST_SCALAR; break; */ case arrow::Type::type::MAP: type = GARROW_TYPE_MAP_SCALAR; break; case arrow::Type::type::STRUCT: type = GARROW_TYPE_STRUCT_SCALAR; break; case arrow::Type::type::SPARSE_UNION: type = GARROW_TYPE_SPARSE_UNION_SCALAR; break; case arrow::Type::type::DENSE_UNION: type = GARROW_TYPE_DENSE_UNION_SCALAR; break; case arrow::Type::type::EXTENSION: type = GARROW_TYPE_EXTENSION_SCALAR; break; default: type = GARROW_TYPE_SCALAR; break; } scalar = GARROW_SCALAR(g_object_new_valist(type, first_property_name, args)); return scalar; } std::shared_ptr<arrow::Scalar> garrow_scalar_get_raw(GArrowScalar *scalar) { auto priv = GARROW_SCALAR_GET_PRIVATE(scalar); return priv->scalar; }