]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/c_glib/arrow-glib/scalar.cpp
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / c_glib / arrow-glib / scalar.cpp
CommitLineData
1d09f67e
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#include <arrow-glib/basic-array.hpp>
21#include <arrow-glib/buffer.hpp>
22#include <arrow-glib/data-type.hpp>
23#include <arrow-glib/decimal.hpp>
24#include <arrow-glib/error.hpp>
25#include <arrow-glib/scalar.hpp>
26
27G_BEGIN_DECLS
28
29/**
30 * SECTION: scalar
31 * @section_id: scalar-classes
32 * @title: Scalar classes
33 * @include: arrow-glib/arrow-glib.h
34 *
35 * #GArrowScalar is a base class for all scalar classes such as
36 * #GArrowBooleanScalar.
37 *
38 * #GArrowNullScalar is a class for a null scalar.
39 *
40 * #GArrowBooleanScalar is a class for a boolean scalar.
41 *
42 * #GArrowInt8Scalar is a class for a 8-bit integer scalar.
43 *
44 * #GArrowInt16Scalar is a class for a 16-bit integer scalar.
45 *
46 * #GArrowInt32Scalar is a class for a 32-bit integer scalar.
47 *
48 * #GArrowInt64Scalar is a class for a 64-bit integer scalar.
49 *
50 * #GArrowUInt8Scalar is a class for a 8-bit unsigned integer scalar.
51 *
52 * #GArrowUInt16Scalar is a class for a 16-bit unsigned integer scalar.
53 *
54 * #GArrowUInt32Scalar is a class for a 32-bit unsigned integer scalar.
55 *
56 * #GArrowUInt64Scalar is a class for a 64-bit unsigned integer scalar.
57 *
58 * #GArrowFloatScalar is a class for a 32-bit floating point scalar.
59 *
60 * #GArrowDoubleScalar is a class for a 64-bit floating point scalar.
61 *
62 * #GArrowBaseBinaryScalar is a base class for all binary and string
63 * scalar classes such as #GArrowBinaryScalar.
64 *
65 * #GArrowBinaryScalar is a class for a binary scalar.
66 *
67 * #GArrowStringScalar is a class for an UTF-8 encoded string scalar.
68 *
69 * #GArrowLargeBinaryScalar is a class for a 64-bit offsets binary
70 * scalar.
71 *
72 * #GArrowLargeStringScalar is a class for a 64-bit offsets UTF-8
73 * encoded string scalar.
74 *
75 * #GArrowFixedSizeBinaryScalar is a class for a fixed-size binary
76 * scalar.
77 *
78 * #GArrowDate32Scalar is a class for the number of days since UNIX
79 * epoch in a 32-bit signed integer scalar.
80 *
81 * #GArrowDate64Scalar is a class for the number of milliseconds
82 * since UNIX epoch in a 64-bit signed integer scalar.
83 *
84 * #GArrowTime32Scalar is a class for the number of seconds or
85 * milliseconds since midnight in a 32-bit signed integer scalar.
86 *
87 * #GArrowTime64Scalar is a class for the number of microseconds or
88 * nanoseconds since midnight in a 64-bit signed integer scalar.
89 *
90 * #GArrowTimestampScalar is a class for the number of
91 * seconds/milliseconds/microseconds/nanoseconds since UNIX epoch in
92 * a 64-bit signed integer scalar.
93 *
94 * #GArrowDecimal128Scalar is a class for a 128-bit decimal scalar.
95 *
96 * #GArrowDecimal256Scalar is a class for a 256-bit decimal scalar.
97 *
98 * #GArrowBaseListScalar is a base class for all list scalar classes
99 * such as #GArrowListScalar.
100 *
101 * #GArrowListScalar is a class for a list scalar.
102 *
103 * #GArrowLargeListScalar is a class for a large list scalar.
104 *
105 * #GArrowMapScalar is a class for a map list scalar.
106 *
107 * #GArrowStructScalar is a class for a struct list scalar.
108 *
109 * #GArrowUnionScalar is a base class for all union scalar classes
110 * such as #GArrowSparseUnionScalar.
111 *
112 * #GArrowSparseUnionScalar is a class for a sparse union scalar.
113 *
114 * #GArrowDenseUnionScalar is a class for a dense union scalar.
115 *
116 * #GArrowExtensionScalar is a base class for user-defined extension
117 * scalar.
118 */
119
120typedef struct GArrowScalarPrivate_ {
121 std::shared_ptr<arrow::Scalar> scalar;
122 GArrowDataType *data_type;
123} GArrowScalarPrivate;
124
125enum {
126 PROP_SCALAR = 1,
127 PROP_DATA_TYPE,
128};
129
130G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowScalar,
131 garrow_scalar,
132 G_TYPE_OBJECT)
133
134#define GARROW_SCALAR_GET_PRIVATE(obj) \
135 static_cast<GArrowScalarPrivate *>( \
136 garrow_scalar_get_instance_private( \
137 GARROW_SCALAR(obj)))
138
139static void
140garrow_scalar_dispose(GObject *object)
141{
142 auto priv = GARROW_SCALAR_GET_PRIVATE(object);
143
144 if (priv->data_type) {
145 g_object_unref(priv->data_type);
146 priv->data_type = NULL;
147 }
148
149 G_OBJECT_CLASS(garrow_scalar_parent_class)->dispose(object);
150}
151
152static void
153garrow_scalar_finalize(GObject *object)
154{
155 auto priv = GARROW_SCALAR_GET_PRIVATE(object);
156
157 priv->scalar.~shared_ptr();
158
159 G_OBJECT_CLASS(garrow_scalar_parent_class)->finalize(object);
160}
161
162static void
163garrow_scalar_set_property(GObject *object,
164 guint prop_id,
165 const GValue *value,
166 GParamSpec *pspec)
167{
168 auto priv = GARROW_SCALAR_GET_PRIVATE(object);
169
170 switch (prop_id) {
171 case PROP_SCALAR:
172 priv->scalar =
173 *static_cast<std::shared_ptr<arrow::Scalar> *>(g_value_get_pointer(value));
174 break;
175 case PROP_DATA_TYPE:
176 priv->data_type = GARROW_DATA_TYPE(g_value_dup_object(value));
177 break;
178 default:
179 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
180 break;
181 }
182}
183
184static void
185garrow_scalar_init(GArrowScalar *object)
186{
187 auto priv = GARROW_SCALAR_GET_PRIVATE(object);
188 new(&priv->scalar) std::shared_ptr<arrow::Scalar>;
189}
190
191static void
192garrow_scalar_class_init(GArrowScalarClass *klass)
193{
194 auto gobject_class = G_OBJECT_CLASS(klass);
195
196 gobject_class->dispose = garrow_scalar_dispose;
197 gobject_class->finalize = garrow_scalar_finalize;
198 gobject_class->set_property = garrow_scalar_set_property;
199
200 GParamSpec *spec;
201 spec = g_param_spec_pointer("scalar",
202 "Scalar",
203 "The raw std::shared<arrow::Scalar> *",
204 static_cast<GParamFlags>(G_PARAM_WRITABLE |
205 G_PARAM_CONSTRUCT_ONLY));
206 g_object_class_install_property(gobject_class, PROP_SCALAR, spec);
207
208 /**
209 * GArrowScalar:data-type:
210 *
211 * The data type of the scalar.
212 *
213 * Since: 5.0.0
214 */
215 spec = g_param_spec_object("data-type",
216 "Data type",
217 "The data type of the scalar",
218 GARROW_TYPE_DATA_TYPE,
219 static_cast<GParamFlags>(G_PARAM_WRITABLE |
220 G_PARAM_CONSTRUCT_ONLY));
221 g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec);
222}
223
224/**
225 * garrow_scalar_parse:
226 * @data_type: A #GArrowDataType for the parsed scalar.
227 * @data: (array length=size): Data to be parsed.
228 * @size: The number of bytes of the data.
229 * @error: (nullable): Return location for a #GError or %NULL.
230 *
231 * Returns: (nullable) (transfer full):
232 * A newly created #GArrowScalar if the data is parsed successfully,
233 * %NULL otherwise.
234 *
235 * Since: 5.0.0
236 */
237GArrowScalar *
238garrow_scalar_parse(GArrowDataType *data_type,
239 const guint8 *data,
240 gsize size,
241 GError **error)
242{
243 const auto arrow_data_type = garrow_data_type_get_raw(data_type);
244 auto arrow_data =
245 arrow::util::string_view(reinterpret_cast<const char *>(data),
246 size);
247 auto arrow_scalar_result = arrow::Scalar::Parse(arrow_data_type, arrow_data);
248 if (garrow::check(error, arrow_scalar_result, "[scalar][parse]")) {
249 auto arrow_scalar = *arrow_scalar_result;
250 return garrow_scalar_new_raw(&arrow_scalar,
251 "scalar", &arrow_scalar,
252 "data-type", data_type,
253 NULL);
254 } else {
255 return NULL;
256 }
257}
258
259/**
260 * garrow_scalar_get_data_type:
261 * @scalar: A #GArrowScalar.
262 *
263 * Returns: (transfer none): The #GArrowDataType for the scalar.
264 *
265 * Since: 5.0.0
266 */
267GArrowDataType *
268garrow_scalar_get_data_type(GArrowScalar *scalar)
269{
270 auto priv = GARROW_SCALAR_GET_PRIVATE(scalar);
271 if (!priv->data_type) {
272 priv->data_type = garrow_data_type_new_raw(&(priv->scalar->type));
273 }
274 return priv->data_type;
275}
276
277/**
278 * garrow_scalar_is_valid:
279 * @scalar: A #GArrowScalar.
280 *
281 * Returns: %TRUE if the scalar is valid, %FALSE otherwise.
282 *
283 * Since: 5.0.0
284 */
285gboolean
286garrow_scalar_is_valid(GArrowScalar *scalar)
287{
288 const auto arrow_scalar = garrow_scalar_get_raw(scalar);
289 return arrow_scalar->is_valid;
290}
291
292/**
293 * garrow_scalar_equal:
294 * @scalar: A #GArrowScalar.
295 * @other_scalar: A #GArrowScalar to be compared.
296 *
297 * Returns: %TRUE if both of them have the same data, %FALSE
298 * otherwise.
299 *
300 * Since: 5.0.0
301 */
302gboolean
303garrow_scalar_equal(GArrowScalar *scalar,
304 GArrowScalar *other_scalar)
305{
306 return garrow_scalar_equal_options(scalar, other_scalar, NULL);
307}
308
309/**
310 * garrow_scalar_equal_options:
311 * @scalar: A #GArrowScalar.
312 * @other_scalar: A #GArrowScalar to be compared.
313 * @options: (nullable): A #GArrowEqualOptions.
314 *
315 * Returns: %TRUE if both of them have the same data, %FALSE
316 * otherwise.
317 *
318 * Since: 5.0.0
319 */
320gboolean
321garrow_scalar_equal_options(GArrowScalar *scalar,
322 GArrowScalar *other_scalar,
323 GArrowEqualOptions *options)
324{
325 const auto arrow_scalar = garrow_scalar_get_raw(scalar);
326 const auto arrow_other_scalar = garrow_scalar_get_raw(other_scalar);
327 if (options) {
328 auto is_approx = garrow_equal_options_is_approx(options);
329 const auto arrow_options = garrow_equal_options_get_raw(options);
330 if (is_approx) {
331 return arrow_scalar->ApproxEquals(*arrow_other_scalar, *arrow_options);
332 } else {
333 return arrow_scalar->Equals(arrow_other_scalar, *arrow_options);
334 }
335 } else {
336 return arrow_scalar->Equals(arrow_other_scalar);
337 }
338}
339
340/**
341 * garrow_scalar_to_string:
342 * @scalar: A #GArrowScalar.
343 *
344 * Returns: The string representation of the scalar.
345 *
346 * It should be freed with g_free() when no longer needed.
347 *
348 * Since: 5.0.0
349 */
350gchar *
351garrow_scalar_to_string(GArrowScalar *scalar)
352{
353 const auto arrow_scalar = garrow_scalar_get_raw(scalar);
354 return g_strdup(arrow_scalar->ToString().c_str());
355}
356
357/**
358 * garrow_scalar_cast:
359 * @scalar: A #GArrowScalar.
360 * @data_type: A #GArrowDataType of the casted scalar.
361 * @options: (nullable): A #GArrowCastOptions.
362 * @error: (nullable): Return location for a #GError or %NULL.
363 *
364 * Returns: (nullable) (transfer full):
365 * A newly created casted scalar on success, %NULL on error.
366 *
367 * Since: 5.0.0
368 */
369GArrowScalar *
370garrow_scalar_cast(GArrowScalar *scalar,
371 GArrowDataType *data_type,
372 GArrowCastOptions *options,
373 GError **error)
374{
375 const auto arrow_scalar = garrow_scalar_get_raw(scalar);
376 const auto arrow_data_type = garrow_data_type_get_raw(data_type);
377 auto arrow_casted_scalar_result = arrow_scalar->CastTo(arrow_data_type);
378 if (garrow::check(error, arrow_casted_scalar_result, "[scalar][cast]")) {
379 auto arrow_casted_scalar = *arrow_casted_scalar_result;
380 return garrow_scalar_new_raw(&arrow_casted_scalar,
381 "scalar", &arrow_casted_scalar,
382 "data-type", data_type,
383 NULL);
384 } else {
385 return NULL;
386 }
387}
388
389
390G_DEFINE_TYPE(GArrowNullScalar,
391 garrow_null_scalar,
392 GARROW_TYPE_SCALAR)
393
394static void
395garrow_null_scalar_init(GArrowNullScalar *object)
396{
397}
398
399static void
400garrow_null_scalar_class_init(GArrowNullScalarClass *klass)
401{
402}
403
404/**
405 * garrow_null_scalar_new:
406 *
407 * Returns: A newly created #GArrowNullScalar.
408 *
409 * Since: 5.0.0
410 */
411GArrowNullScalar *
412garrow_null_scalar_new(void)
413{
414 auto arrow_scalar =
415 std::static_pointer_cast<arrow::Scalar>(
416 std::make_shared<arrow::NullScalar>());
417 return GARROW_NULL_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
418}
419
420
421G_DEFINE_TYPE(GArrowBooleanScalar,
422 garrow_boolean_scalar,
423 GARROW_TYPE_SCALAR)
424
425static void
426garrow_boolean_scalar_init(GArrowBooleanScalar *object)
427{
428}
429
430static void
431garrow_boolean_scalar_class_init(GArrowBooleanScalarClass *klass)
432{
433}
434
435/**
436 * garrow_boolean_scalar_new:
437 * @value: The value of this scalar.
438 *
439 * Returns: A newly created #GArrowBooleanScalar.
440 *
441 * Since: 5.0.0
442 */
443GArrowBooleanScalar *
444garrow_boolean_scalar_new(gboolean value)
445{
446 auto arrow_scalar =
447 std::static_pointer_cast<arrow::Scalar>(
448 std::make_shared<arrow::BooleanScalar>(value));
449 return GARROW_BOOLEAN_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
450}
451
452/**
453 * garrow_boolean_scalar_get_value:
454 * @scalar: A #GArrowBooleanScalar.
455 *
456 * Returns: The value of this scalar.
457 *
458 * Since: 5.0.0
459 */
460gboolean
461garrow_boolean_scalar_get_value(GArrowBooleanScalar *scalar)
462{
463 const auto arrow_scalar =
464 std::static_pointer_cast<arrow::BooleanScalar>(
465 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
466 return arrow_scalar->value;
467}
468
469
470G_DEFINE_TYPE(GArrowInt8Scalar,
471 garrow_int8_scalar,
472 GARROW_TYPE_SCALAR)
473
474static void
475garrow_int8_scalar_init(GArrowInt8Scalar *object)
476{
477}
478
479static void
480garrow_int8_scalar_class_init(GArrowInt8ScalarClass *klass)
481{
482}
483
484/**
485 * garrow_int8_scalar_new:
486 * @value: The value of this scalar.
487 *
488 * Returns: A newly created #GArrowInt8Scalar.
489 *
490 * Since: 5.0.0
491 */
492GArrowInt8Scalar *
493garrow_int8_scalar_new(gint8 value)
494{
495 auto arrow_scalar =
496 std::static_pointer_cast<arrow::Scalar>(
497 std::make_shared<arrow::Int8Scalar>(value));
498 return GARROW_INT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
499}
500
501/**
502 * garrow_int8_scalar_get_value:
503 * @scalar: A #GArrowInt8Scalar.
504 *
505 * Returns: The value of this scalar.
506 *
507 * Since: 5.0.0
508 */
509gint8
510garrow_int8_scalar_get_value(GArrowInt8Scalar *scalar)
511{
512 const auto arrow_scalar =
513 std::static_pointer_cast<arrow::Int8Scalar>(
514 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
515 return arrow_scalar->value;
516}
517
518
519G_DEFINE_TYPE(GArrowInt16Scalar,
520 garrow_int16_scalar,
521 GARROW_TYPE_SCALAR)
522
523static void
524garrow_int16_scalar_init(GArrowInt16Scalar *object)
525{
526}
527
528static void
529garrow_int16_scalar_class_init(GArrowInt16ScalarClass *klass)
530{
531}
532
533/**
534 * garrow_int16_scalar_new:
535 * @value: The value of this scalar.
536 *
537 * Returns: A newly created #GArrowInt16Scalar.
538 *
539 * Since: 5.0.0
540 */
541GArrowInt16Scalar *
542garrow_int16_scalar_new(gint16 value)
543{
544 auto arrow_scalar =
545 std::static_pointer_cast<arrow::Scalar>(
546 std::make_shared<arrow::Int16Scalar>(value));
547 return GARROW_INT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
548}
549
550/**
551 * garrow_int16_scalar_get_value:
552 * @scalar: A #GArrowInt16Scalar.
553 *
554 * Returns: The value of this scalar.
555 *
556 * Since: 5.0.0
557 */
558gint16
559garrow_int16_scalar_get_value(GArrowInt16Scalar *scalar)
560{
561 const auto arrow_scalar =
562 std::static_pointer_cast<arrow::Int16Scalar>(
563 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
564 return arrow_scalar->value;
565}
566
567
568G_DEFINE_TYPE(GArrowInt32Scalar,
569 garrow_int32_scalar,
570 GARROW_TYPE_SCALAR)
571
572static void
573garrow_int32_scalar_init(GArrowInt32Scalar *object)
574{
575}
576
577static void
578garrow_int32_scalar_class_init(GArrowInt32ScalarClass *klass)
579{
580}
581
582/**
583 * garrow_int32_scalar_new:
584 * @value: The value of this scalar.
585 *
586 * Returns: A newly created #GArrowInt32Scalar.
587 *
588 * Since: 5.0.0
589 */
590GArrowInt32Scalar *
591garrow_int32_scalar_new(gint32 value)
592{
593 auto arrow_scalar =
594 std::static_pointer_cast<arrow::Scalar>(
595 std::make_shared<arrow::Int32Scalar>(value));
596 return GARROW_INT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
597}
598
599/**
600 * garrow_int32_scalar_get_value:
601 * @scalar: A #GArrowInt32Scalar.
602 *
603 * Returns: The value of this scalar.
604 *
605 * Since: 5.0.0
606 */
607gint32
608garrow_int32_scalar_get_value(GArrowInt32Scalar *scalar)
609{
610 const auto arrow_scalar =
611 std::static_pointer_cast<arrow::Int32Scalar>(
612 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
613 return arrow_scalar->value;
614}
615
616
617G_DEFINE_TYPE(GArrowInt64Scalar,
618 garrow_int64_scalar,
619 GARROW_TYPE_SCALAR)
620
621static void
622garrow_int64_scalar_init(GArrowInt64Scalar *object)
623{
624}
625
626static void
627garrow_int64_scalar_class_init(GArrowInt64ScalarClass *klass)
628{
629}
630
631/**
632 * garrow_int64_scalar_new:
633 * @value: The value of this scalar.
634 *
635 * Returns: A newly created #GArrowInt64Scalar.
636 *
637 * Since: 5.0.0
638 */
639GArrowInt64Scalar *
640garrow_int64_scalar_new(gint64 value)
641{
642 auto arrow_scalar =
643 std::static_pointer_cast<arrow::Scalar>(
644 std::make_shared<arrow::Int64Scalar>(value));
645 return GARROW_INT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
646}
647
648/**
649 * garrow_int64_scalar_get_value:
650 * @scalar: A #GArrowInt64Scalar.
651 *
652 * Returns: The value of this scalar.
653 *
654 * Since: 5.0.0
655 */
656gint64
657garrow_int64_scalar_get_value(GArrowInt64Scalar *scalar)
658{
659 const auto arrow_scalar =
660 std::static_pointer_cast<arrow::Int64Scalar>(
661 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
662 return arrow_scalar->value;
663}
664
665
666G_DEFINE_TYPE(GArrowUInt8Scalar,
667 garrow_uint8_scalar,
668 GARROW_TYPE_SCALAR)
669
670static void
671garrow_uint8_scalar_init(GArrowUInt8Scalar *object)
672{
673}
674
675static void
676garrow_uint8_scalar_class_init(GArrowUInt8ScalarClass *klass)
677{
678}
679
680/**
681 * garrow_uint8_scalar_new:
682 * @value: The value of this scalar.
683 *
684 * Returns: A newly created #GArrowUInt8Scalar.
685 *
686 * Since: 5.0.0
687 */
688GArrowUInt8Scalar *
689garrow_uint8_scalar_new(guint8 value)
690{
691 auto arrow_scalar =
692 std::static_pointer_cast<arrow::Scalar>(
693 std::make_shared<arrow::UInt8Scalar>(value));
694 return GARROW_UINT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
695}
696
697/**
698 * garrow_uint8_scalar_get_value:
699 * @scalar: A #GArrowUInt8Scalar.
700 *
701 * Returns: The value of this scalar.
702 *
703 * Since: 5.0.0
704 */
705guint8
706garrow_uint8_scalar_get_value(GArrowUInt8Scalar *scalar)
707{
708 const auto arrow_scalar =
709 std::static_pointer_cast<arrow::UInt8Scalar>(
710 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
711 return arrow_scalar->value;
712}
713
714
715G_DEFINE_TYPE(GArrowUInt16Scalar,
716 garrow_uint16_scalar,
717 GARROW_TYPE_SCALAR)
718
719static void
720garrow_uint16_scalar_init(GArrowUInt16Scalar *object)
721{
722}
723
724static void
725garrow_uint16_scalar_class_init(GArrowUInt16ScalarClass *klass)
726{
727}
728
729/**
730 * garrow_uint16_scalar_new:
731 * @value: The value of this scalar.
732 *
733 * Returns: A newly created #GArrowUInt16Scalar.
734 *
735 * Since: 5.0.0
736 */
737GArrowUInt16Scalar *
738garrow_uint16_scalar_new(guint16 value)
739{
740 auto arrow_scalar =
741 std::static_pointer_cast<arrow::Scalar>(
742 std::make_shared<arrow::UInt16Scalar>(value));
743 return GARROW_UINT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
744}
745
746/**
747 * garrow_uint16_scalar_get_value:
748 * @scalar: A #GArrowUInt16Scalar.
749 *
750 * Returns: The value of this scalar.
751 *
752 * Since: 5.0.0
753 */
754guint16
755garrow_uint16_scalar_get_value(GArrowUInt16Scalar *scalar)
756{
757 const auto arrow_scalar =
758 std::static_pointer_cast<arrow::UInt16Scalar>(
759 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
760 return arrow_scalar->value;
761}
762
763
764G_DEFINE_TYPE(GArrowUInt32Scalar,
765 garrow_uint32_scalar,
766 GARROW_TYPE_SCALAR)
767
768static void
769garrow_uint32_scalar_init(GArrowUInt32Scalar *object)
770{
771}
772
773static void
774garrow_uint32_scalar_class_init(GArrowUInt32ScalarClass *klass)
775{
776}
777
778/**
779 * garrow_uint32_scalar_new:
780 * @value: The value of this scalar.
781 *
782 * Returns: A newly created #GArrowUInt32Scalar.
783 *
784 * Since: 5.0.0
785 */
786GArrowUInt32Scalar *
787garrow_uint32_scalar_new(guint32 value)
788{
789 auto arrow_scalar =
790 std::static_pointer_cast<arrow::Scalar>(
791 std::make_shared<arrow::UInt32Scalar>(value));
792 return GARROW_UINT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
793}
794
795/**
796 * garrow_uint32_scalar_get_value:
797 * @scalar: A #GArrowUInt32Scalar.
798 *
799 * Returns: The value of this scalar.
800 *
801 * Since: 5.0.0
802 */
803guint32
804garrow_uint32_scalar_get_value(GArrowUInt32Scalar *scalar)
805{
806 const auto arrow_scalar =
807 std::static_pointer_cast<arrow::UInt32Scalar>(
808 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
809 return arrow_scalar->value;
810}
811
812
813G_DEFINE_TYPE(GArrowUInt64Scalar,
814 garrow_uint64_scalar,
815 GARROW_TYPE_SCALAR)
816
817static void
818garrow_uint64_scalar_init(GArrowUInt64Scalar *object)
819{
820}
821
822static void
823garrow_uint64_scalar_class_init(GArrowUInt64ScalarClass *klass)
824{
825}
826
827/**
828 * garrow_uint64_scalar_new:
829 * @value: The value of this scalar.
830 *
831 * Returns: A newly created #GArrowUInt64Scalar.
832 *
833 * Since: 5.0.0
834 */
835GArrowUInt64Scalar *
836garrow_uint64_scalar_new(guint64 value)
837{
838 auto arrow_scalar =
839 std::static_pointer_cast<arrow::Scalar>(
840 std::make_shared<arrow::UInt64Scalar>(value));
841 return GARROW_UINT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
842}
843
844/**
845 * garrow_uint64_scalar_get_value:
846 * @scalar: A #GArrowUInt64Scalar.
847 *
848 * Returns: The value of this scalar.
849 *
850 * Since: 5.0.0
851 */
852guint64
853garrow_uint64_scalar_get_value(GArrowUInt64Scalar *scalar)
854{
855 const auto arrow_scalar =
856 std::static_pointer_cast<arrow::UInt64Scalar>(
857 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
858 return arrow_scalar->value;
859}
860
861
862G_DEFINE_TYPE(GArrowFloatScalar,
863 garrow_float_scalar,
864 GARROW_TYPE_SCALAR)
865
866static void
867garrow_float_scalar_init(GArrowFloatScalar *object)
868{
869}
870
871static void
872garrow_float_scalar_class_init(GArrowFloatScalarClass *klass)
873{
874}
875
876/**
877 * garrow_float_scalar_new:
878 * @value: The value of this scalar.
879 *
880 * Returns: A newly created #GArrowFloatScalar.
881 *
882 * Since: 5.0.0
883 */
884GArrowFloatScalar *
885garrow_float_scalar_new(gfloat value)
886{
887 auto arrow_scalar =
888 std::static_pointer_cast<arrow::Scalar>(
889 std::make_shared<arrow::FloatScalar>(value));
890 return GARROW_FLOAT_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
891}
892
893/**
894 * garrow_float_scalar_get_value:
895 * @scalar: A #GArrowFloatScalar.
896 *
897 * Returns: The value of this scalar.
898 *
899 * Since: 5.0.0
900 */
901gfloat
902garrow_float_scalar_get_value(GArrowFloatScalar *scalar)
903{
904 const auto arrow_scalar =
905 std::static_pointer_cast<arrow::FloatScalar>(
906 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
907 return arrow_scalar->value;
908}
909
910
911G_DEFINE_TYPE(GArrowDoubleScalar,
912 garrow_double_scalar,
913 GARROW_TYPE_SCALAR)
914
915static void
916garrow_double_scalar_init(GArrowDoubleScalar *object)
917{
918}
919
920static void
921garrow_double_scalar_class_init(GArrowDoubleScalarClass *klass)
922{
923}
924
925/**
926 * garrow_double_scalar_new:
927 * @value: The value of this scalar.
928 *
929 * Returns: A newly created #GArrowDoubleScalar.
930 *
931 * Since: 5.0.0
932 */
933GArrowDoubleScalar *
934garrow_double_scalar_new(gdouble value)
935{
936 auto arrow_scalar =
937 std::static_pointer_cast<arrow::Scalar>(
938 std::make_shared<arrow::DoubleScalar>(value));
939 return GARROW_DOUBLE_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
940}
941
942/**
943 * garrow_double_scalar_get_value:
944 * @scalar: A #GArrowDoubleScalar.
945 *
946 * Returns: The value of this scalar.
947 *
948 * Since: 5.0.0
949 */
950gdouble
951garrow_double_scalar_get_value(GArrowDoubleScalar *scalar)
952{
953 const auto arrow_scalar =
954 std::static_pointer_cast<arrow::DoubleScalar>(
955 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
956 return arrow_scalar->value;
957}
958
959
960typedef struct GArrowBaseBinaryScalarPrivate_ {
961 GArrowBuffer *value;
962} GArrowBaseBinaryScalarPrivate;
963
964enum {
965 PROP_VALUE = 1,
966};
967
968G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseBinaryScalar,
969 garrow_base_binary_scalar,
970 GARROW_TYPE_SCALAR)
971
972#define GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(obj) \
973 static_cast<GArrowBaseBinaryScalarPrivate *>( \
974 garrow_base_binary_scalar_get_instance_private( \
975 GARROW_BASE_BINARY_SCALAR(obj)))
976
977static void
978garrow_base_binary_scalar_dispose(GObject *object)
979{
980 auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(object);
981
982 if (priv->value) {
983 g_object_unref(priv->value);
984 priv->value = NULL;
985 }
986
987 G_OBJECT_CLASS(garrow_base_binary_scalar_parent_class)->dispose(object);
988}
989
990static void
991garrow_base_binary_scalar_set_property(GObject *object,
992 guint prop_id,
993 const GValue *value,
994 GParamSpec *pspec)
995{
996 auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(object);
997
998 switch (prop_id) {
999 case PROP_VALUE:
1000 priv->value = GARROW_BUFFER(g_value_dup_object(value));
1001 break;
1002 default:
1003 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
1004 break;
1005 }
1006}
1007
1008static void
1009garrow_base_binary_scalar_init(GArrowBaseBinaryScalar *object)
1010{
1011}
1012
1013static void
1014garrow_base_binary_scalar_class_init(GArrowBaseBinaryScalarClass *klass)
1015{
1016 auto gobject_class = G_OBJECT_CLASS(klass);
1017 gobject_class->dispose = garrow_base_binary_scalar_dispose;
1018 gobject_class->set_property = garrow_base_binary_scalar_set_property;
1019
1020 GParamSpec *spec;
1021 /**
1022 * GArrowBaseBinaryScalar:value:
1023 *
1024 * The value of the scalar.
1025 *
1026 * Since: 5.0.0
1027 */
1028 spec = g_param_spec_object("value",
1029 "Value",
1030 "The value of the scalar",
1031 GARROW_TYPE_BUFFER,
1032 static_cast<GParamFlags>(G_PARAM_WRITABLE |
1033 G_PARAM_CONSTRUCT_ONLY));
1034 g_object_class_install_property(gobject_class, PROP_VALUE, spec);
1035}
1036
1037G_END_DECLS
1038template<typename ArrowBinaryScalarType>
1039GArrowScalar *
1040garrow_base_binary_scalar_new(GArrowBuffer *value)
1041{
1042 auto arrow_value = garrow_buffer_get_raw(value);
1043 auto arrow_scalar =
1044 std::static_pointer_cast<arrow::Scalar>(
1045 std::make_shared<ArrowBinaryScalarType>(arrow_value));
1046 return garrow_scalar_new_raw(&arrow_scalar,
1047 "scalar", &arrow_scalar,
1048 "value", value,
1049 NULL);
1050}
1051G_BEGIN_DECLS
1052
1053/**
1054 * garrow_base_binary_scalar_get_value:
1055 * @scalar: A #GArrowBaseBinaryScalar.
1056 *
1057 * Returns: (transfer none): The value of this scalar.
1058 *
1059 * Since: 5.0.0
1060 */
1061GArrowBuffer *
1062garrow_base_binary_scalar_get_value(GArrowBaseBinaryScalar *scalar)
1063{
1064 auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(scalar);
1065 if (!priv->value) {
1066 const auto arrow_scalar =
1067 std::static_pointer_cast<arrow::BaseBinaryScalar>(
1068 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1069 priv->value = garrow_buffer_new_raw(&(arrow_scalar->value));
1070 }
1071 return priv->value;
1072}
1073
1074
1075G_DEFINE_TYPE(GArrowBinaryScalar,
1076 garrow_binary_scalar,
1077 GARROW_TYPE_BASE_BINARY_SCALAR)
1078
1079static void
1080garrow_binary_scalar_init(GArrowBinaryScalar *object)
1081{
1082}
1083
1084static void
1085garrow_binary_scalar_class_init(GArrowBinaryScalarClass *klass)
1086{
1087}
1088
1089/**
1090 * garrow_binary_scalar_new:
1091 * @value: The value of this scalar.
1092 *
1093 * Returns: A newly created #GArrowBinaryScalar.
1094 *
1095 * Since: 5.0.0
1096 */
1097GArrowBinaryScalar *
1098garrow_binary_scalar_new(GArrowBuffer *value)
1099{
1100 return GARROW_BINARY_SCALAR(
1101 garrow_base_binary_scalar_new<arrow::BinaryScalar>(value));
1102}
1103
1104
1105G_DEFINE_TYPE(GArrowStringScalar,
1106 garrow_string_scalar,
1107 GARROW_TYPE_BASE_BINARY_SCALAR)
1108
1109static void
1110garrow_string_scalar_init(GArrowStringScalar *object)
1111{
1112}
1113
1114static void
1115garrow_string_scalar_class_init(GArrowStringScalarClass *klass)
1116{
1117}
1118
1119/**
1120 * garrow_string_scalar_new:
1121 * @value: The value of this scalar.
1122 *
1123 * Returns: A newly created #GArrowStringScalar.
1124 *
1125 * Since: 5.0.0
1126 */
1127GArrowStringScalar *
1128garrow_string_scalar_new(GArrowBuffer *value)
1129{
1130 return GARROW_STRING_SCALAR(
1131 garrow_base_binary_scalar_new<arrow::StringScalar>(value));
1132}
1133
1134
1135G_DEFINE_TYPE(GArrowLargeBinaryScalar,
1136 garrow_large_binary_scalar,
1137 GARROW_TYPE_BASE_BINARY_SCALAR)
1138
1139static void
1140garrow_large_binary_scalar_init(GArrowLargeBinaryScalar *object)
1141{
1142}
1143
1144static void
1145garrow_large_binary_scalar_class_init(GArrowLargeBinaryScalarClass *klass)
1146{
1147}
1148
1149/**
1150 * garrow_large_binary_scalar_new:
1151 * @value: The value of this scalar.
1152 *
1153 * Returns: A newly created #GArrowLargeBinaryScalar.
1154 *
1155 * Since: 5.0.0
1156 */
1157GArrowLargeBinaryScalar *
1158garrow_large_binary_scalar_new(GArrowBuffer *value)
1159{
1160 return GARROW_LARGE_BINARY_SCALAR(
1161 garrow_base_binary_scalar_new<arrow::LargeBinaryScalar>(value));
1162}
1163
1164
1165G_DEFINE_TYPE(GArrowLargeStringScalar,
1166 garrow_large_string_scalar,
1167 GARROW_TYPE_BASE_BINARY_SCALAR)
1168
1169static void
1170garrow_large_string_scalar_init(GArrowLargeStringScalar *object)
1171{
1172}
1173
1174static void
1175garrow_large_string_scalar_class_init(GArrowLargeStringScalarClass *klass)
1176{
1177}
1178
1179/**
1180 * garrow_large_string_scalar_new:
1181 * @value: The value of this scalar.
1182 *
1183 * Returns: A newly created #GArrowLargeStringScalar.
1184 *
1185 * Since: 5.0.0
1186 */
1187GArrowLargeStringScalar *
1188garrow_large_string_scalar_new(GArrowBuffer *value)
1189{
1190 return GARROW_LARGE_STRING_SCALAR(
1191 garrow_base_binary_scalar_new<arrow::LargeStringScalar>(value));
1192}
1193
1194
1195G_DEFINE_TYPE(GArrowFixedSizeBinaryScalar,
1196 garrow_fixed_size_binary_scalar,
1197 GARROW_TYPE_BASE_BINARY_SCALAR)
1198
1199static void
1200garrow_fixed_size_binary_scalar_init(GArrowFixedSizeBinaryScalar *object)
1201{
1202}
1203
1204static void
1205garrow_fixed_size_binary_scalar_class_init(
1206 GArrowFixedSizeBinaryScalarClass *klass)
1207{
1208}
1209
1210/**
1211 * garrow_fixed_size_binary_scalar_new:
1212 * @data_type: A #GArrowFixedSizeBinaryDataType for this scalar.
1213 * @value: The value of this scalar.
1214 *
1215 * Returns: A newly created #GArrowFixedSizeBinaryScalar.
1216 *
1217 * Since: 5.0.0
1218 */
1219GArrowFixedSizeBinaryScalar *
1220garrow_fixed_size_binary_scalar_new(GArrowFixedSizeBinaryDataType *data_type,
1221 GArrowBuffer *value)
1222{
1223 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1224 auto arrow_value = garrow_buffer_get_raw(value);
1225 auto arrow_scalar =
1226 std::static_pointer_cast<arrow::Scalar>(
1227 std::make_shared<arrow::FixedSizeBinaryScalar>(
1228 arrow_value, arrow_data_type));
1229 return GARROW_FIXED_SIZE_BINARY_SCALAR(
1230 garrow_scalar_new_raw(&arrow_scalar,
1231 "scalar", &arrow_scalar,
1232 "data-type", data_type,
1233 "value", value,
1234 NULL));
1235}
1236
1237
1238G_DEFINE_TYPE(GArrowDate32Scalar,
1239 garrow_date32_scalar,
1240 GARROW_TYPE_SCALAR)
1241
1242static void
1243garrow_date32_scalar_init(GArrowDate32Scalar *object)
1244{
1245}
1246
1247static void
1248garrow_date32_scalar_class_init(GArrowDate32ScalarClass *klass)
1249{
1250}
1251
1252/**
1253 * garrow_date32_scalar_new:
1254 * @value: The value of this scalar.
1255 *
1256 * Returns: A newly created #GArrowDate32Scalar.
1257 *
1258 * Since: 5.0.0
1259 */
1260GArrowDate32Scalar *
1261garrow_date32_scalar_new(gint32 value)
1262{
1263 auto arrow_scalar =
1264 std::static_pointer_cast<arrow::Scalar>(
1265 std::make_shared<arrow::Date32Scalar>(value));
1266 return GARROW_DATE32_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
1267}
1268
1269/**
1270 * garrow_date32_scalar_get_value:
1271 * @scalar: A #GArrowDate32Scalar.
1272 *
1273 * Returns: The value of this scalar.
1274 *
1275 * Since: 5.0.0
1276 */
1277gint32
1278garrow_date32_scalar_get_value(GArrowDate32Scalar *scalar)
1279{
1280 const auto arrow_scalar =
1281 std::static_pointer_cast<arrow::Date32Scalar>(
1282 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1283 return arrow_scalar->value;
1284}
1285
1286
1287G_DEFINE_TYPE(GArrowDate64Scalar,
1288 garrow_date64_scalar,
1289 GARROW_TYPE_SCALAR)
1290
1291static void
1292garrow_date64_scalar_init(GArrowDate64Scalar *object)
1293{
1294}
1295
1296static void
1297garrow_date64_scalar_class_init(GArrowDate64ScalarClass *klass)
1298{
1299}
1300
1301/**
1302 * garrow_date64_scalar_new:
1303 * @value: The value of this scalar.
1304 *
1305 * Returns: A newly created #GArrowDate64Scalar.
1306 *
1307 * Since: 5.0.0
1308 */
1309GArrowDate64Scalar *
1310garrow_date64_scalar_new(gint64 value)
1311{
1312 auto arrow_scalar =
1313 std::static_pointer_cast<arrow::Scalar>(
1314 std::make_shared<arrow::Date64Scalar>(value));
1315 return GARROW_DATE64_SCALAR(garrow_scalar_new_raw(&arrow_scalar));
1316}
1317
1318/**
1319 * garrow_date64_scalar_get_value:
1320 * @scalar: A #GArrowDate64Scalar.
1321 *
1322 * Returns: The value of this scalar.
1323 *
1324 * Since: 5.0.0
1325 */
1326gint64
1327garrow_date64_scalar_get_value(GArrowDate64Scalar *scalar)
1328{
1329 const auto arrow_scalar =
1330 std::static_pointer_cast<arrow::Date64Scalar>(
1331 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1332 return arrow_scalar->value;
1333}
1334
1335
1336G_DEFINE_TYPE(GArrowTime32Scalar,
1337 garrow_time32_scalar,
1338 GARROW_TYPE_SCALAR)
1339
1340static void
1341garrow_time32_scalar_init(GArrowTime32Scalar *object)
1342{
1343}
1344
1345static void
1346garrow_time32_scalar_class_init(GArrowTime32ScalarClass *klass)
1347{
1348}
1349
1350/**
1351 * garrow_time32_scalar_new:
1352 * @data_type: A #GArrowTime32DataType for this scalar.
1353 * @value: The value of this scalar.
1354 *
1355 * Returns: A newly created #GArrowTime32Scalar.
1356 *
1357 * Since: 5.0.0
1358 */
1359GArrowTime32Scalar *
1360garrow_time32_scalar_new(GArrowTime32DataType *data_type,
1361 gint32 value)
1362{
1363 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1364 auto arrow_scalar =
1365 std::static_pointer_cast<arrow::Scalar>(
1366 std::make_shared<arrow::Time32Scalar>(value, arrow_data_type));
1367 return GARROW_TIME32_SCALAR(
1368 garrow_scalar_new_raw(&arrow_scalar,
1369 "scalar", &arrow_scalar,
1370 "data-type", data_type,
1371 NULL));
1372}
1373
1374/**
1375 * garrow_time32_scalar_get_value:
1376 * @scalar: A #GArrowTime32Scalar.
1377 *
1378 * Returns: The value of this scalar.
1379 *
1380 * Since: 5.0.0
1381 */
1382gint32
1383garrow_time32_scalar_get_value(GArrowTime32Scalar *scalar)
1384{
1385 const auto arrow_scalar =
1386 std::static_pointer_cast<arrow::Time32Scalar>(
1387 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1388 return arrow_scalar->value;
1389}
1390
1391
1392G_DEFINE_TYPE(GArrowTime64Scalar,
1393 garrow_time64_scalar,
1394 GARROW_TYPE_SCALAR)
1395
1396static void
1397garrow_time64_scalar_init(GArrowTime64Scalar *object)
1398{
1399}
1400
1401static void
1402garrow_time64_scalar_class_init(GArrowTime64ScalarClass *klass)
1403{
1404}
1405
1406/**
1407 * garrow_time64_scalar_new:
1408 * @data_type: A #GArrowTime64DataType for this scalar.
1409 * @value: The value of this scalar.
1410 *
1411 * Returns: A newly created #GArrowTime64Scalar.
1412 *
1413 * Since: 5.0.0
1414 */
1415GArrowTime64Scalar *
1416garrow_time64_scalar_new(GArrowTime64DataType *data_type,
1417 gint64 value)
1418{
1419 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1420 auto arrow_scalar =
1421 std::static_pointer_cast<arrow::Scalar>(
1422 std::make_shared<arrow::Time64Scalar>(value, arrow_data_type));
1423 return GARROW_TIME64_SCALAR(
1424 garrow_scalar_new_raw(&arrow_scalar,
1425 "scalar", &arrow_scalar,
1426 "data-type", data_type,
1427 NULL));
1428}
1429
1430/**
1431 * garrow_time64_scalar_get_value:
1432 * @scalar: A #GArrowTime64Scalar.
1433 *
1434 * Returns: The value of this scalar.
1435 *
1436 * Since: 5.0.0
1437 */
1438gint64
1439garrow_time64_scalar_get_value(GArrowTime64Scalar *scalar)
1440{
1441 const auto arrow_scalar =
1442 std::static_pointer_cast<arrow::Time64Scalar>(
1443 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1444 return arrow_scalar->value;
1445}
1446
1447
1448G_DEFINE_TYPE(GArrowTimestampScalar,
1449 garrow_timestamp_scalar,
1450 GARROW_TYPE_SCALAR)
1451
1452static void
1453garrow_timestamp_scalar_init(GArrowTimestampScalar *object)
1454{
1455}
1456
1457static void
1458garrow_timestamp_scalar_class_init(GArrowTimestampScalarClass *klass)
1459{
1460}
1461
1462/**
1463 * garrow_timestamp_scalar_new:
1464 * @data_type: A #GArrowTimestampDataType for this scalar.
1465 * @value: The value of this scalar.
1466 *
1467 * Returns: A newly created #GArrowTimestampScalar.
1468 *
1469 * Since: 5.0.0
1470 */
1471GArrowTimestampScalar *
1472garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type,
1473 gint64 value)
1474{
1475 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1476 auto arrow_scalar =
1477 std::static_pointer_cast<arrow::Scalar>(
1478 std::make_shared<arrow::TimestampScalar>(value, arrow_data_type));
1479 return GARROW_TIMESTAMP_SCALAR(
1480 garrow_scalar_new_raw(&arrow_scalar,
1481 "scalar", &arrow_scalar,
1482 "data-type", data_type,
1483 NULL));
1484}
1485
1486/**
1487 * garrow_timestamp_scalar_get_value:
1488 * @scalar: A #GArrowTimestampScalar.
1489 *
1490 * Returns: The value of this scalar.
1491 *
1492 * Since: 5.0.0
1493 */
1494gint64
1495garrow_timestamp_scalar_get_value(GArrowTimestampScalar *scalar)
1496{
1497 const auto arrow_scalar =
1498 std::static_pointer_cast<arrow::TimestampScalar>(
1499 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1500 return arrow_scalar->value;
1501}
1502
1503
1504typedef struct GArrowDecimal128ScalarPrivate_ {
1505 GArrowDecimal128 *value;
1506} GArrowDecimal128ScalarPrivate;
1507
1508G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal128Scalar,
1509 garrow_decimal128_scalar,
1510 GARROW_TYPE_SCALAR)
1511
1512#define GARROW_DECIMAL128_SCALAR_GET_PRIVATE(obj) \
1513 static_cast<GArrowDecimal128ScalarPrivate *>( \
1514 garrow_decimal128_scalar_get_instance_private( \
1515 GARROW_DECIMAL128_SCALAR(obj)))
1516
1517static void
1518garrow_decimal128_scalar_dispose(GObject *object)
1519{
1520 auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(object);
1521
1522 if (priv->value) {
1523 g_object_unref(priv->value);
1524 priv->value = NULL;
1525 }
1526
1527 G_OBJECT_CLASS(garrow_decimal128_scalar_parent_class)->dispose(object);
1528}
1529
1530static void
1531garrow_decimal128_scalar_set_property(GObject *object,
1532 guint prop_id,
1533 const GValue *value,
1534 GParamSpec *pspec)
1535{
1536 auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(object);
1537
1538 switch (prop_id) {
1539 case PROP_VALUE:
1540 priv->value = GARROW_DECIMAL128(g_value_dup_object(value));
1541 break;
1542 default:
1543 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
1544 break;
1545 }
1546}
1547
1548static void
1549garrow_decimal128_scalar_init(GArrowDecimal128Scalar *object)
1550{
1551}
1552
1553static void
1554garrow_decimal128_scalar_class_init(GArrowDecimal128ScalarClass *klass)
1555{
1556 auto gobject_class = G_OBJECT_CLASS(klass);
1557
1558 gobject_class->dispose = garrow_decimal128_scalar_dispose;
1559 gobject_class->set_property = garrow_decimal128_scalar_set_property;
1560
1561 GParamSpec *spec;
1562 /**
1563 * GArrowDecimal128Scalar:value:
1564 *
1565 * The value of the scalar.
1566 *
1567 * Since: 5.0.0
1568 */
1569 spec = g_param_spec_object("value",
1570 "Value",
1571 "The value of the scalar",
1572 garrow_decimal128_get_type(),
1573 static_cast<GParamFlags>(G_PARAM_WRITABLE |
1574 G_PARAM_CONSTRUCT_ONLY));
1575 g_object_class_install_property(gobject_class, PROP_VALUE, spec);
1576}
1577
1578/**
1579 * garrow_decimal128_scalar_new:
1580 * @data_type: A #GArrowDecimal128DataType for this scalar.
1581 * @value: The value of this scalar.
1582 *
1583 * Returns: A newly created #GArrowDecimal128Scalar.
1584 *
1585 * Since: 5.0.0
1586 */
1587GArrowDecimal128Scalar *
1588garrow_decimal128_scalar_new(GArrowDecimal128DataType *data_type,
1589 GArrowDecimal128 *value)
1590{
1591 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1592 auto arrow_value = garrow_decimal128_get_raw(value);
1593 auto arrow_scalar =
1594 std::static_pointer_cast<arrow::Scalar>(
1595 std::make_shared<arrow::Decimal128Scalar>(*arrow_value, arrow_data_type));
1596 return GARROW_DECIMAL128_SCALAR(
1597 garrow_scalar_new_raw(&arrow_scalar,
1598 "scalar", &arrow_scalar,
1599 "data-type", data_type,
1600 "value", value,
1601 NULL));
1602}
1603
1604/**
1605 * garrow_decimal128_scalar_get_value:
1606 * @scalar: A #GArrowDecimal128Scalar.
1607 *
1608 * Returns: (transfer none): The value of this scalar.
1609 *
1610 * Since: 5.0.0
1611 */
1612GArrowDecimal128 *
1613garrow_decimal128_scalar_get_value(GArrowDecimal128Scalar *scalar)
1614{
1615 auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(scalar);
1616 if (!priv->value) {
1617 auto arrow_scalar =
1618 std::static_pointer_cast<arrow::Decimal128Scalar>(
1619 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1620 auto arrow_value = std::make_shared<arrow::Decimal128>(arrow_scalar->value);
1621 priv->value = garrow_decimal128_new_raw(&arrow_value);
1622 }
1623 return priv->value;
1624}
1625
1626
1627typedef struct GArrowDecimal256ScalarPrivate_ {
1628 GArrowDecimal256 *value;
1629} GArrowDecimal256ScalarPrivate;
1630
1631G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal256Scalar,
1632 garrow_decimal256_scalar,
1633 GARROW_TYPE_SCALAR)
1634
1635#define GARROW_DECIMAL256_SCALAR_GET_PRIVATE(obj) \
1636 static_cast<GArrowDecimal256ScalarPrivate *>( \
1637 garrow_decimal256_scalar_get_instance_private( \
1638 GARROW_DECIMAL256_SCALAR(obj)))
1639
1640static void
1641garrow_decimal256_scalar_dispose(GObject *object)
1642{
1643 auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(object);
1644
1645 if (priv->value) {
1646 g_object_unref(priv->value);
1647 priv->value = NULL;
1648 }
1649
1650 G_OBJECT_CLASS(garrow_decimal256_scalar_parent_class)->dispose(object);
1651}
1652
1653static void
1654garrow_decimal256_scalar_set_property(GObject *object,
1655 guint prop_id,
1656 const GValue *value,
1657 GParamSpec *pspec)
1658{
1659 auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(object);
1660
1661 switch (prop_id) {
1662 case PROP_VALUE:
1663 priv->value = GARROW_DECIMAL256(g_value_dup_object(value));
1664 break;
1665 default:
1666 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
1667 break;
1668 }
1669}
1670
1671static void
1672garrow_decimal256_scalar_init(GArrowDecimal256Scalar *object)
1673{
1674}
1675
1676static void
1677garrow_decimal256_scalar_class_init(GArrowDecimal256ScalarClass *klass)
1678{
1679 auto gobject_class = G_OBJECT_CLASS(klass);
1680
1681 gobject_class->dispose = garrow_decimal256_scalar_dispose;
1682 gobject_class->set_property = garrow_decimal256_scalar_set_property;
1683
1684 GParamSpec *spec;
1685 /**
1686 * GArrowDecimal256Scalar:value:
1687 *
1688 * The value of the scalar.
1689 *
1690 * Since: 5.0.0
1691 */
1692 spec = g_param_spec_object("value",
1693 "Value",
1694 "The value of the scalar",
1695 garrow_decimal256_get_type(),
1696 static_cast<GParamFlags>(G_PARAM_WRITABLE |
1697 G_PARAM_CONSTRUCT_ONLY));
1698 g_object_class_install_property(gobject_class, PROP_VALUE, spec);
1699}
1700
1701/**
1702 * garrow_decimal256_scalar_new:
1703 * @data_type: A #GArrowDecimal256DataType for this scalar.
1704 * @value: The value of this scalar.
1705 *
1706 * Returns: A newly created #GArrowDecimal256Scalar.
1707 *
1708 * Since: 5.0.0
1709 */
1710GArrowDecimal256Scalar *
1711garrow_decimal256_scalar_new(GArrowDecimal256DataType *data_type,
1712 GArrowDecimal256 *value)
1713{
1714 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
1715 auto arrow_value = garrow_decimal256_get_raw(value);
1716 auto arrow_scalar =
1717 std::static_pointer_cast<arrow::Scalar>(
1718 std::make_shared<arrow::Decimal256Scalar>(*arrow_value, arrow_data_type));
1719 return GARROW_DECIMAL256_SCALAR(garrow_scalar_new_raw(&arrow_scalar,
1720 "scalar", &arrow_scalar,
1721 "data-type", data_type,
1722 "value", value,
1723 NULL));
1724}
1725
1726/**
1727 * garrow_decimal256_scalar_get_value:
1728 * @scalar: A #GArrowDecimal256Scalar.
1729 *
1730 * Returns: (transfer none): The value of this scalar.
1731 *
1732 * Since: 5.0.0
1733 */
1734GArrowDecimal256 *
1735garrow_decimal256_scalar_get_value(GArrowDecimal256Scalar *scalar)
1736{
1737 auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(scalar);
1738 if (!priv->value) {
1739 auto arrow_scalar =
1740 std::static_pointer_cast<arrow::Decimal256Scalar>(
1741 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1742 auto arrow_value = std::make_shared<arrow::Decimal256>(arrow_scalar->value);
1743 priv->value = garrow_decimal256_new_raw(&arrow_value);
1744 }
1745 return priv->value;
1746}
1747
1748
1749typedef struct GArrowBaseListScalarPrivate_ {
1750 GArrowArray *value;
1751} GArrowBaseListScalarPrivate;
1752
1753G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseListScalar,
1754 garrow_base_list_scalar,
1755 GARROW_TYPE_SCALAR)
1756
1757#define GARROW_BASE_LIST_SCALAR_GET_PRIVATE(obj) \
1758 static_cast<GArrowBaseListScalarPrivate *>( \
1759 garrow_base_list_scalar_get_instance_private( \
1760 GARROW_BASE_LIST_SCALAR(obj)))
1761
1762static void
1763garrow_base_list_scalar_dispose(GObject *object)
1764{
1765 auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(object);
1766
1767 if (priv->value) {
1768 g_object_unref(priv->value);
1769 priv->value = NULL;
1770 }
1771
1772 G_OBJECT_CLASS(garrow_base_list_scalar_parent_class)->dispose(object);
1773}
1774
1775static void
1776garrow_base_list_scalar_set_property(GObject *object,
1777 guint prop_id,
1778 const GValue *value,
1779 GParamSpec *pspec)
1780{
1781 auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(object);
1782
1783 switch (prop_id) {
1784 case PROP_VALUE:
1785 priv->value = GARROW_ARRAY(g_value_dup_object(value));
1786 break;
1787 default:
1788 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
1789 break;
1790 }
1791}
1792
1793static void
1794garrow_base_list_scalar_init(GArrowBaseListScalar *object)
1795{
1796}
1797
1798static void
1799garrow_base_list_scalar_class_init(GArrowBaseListScalarClass *klass)
1800{
1801 auto gobject_class = G_OBJECT_CLASS(klass);
1802
1803 gobject_class->dispose = garrow_base_list_scalar_dispose;
1804 gobject_class->set_property = garrow_base_list_scalar_set_property;
1805
1806 GParamSpec *spec;
1807 /**
1808 * GArrowBaseListScalar:value:
1809 *
1810 * The value of the scalar.
1811 *
1812 * Since: 5.0.0
1813 */
1814 spec = g_param_spec_object("value",
1815 "Value",
1816 "The value of the scalar",
1817 GARROW_TYPE_ARRAY,
1818 static_cast<GParamFlags>(G_PARAM_WRITABLE |
1819 G_PARAM_CONSTRUCT_ONLY));
1820 g_object_class_install_property(gobject_class, PROP_VALUE, spec);
1821}
1822
1823G_END_DECLS
1824template<typename ArrowListScalarType>
1825GArrowScalar *
1826garrow_base_list_scalar_new(GArrowArray *value)
1827{
1828 auto arrow_value = garrow_array_get_raw(value);
1829 auto arrow_scalar =
1830 std::static_pointer_cast<arrow::Scalar>(
1831 std::make_shared<ArrowListScalarType>(arrow_value));
1832 auto data_type = garrow_array_get_value_data_type(value);
1833 auto scalar = garrow_scalar_new_raw(&arrow_scalar,
1834 "scalar", &arrow_scalar,
1835 "data-type", data_type,
1836 "value", value,
1837 NULL);
1838 g_object_unref(data_type);
1839 return scalar;
1840}
1841G_BEGIN_DECLS
1842
1843/**
1844 * garrow_base_list_scalar_get_value:
1845 * @scalar: A #GArrowBaseListScalar.
1846 *
1847 * Returns: (transfer none): The value of this scalar.
1848 *
1849 * Since: 5.0.0
1850 */
1851GArrowArray *
1852garrow_base_list_scalar_get_value(GArrowBaseListScalar *scalar)
1853{
1854 auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(scalar);
1855 if (!priv->value) {
1856 const auto arrow_scalar =
1857 std::static_pointer_cast<arrow::BaseListScalar>(
1858 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
1859 priv->value = garrow_array_new_raw(&(arrow_scalar->value));
1860 }
1861 return priv->value;
1862}
1863
1864
1865G_DEFINE_TYPE(GArrowListScalar,
1866 garrow_list_scalar,
1867 GARROW_TYPE_BASE_LIST_SCALAR)
1868
1869static void
1870garrow_list_scalar_init(GArrowListScalar *object)
1871{
1872}
1873
1874static void
1875garrow_list_scalar_class_init(GArrowListScalarClass *klass)
1876{
1877}
1878
1879/**
1880 * garrow_list_scalar_new:
1881 * @value: The value of this scalar.
1882 *
1883 * Returns: A newly created #GArrowListScalar.
1884 *
1885 * Since: 5.0.0
1886 */
1887GArrowListScalar *
1888garrow_list_scalar_new(GArrowListArray *value)
1889{
1890 return GARROW_LIST_SCALAR(
1891 garrow_base_list_scalar_new<arrow::ListScalar>(GARROW_ARRAY(value)));
1892}
1893
1894
1895G_DEFINE_TYPE(GArrowLargeListScalar,
1896 garrow_large_list_scalar,
1897 GARROW_TYPE_BASE_LIST_SCALAR)
1898
1899static void
1900garrow_large_list_scalar_init(GArrowLargeListScalar *object)
1901{
1902}
1903
1904static void
1905garrow_large_list_scalar_class_init(GArrowLargeListScalarClass *klass)
1906{
1907}
1908
1909/**
1910 * garrow_large_list_scalar_new:
1911 * @value: The value of this scalar.
1912 *
1913 * Returns: A newly created #GArrowLargeListScalar.
1914 *
1915 * Since: 5.0.0
1916 */
1917GArrowLargeListScalar *
1918garrow_large_list_scalar_new(GArrowLargeListArray *value)
1919{
1920 return GARROW_LARGE_LIST_SCALAR(
1921 garrow_base_list_scalar_new<arrow::LargeListScalar>(GARROW_ARRAY(value)));
1922}
1923
1924
1925G_DEFINE_TYPE(GArrowMapScalar,
1926 garrow_map_scalar,
1927 GARROW_TYPE_BASE_LIST_SCALAR)
1928
1929static void
1930garrow_map_scalar_init(GArrowMapScalar *object)
1931{
1932}
1933
1934static void
1935garrow_map_scalar_class_init(GArrowMapScalarClass *klass)
1936{
1937}
1938
1939/**
1940 * garrow_map_scalar_new:
1941 * @value: The value of this scalar.
1942 *
1943 * Returns: A newly created #GArrowMapScalar.
1944 *
1945 * Since: 5.0.0
1946 */
1947GArrowMapScalar *
1948garrow_map_scalar_new(GArrowStructArray *value)
1949{
1950 return GARROW_MAP_SCALAR(
1951 garrow_base_list_scalar_new<arrow::MapScalar>(GARROW_ARRAY(value)));
1952}
1953
1954
1955typedef struct GArrowStructScalarPrivate_ {
1956 GList *value;
1957} GArrowStructScalarPrivate;
1958
1959G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructScalar,
1960 garrow_struct_scalar,
1961 GARROW_TYPE_SCALAR)
1962
1963#define GARROW_STRUCT_SCALAR_GET_PRIVATE(obj) \
1964 static_cast<GArrowStructScalarPrivate *>( \
1965 garrow_struct_scalar_get_instance_private( \
1966 GARROW_STRUCT_SCALAR(obj)))
1967
1968static void
1969garrow_struct_scalar_dispose(GObject *object)
1970{
1971 auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(object);
1972
1973 if (priv->value) {
1974 g_list_free_full(priv->value, g_object_unref);
1975 priv->value = NULL;
1976 }
1977
1978 G_OBJECT_CLASS(garrow_struct_scalar_parent_class)->dispose(object);
1979}
1980
1981static void
1982garrow_struct_scalar_init(GArrowStructScalar *object)
1983{
1984}
1985
1986static void
1987garrow_struct_scalar_class_init(GArrowStructScalarClass *klass)
1988{
1989 auto gobject_class = G_OBJECT_CLASS(klass);
1990 gobject_class->dispose = garrow_struct_scalar_dispose;
1991}
1992
1993/**
1994 * garrow_struct_scalar_new:
1995 * @data_type: A #GArrowStructDataType for this scalar.
1996 * @value: (element-type GArrowScalar): The value of this scalar.
1997 *
1998 * Returns: A newly created #GArrowDecimal256Scalar.
1999 *
2000 * Since: 5.0.0
2001 */
2002GArrowStructScalar *
2003garrow_struct_scalar_new(GArrowStructDataType *data_type,
2004 GList *value)
2005{
2006 auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
2007 std::vector<std::shared_ptr<arrow::Scalar>> arrow_value;
2008 for (GList *node = value; node; node = node->next) {
2009 auto field = GARROW_SCALAR(node->data);
2010 auto arrow_field = garrow_scalar_get_raw(field);
2011 arrow_value.push_back(arrow_field);
2012 }
2013 auto arrow_scalar =
2014 std::static_pointer_cast<arrow::Scalar>(
2015 std::make_shared<arrow::StructScalar>(arrow_value, arrow_data_type));
2016 auto scalar =
2017 GARROW_STRUCT_SCALAR(
2018 garrow_scalar_new_raw(&arrow_scalar,
2019 "scalar", &arrow_scalar,
2020 "data-type", data_type,
2021 NULL));
2022 auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar);
2023 priv->value = g_list_copy_deep(value,
2024 reinterpret_cast<GCopyFunc>(g_object_ref),
2025 NULL);
2026 return scalar;
2027}
2028
2029/**
2030 * garrow_struct_scalar_get_value:
2031 * @scalar: A #GArrowStructScalar.
2032 *
2033 * Returns: (element-type GArrowScalar) (transfer none):
2034 * The value of this scalar.
2035 *
2036 * Since: 5.0.0
2037 */
2038GList *
2039garrow_struct_scalar_get_value(GArrowStructScalar *scalar)
2040{
2041 auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar);
2042 return priv->value;
2043}
2044
2045
2046typedef struct GArrowUnionScalarPrivate_ {
2047 GArrowScalar *value;
2048} GArrowUnionScalarPrivate;
2049
2050G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowUnionScalar,
2051 garrow_union_scalar,
2052 GARROW_TYPE_SCALAR)
2053
2054#define GARROW_UNION_SCALAR_GET_PRIVATE(obj) \
2055 static_cast<GArrowUnionScalarPrivate *>( \
2056 garrow_union_scalar_get_instance_private( \
2057 GARROW_UNION_SCALAR(obj)))
2058
2059static void
2060garrow_union_scalar_dispose(GObject *object)
2061{
2062 auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(object);
2063
2064 if (priv->value) {
2065 g_object_unref(priv->value);
2066 priv->value = NULL;
2067 }
2068
2069 G_OBJECT_CLASS(garrow_union_scalar_parent_class)->dispose(object);
2070}
2071
2072static void
2073garrow_union_scalar_set_property(GObject *object,
2074 guint prop_id,
2075 const GValue *value,
2076 GParamSpec *pspec)
2077{
2078 auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(object);
2079
2080 switch (prop_id) {
2081 case PROP_VALUE:
2082 priv->value = GARROW_SCALAR(g_value_dup_object(value));
2083 break;
2084 default:
2085 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
2086 break;
2087 }
2088}
2089
2090static void
2091garrow_union_scalar_init(GArrowUnionScalar *object)
2092{
2093}
2094
2095static void
2096garrow_union_scalar_class_init(GArrowUnionScalarClass *klass)
2097{
2098 auto gobject_class = G_OBJECT_CLASS(klass);
2099 gobject_class->dispose = garrow_union_scalar_dispose;
2100 gobject_class->set_property = garrow_union_scalar_set_property;
2101
2102 GParamSpec *spec;
2103 /**
2104 * GArrowUnionScalar:value:
2105 *
2106 * The value of the scalar.
2107 *
2108 * Since: 5.0.0
2109 */
2110 spec = g_param_spec_object("value",
2111 "Value",
2112 "The value of the scalar",
2113 GARROW_TYPE_SCALAR,
2114 static_cast<GParamFlags>(G_PARAM_WRITABLE |
2115 G_PARAM_CONSTRUCT_ONLY));
2116 g_object_class_install_property(gobject_class, PROP_VALUE, spec);
2117}
2118
2119G_END_DECLS
2120template<typename ArrowUnionScalarType>
2121GArrowScalar *
2122garrow_union_scalar_new(GArrowDataType *data_type,
2123 gint8 type_code,
2124 GArrowScalar *value)
2125{
2126 auto arrow_data_type = garrow_data_type_get_raw(data_type);
2127 auto arrow_value = garrow_scalar_get_raw(value);
2128 auto arrow_scalar =
2129 std::static_pointer_cast<arrow::Scalar>(
2130 std::make_shared<ArrowUnionScalarType>(arrow_value, type_code,
2131 arrow_data_type));
2132 auto scalar = garrow_scalar_new_raw(&arrow_scalar,
2133 "scalar", &arrow_scalar,
2134 "data-type", data_type,
2135 "value", value,
2136 NULL);
2137 return scalar;
2138}
2139G_BEGIN_DECLS
2140
2141/**
2142 * garrow_union_scalar_get_type_code:
2143 * @scalar: A #GArrowUnionScalar.
2144 *
2145 * Returns: The type code of this scalar.
2146 *
2147 * Since: 6.0.0
2148 */
2149gint8
2150garrow_union_scalar_get_type_code(GArrowUnionScalar *scalar)
2151{
2152 const auto &arrow_scalar =
2153 std::static_pointer_cast<arrow::UnionScalar>(
2154 garrow_scalar_get_raw(GARROW_SCALAR(scalar)));
2155 return arrow_scalar->type_code;
2156}
2157
2158/**
2159 * garrow_union_scalar_get_value:
2160 * @scalar: A #GArrowUnionScalar.
2161 *
2162 * Returns: (transfer none): The value of this scalar.
2163 *
2164 * Since: 5.0.0
2165 */
2166GArrowScalar *
2167garrow_union_scalar_get_value(GArrowUnionScalar *scalar)
2168{
2169 auto priv = GARROW_UNION_SCALAR_GET_PRIVATE(scalar);
2170 return priv->value;
2171}
2172
2173
2174G_DEFINE_TYPE(GArrowSparseUnionScalar,
2175 garrow_sparse_union_scalar,
2176 GARROW_TYPE_UNION_SCALAR)
2177
2178static void
2179garrow_sparse_union_scalar_init(GArrowSparseUnionScalar *object)
2180{
2181}
2182
2183static void
2184garrow_sparse_union_scalar_class_init(GArrowSparseUnionScalarClass *klass)
2185{
2186}
2187
2188/**
2189 * garrow_sparse_union_scalar_new:
2190 * @data_type: A #GArrowSparseUnionDataType for this scalar.
2191 * @type_code: The type code of this scalar.
2192 * @value: The value of this scalar.
2193 *
2194 * Returns: A newly created #GArrowSparseUnionScalar.
2195 *
2196 * Since: 5.0.0
2197 */
2198GArrowSparseUnionScalar *
2199garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type,
2200 gint8 type_code,
2201 GArrowScalar *value)
2202{
2203 return GARROW_SPARSE_UNION_SCALAR(
2204 garrow_union_scalar_new<arrow::SparseUnionScalar>(
2205 GARROW_DATA_TYPE(data_type), type_code, value));
2206}
2207
2208
2209G_DEFINE_TYPE(GArrowDenseUnionScalar,
2210 garrow_dense_union_scalar,
2211 GARROW_TYPE_UNION_SCALAR)
2212
2213static void
2214garrow_dense_union_scalar_init(GArrowDenseUnionScalar *object)
2215{
2216}
2217
2218static void
2219garrow_dense_union_scalar_class_init(GArrowDenseUnionScalarClass *klass)
2220{
2221}
2222
2223/**
2224 * garrow_dense_union_scalar_new:
2225 * @data_type: A #GArrowDenseUnionDataType for this scalar.
2226 * @type_code: The type code of this scalar.
2227 * @value: The value of this scalar.
2228 *
2229 * Returns: A newly created #GArrowDenseUnionScalar.
2230 *
2231 * Since: 5.0.0
2232 */
2233GArrowDenseUnionScalar *
2234garrow_dense_union_scalar_new(GArrowDenseUnionDataType *data_type,
2235 gint8 type_code,
2236 GArrowScalar *value)
2237{
2238 return GARROW_DENSE_UNION_SCALAR(
2239 garrow_union_scalar_new<arrow::DenseUnionScalar>(
2240 GARROW_DATA_TYPE(data_type), type_code, value));
2241}
2242
2243
2244G_DEFINE_TYPE(GArrowExtensionScalar,
2245 garrow_extension_scalar,
2246 GARROW_TYPE_SCALAR)
2247
2248static void
2249garrow_extension_scalar_init(GArrowExtensionScalar *object)
2250{
2251}
2252
2253static void
2254garrow_extension_scalar_class_init(GArrowExtensionScalarClass *klass)
2255{
2256}
2257
2258
2259G_END_DECLS
2260
2261GArrowScalar *
2262garrow_scalar_new_raw(std::shared_ptr<arrow::Scalar> *arrow_scalar)
2263{
2264 return garrow_scalar_new_raw(arrow_scalar,
2265 "scalar", arrow_scalar,
2266 NULL);
2267}
2268
2269GArrowScalar *
2270garrow_scalar_new_raw(std::shared_ptr<arrow::Scalar> *arrow_scalar,
2271 const gchar *first_property_name,
2272 ...)
2273{
2274 va_list args;
2275 va_start(args, first_property_name);
2276 auto array = garrow_scalar_new_raw_valist(arrow_scalar,
2277 first_property_name,
2278 args);
2279 va_end(args);
2280 return array;
2281}
2282
2283GArrowScalar *
2284garrow_scalar_new_raw_valist(std::shared_ptr<arrow::Scalar> *arrow_scalar,
2285 const gchar *first_property_name,
2286 va_list args)
2287{
2288 GType type;
2289 GArrowScalar *scalar;
2290
2291 switch ((*arrow_scalar)->type->id()) {
2292 case arrow::Type::type::NA:
2293 type = GARROW_TYPE_NULL_SCALAR;
2294 break;
2295 case arrow::Type::type::BOOL:
2296 type = GARROW_TYPE_BOOLEAN_SCALAR;
2297 break;
2298 case arrow::Type::type::INT8:
2299 type = GARROW_TYPE_INT8_SCALAR;
2300 break;
2301 case arrow::Type::type::INT16:
2302 type = GARROW_TYPE_INT16_SCALAR;
2303 break;
2304 case arrow::Type::type::INT32:
2305 type = GARROW_TYPE_INT32_SCALAR;
2306 break;
2307 case arrow::Type::type::INT64:
2308 type = GARROW_TYPE_INT64_SCALAR;
2309 break;
2310 case arrow::Type::type::UINT8:
2311 type = GARROW_TYPE_UINT8_SCALAR;
2312 break;
2313 case arrow::Type::type::UINT16:
2314 type = GARROW_TYPE_UINT16_SCALAR;
2315 break;
2316 case arrow::Type::type::UINT32:
2317 type = GARROW_TYPE_UINT32_SCALAR;
2318 break;
2319 case arrow::Type::type::UINT64:
2320 type = GARROW_TYPE_UINT64_SCALAR;
2321 break;
2322 case arrow::Type::type::FLOAT:
2323 type = GARROW_TYPE_FLOAT_SCALAR;
2324 break;
2325 case arrow::Type::type::DOUBLE:
2326 type = GARROW_TYPE_DOUBLE_SCALAR;
2327 break;
2328 case arrow::Type::type::BINARY:
2329 type = GARROW_TYPE_BINARY_SCALAR;
2330 break;
2331 case arrow::Type::type::STRING:
2332 type = GARROW_TYPE_STRING_SCALAR;
2333 break;
2334 case arrow::Type::type::LARGE_BINARY:
2335 type = GARROW_TYPE_LARGE_BINARY_SCALAR;
2336 break;
2337 case arrow::Type::type::LARGE_STRING:
2338 type = GARROW_TYPE_LARGE_STRING_SCALAR;
2339 break;
2340 case arrow::Type::type::FIXED_SIZE_BINARY:
2341 type = GARROW_TYPE_FIXED_SIZE_BINARY_SCALAR;
2342 break;
2343 case arrow::Type::type::DATE32:
2344 type = GARROW_TYPE_DATE32_SCALAR;
2345 break;
2346 case arrow::Type::type::DATE64:
2347 type = GARROW_TYPE_DATE64_SCALAR;
2348 break;
2349 case arrow::Type::type::TIME32:
2350 type = GARROW_TYPE_TIME32_SCALAR;
2351 break;
2352 case arrow::Type::type::TIME64:
2353 type = GARROW_TYPE_TIME64_SCALAR;
2354 break;
2355 case arrow::Type::type::TIMESTAMP:
2356 type = GARROW_TYPE_TIMESTAMP_SCALAR;
2357 break;
2358 case arrow::Type::type::DECIMAL128:
2359 type = GARROW_TYPE_DECIMAL128_SCALAR;
2360 break;
2361 case arrow::Type::type::DECIMAL256:
2362 type = GARROW_TYPE_DECIMAL256_SCALAR;
2363 break;
2364 case arrow::Type::type::LIST:
2365 type = GARROW_TYPE_LIST_SCALAR;
2366 break;
2367 case arrow::Type::type::LARGE_LIST:
2368 type = GARROW_TYPE_LARGE_LIST_SCALAR;
2369 break;
2370/*
2371 case arrow::Type::type::FIXED_SIZE_LIST:
2372 type = GARROW_TYPE_FIXED_SIZE_LIST_SCALAR;
2373 break;
2374*/
2375 case arrow::Type::type::MAP:
2376 type = GARROW_TYPE_MAP_SCALAR;
2377 break;
2378 case arrow::Type::type::STRUCT:
2379 type = GARROW_TYPE_STRUCT_SCALAR;
2380 break;
2381 case arrow::Type::type::SPARSE_UNION:
2382 type = GARROW_TYPE_SPARSE_UNION_SCALAR;
2383 break;
2384 case arrow::Type::type::DENSE_UNION:
2385 type = GARROW_TYPE_DENSE_UNION_SCALAR;
2386 break;
2387 case arrow::Type::type::EXTENSION:
2388 type = GARROW_TYPE_EXTENSION_SCALAR;
2389 break;
2390 default:
2391 type = GARROW_TYPE_SCALAR;
2392 break;
2393 }
2394 scalar = GARROW_SCALAR(g_object_new_valist(type,
2395 first_property_name,
2396 args));
2397 return scalar;
2398}
2399
2400std::shared_ptr<arrow::Scalar>
2401garrow_scalar_get_raw(GArrowScalar *scalar)
2402{
2403 auto priv = GARROW_SCALAR_GET_PRIVATE(scalar);
2404 return priv->scalar;
2405}