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 #pragma once
21 
22 #include <arrow-glib/array.h>
23 
24 G_BEGIN_DECLS
25 
26 typedef struct _GArrowCastOptions GArrowCastOptions;
27 
28 #define GARROW_TYPE_SCALAR (garrow_scalar_get_type())
29 G_DECLARE_DERIVABLE_TYPE(GArrowScalar,
30                          garrow_scalar,
31                          GARROW,
32                          SCALAR,
33                          GObject)
34 struct _GArrowScalarClass
35 {
36   GObjectClass parent_class;
37 };
38 
39 GARROW_AVAILABLE_IN_5_0
40 GArrowScalar *
41 garrow_scalar_parse(GArrowDataType *data_type,
42                     const guint8 *data,
43                     gsize size,
44                     GError **error);
45 
46 GARROW_AVAILABLE_IN_5_0
47 GArrowDataType *
48 garrow_scalar_get_data_type(GArrowScalar *scalar);
49 GARROW_AVAILABLE_IN_5_0
50 gboolean
51 garrow_scalar_is_valid(GArrowScalar *scalar);
52 GARROW_AVAILABLE_IN_5_0
53 gboolean
54 garrow_scalar_equal(GArrowScalar *scalar,
55                     GArrowScalar *other_scalar);
56 GARROW_AVAILABLE_IN_5_0
57 gboolean
58 garrow_scalar_equal_options(GArrowScalar *scalar,
59                             GArrowScalar *other_scalar,
60                             GArrowEqualOptions *options);
61 GARROW_AVAILABLE_IN_5_0
62 gchar *
63 garrow_scalar_to_string(GArrowScalar *scalar);
64 
65 GARROW_AVAILABLE_IN_5_0
66 GArrowScalar *
67 garrow_scalar_cast(GArrowScalar *scalar,
68                    GArrowDataType *data_type,
69                    GArrowCastOptions *options,
70                    GError **error);
71 
72 
73 #define GARROW_TYPE_NULL_SCALAR (garrow_null_scalar_get_type())
74 G_DECLARE_DERIVABLE_TYPE(GArrowNullScalar,
75                          garrow_null_scalar,
76                          GARROW,
77                          NULL_SCALAR,
78                          GArrowScalar)
79 struct _GArrowNullScalarClass
80 {
81   GArrowScalarClass parent_class;
82 };
83 
84 GARROW_AVAILABLE_IN_5_0
85 GArrowNullScalar *
86 garrow_null_scalar_new(void);
87 
88 
89 #define GARROW_TYPE_BOOLEAN_SCALAR (garrow_boolean_scalar_get_type())
90 G_DECLARE_DERIVABLE_TYPE(GArrowBooleanScalar,
91                          garrow_boolean_scalar,
92                          GARROW,
93                          BOOLEAN_SCALAR,
94                          GArrowScalar)
95 struct _GArrowBooleanScalarClass
96 {
97   GArrowScalarClass parent_class;
98 };
99 
100 GARROW_AVAILABLE_IN_5_0
101 GArrowBooleanScalar *
102 garrow_boolean_scalar_new(gboolean value);
103 GARROW_AVAILABLE_IN_5_0
104 gboolean
105 garrow_boolean_scalar_get_value(GArrowBooleanScalar *scalar);
106 
107 
108 #define GARROW_TYPE_INT8_SCALAR (garrow_int8_scalar_get_type())
109 G_DECLARE_DERIVABLE_TYPE(GArrowInt8Scalar,
110                          garrow_int8_scalar,
111                          GARROW,
112                          INT8_SCALAR,
113                          GArrowScalar)
114 struct _GArrowInt8ScalarClass
115 {
116   GArrowScalarClass parent_class;
117 };
118 
119 GARROW_AVAILABLE_IN_5_0
120 GArrowInt8Scalar *
121 garrow_int8_scalar_new(gint8 value);
122 GARROW_AVAILABLE_IN_5_0
123 gint8
124 garrow_int8_scalar_get_value(GArrowInt8Scalar *scalar);
125 
126 
127 #define GARROW_TYPE_INT16_SCALAR (garrow_int16_scalar_get_type())
128 G_DECLARE_DERIVABLE_TYPE(GArrowInt16Scalar,
129                          garrow_int16_scalar,
130                          GARROW,
131                          INT16_SCALAR,
132                          GArrowScalar)
133 struct _GArrowInt16ScalarClass
134 {
135   GArrowScalarClass parent_class;
136 };
137 
138 GARROW_AVAILABLE_IN_5_0
139 GArrowInt16Scalar *
140 garrow_int16_scalar_new(gint16 value);
141 GARROW_AVAILABLE_IN_5_0
142 gint16
143 garrow_int16_scalar_get_value(GArrowInt16Scalar *scalar);
144 
145 
146 #define GARROW_TYPE_INT32_SCALAR (garrow_int32_scalar_get_type())
147 G_DECLARE_DERIVABLE_TYPE(GArrowInt32Scalar,
148                          garrow_int32_scalar,
149                          GARROW,
150                          INT32_SCALAR,
151                          GArrowScalar)
152 struct _GArrowInt32ScalarClass
153 {
154   GArrowScalarClass parent_class;
155 };
156 
157 GARROW_AVAILABLE_IN_5_0
158 GArrowInt32Scalar *
159 garrow_int32_scalar_new(gint32 value);
160 GARROW_AVAILABLE_IN_5_0
161 gint32
162 garrow_int32_scalar_get_value(GArrowInt32Scalar *scalar);
163 
164 
165 #define GARROW_TYPE_INT64_SCALAR (garrow_int64_scalar_get_type())
166 G_DECLARE_DERIVABLE_TYPE(GArrowInt64Scalar,
167                          garrow_int64_scalar,
168                          GARROW,
169                          INT64_SCALAR,
170                          GArrowScalar)
171 struct _GArrowInt64ScalarClass
172 {
173   GArrowScalarClass parent_class;
174 };
175 
176 GARROW_AVAILABLE_IN_5_0
177 GArrowInt64Scalar *
178 garrow_int64_scalar_new(gint64 value);
179 GARROW_AVAILABLE_IN_5_0
180 gint64
181 garrow_int64_scalar_get_value(GArrowInt64Scalar *scalar);
182 
183 
184 #define GARROW_TYPE_UINT8_SCALAR (garrow_uint8_scalar_get_type())
185 G_DECLARE_DERIVABLE_TYPE(GArrowUInt8Scalar,
186                          garrow_uint8_scalar,
187                          GARROW,
188                          UINT8_SCALAR,
189                          GArrowScalar)
190 struct _GArrowUInt8ScalarClass
191 {
192   GArrowScalarClass parent_class;
193 };
194 
195 GARROW_AVAILABLE_IN_5_0
196 GArrowUInt8Scalar *
197 garrow_uint8_scalar_new(guint8 value);
198 GARROW_AVAILABLE_IN_5_0
199 guint8
200 garrow_uint8_scalar_get_value(GArrowUInt8Scalar *scalar);
201 
202 
203 #define GARROW_TYPE_UINT16_SCALAR (garrow_uint16_scalar_get_type())
204 G_DECLARE_DERIVABLE_TYPE(GArrowUInt16Scalar,
205                          garrow_uint16_scalar,
206                          GARROW,
207                          UINT16_SCALAR,
208                          GArrowScalar)
209 struct _GArrowUInt16ScalarClass
210 {
211   GArrowScalarClass parent_class;
212 };
213 
214 GARROW_AVAILABLE_IN_5_0
215 GArrowUInt16Scalar *
216 garrow_uint16_scalar_new(guint16 value);
217 GARROW_AVAILABLE_IN_5_0
218 guint16
219 garrow_uint16_scalar_get_value(GArrowUInt16Scalar *scalar);
220 
221 
222 #define GARROW_TYPE_UINT32_SCALAR (garrow_uint32_scalar_get_type())
223 G_DECLARE_DERIVABLE_TYPE(GArrowUInt32Scalar,
224                          garrow_uint32_scalar,
225                          GARROW,
226                          UINT32_SCALAR,
227                          GArrowScalar)
228 struct _GArrowUInt32ScalarClass
229 {
230   GArrowScalarClass parent_class;
231 };
232 
233 GARROW_AVAILABLE_IN_5_0
234 GArrowUInt32Scalar *
235 garrow_uint32_scalar_new(guint32 value);
236 GARROW_AVAILABLE_IN_5_0
237 guint32
238 garrow_uint32_scalar_get_value(GArrowUInt32Scalar *scalar);
239 
240 
241 #define GARROW_TYPE_UINT64_SCALAR (garrow_uint64_scalar_get_type())
242 G_DECLARE_DERIVABLE_TYPE(GArrowUInt64Scalar,
243                          garrow_uint64_scalar,
244                          GARROW,
245                          UINT64_SCALAR,
246                          GArrowScalar)
247 struct _GArrowUInt64ScalarClass
248 {
249   GArrowScalarClass parent_class;
250 };
251 
252 GARROW_AVAILABLE_IN_5_0
253 GArrowUInt64Scalar *
254 garrow_uint64_scalar_new(guint64 value);
255 GARROW_AVAILABLE_IN_5_0
256 guint64
257 garrow_uint64_scalar_get_value(GArrowUInt64Scalar *scalar);
258 
259 
260 #define GARROW_TYPE_FLOAT_SCALAR (garrow_float_scalar_get_type())
261 G_DECLARE_DERIVABLE_TYPE(GArrowFloatScalar,
262                          garrow_float_scalar,
263                          GARROW,
264                          FLOAT_SCALAR,
265                          GArrowScalar)
266 struct _GArrowFloatScalarClass
267 {
268   GArrowScalarClass parent_class;
269 };
270 
271 GARROW_AVAILABLE_IN_5_0
272 GArrowFloatScalar *
273 garrow_float_scalar_new(gfloat value);
274 GARROW_AVAILABLE_IN_5_0
275 gfloat
276 garrow_float_scalar_get_value(GArrowFloatScalar *scalar);
277 
278 
279 #define GARROW_TYPE_DOUBLE_SCALAR (garrow_double_scalar_get_type())
280 G_DECLARE_DERIVABLE_TYPE(GArrowDoubleScalar,
281                          garrow_double_scalar,
282                          GARROW,
283                          DOUBLE_SCALAR,
284                          GArrowScalar)
285 struct _GArrowDoubleScalarClass
286 {
287   GArrowScalarClass parent_class;
288 };
289 
290 GARROW_AVAILABLE_IN_5_0
291 GArrowDoubleScalar *
292 garrow_double_scalar_new(gdouble value);
293 GARROW_AVAILABLE_IN_5_0
294 gdouble
295 garrow_double_scalar_get_value(GArrowDoubleScalar *scalar);
296 
297 
298 #define GARROW_TYPE_BASE_BINARY_SCALAR (garrow_base_binary_scalar_get_type())
299 G_DECLARE_DERIVABLE_TYPE(GArrowBaseBinaryScalar,
300                          garrow_base_binary_scalar,
301                          GARROW,
302                          BASE_BINARY_SCALAR,
303                          GArrowScalar)
304 struct _GArrowBaseBinaryScalarClass
305 {
306   GArrowScalarClass parent_class;
307 };
308 
309 GARROW_AVAILABLE_IN_5_0
310 GArrowBuffer *
311 garrow_base_binary_scalar_get_value(GArrowBaseBinaryScalar *scalar);
312 
313 
314 #define GARROW_TYPE_BINARY_SCALAR (garrow_binary_scalar_get_type())
315 G_DECLARE_DERIVABLE_TYPE(GArrowBinaryScalar,
316                          garrow_binary_scalar,
317                          GARROW,
318                          BINARY_SCALAR,
319                          GArrowBaseBinaryScalar)
320 struct _GArrowBinaryScalarClass
321 {
322   GArrowBaseBinaryScalarClass parent_class;
323 };
324 
325 GARROW_AVAILABLE_IN_5_0
326 GArrowBinaryScalar *
327 garrow_binary_scalar_new(GArrowBuffer *value);
328 
329 
330 #define GARROW_TYPE_STRING_SCALAR (garrow_string_scalar_get_type())
331 G_DECLARE_DERIVABLE_TYPE(GArrowStringScalar,
332                          garrow_string_scalar,
333                          GARROW,
334                          STRING_SCALAR,
335                          GArrowBaseBinaryScalar)
336 struct _GArrowStringScalarClass
337 {
338   GArrowBaseBinaryScalarClass parent_class;
339 };
340 
341 GARROW_AVAILABLE_IN_5_0
342 GArrowStringScalar *
343 garrow_string_scalar_new(GArrowBuffer *value);
344 
345 
346 #define GARROW_TYPE_LARGE_BINARY_SCALAR (garrow_large_binary_scalar_get_type())
347 G_DECLARE_DERIVABLE_TYPE(GArrowLargeBinaryScalar,
348                          garrow_large_binary_scalar,
349                          GARROW,
350                          LARGE_BINARY_SCALAR,
351                          GArrowBaseBinaryScalar)
352 struct _GArrowLargeBinaryScalarClass
353 {
354   GArrowBaseBinaryScalarClass parent_class;
355 };
356 
357 GARROW_AVAILABLE_IN_5_0
358 GArrowLargeBinaryScalar *
359 garrow_large_binary_scalar_new(GArrowBuffer *value);
360 
361 
362 #define GARROW_TYPE_LARGE_STRING_SCALAR (garrow_large_string_scalar_get_type())
363 G_DECLARE_DERIVABLE_TYPE(GArrowLargeStringScalar,
364                          garrow_large_string_scalar,
365                          GARROW,
366                          LARGE_STRING_SCALAR,
367                          GArrowBaseBinaryScalar)
368 struct _GArrowLargeStringScalarClass
369 {
370   GArrowBaseBinaryScalarClass parent_class;
371 };
372 
373 GARROW_AVAILABLE_IN_5_0
374 GArrowLargeStringScalar *
375 garrow_large_string_scalar_new(GArrowBuffer *value);
376 
377 
378 #define GARROW_TYPE_FIXED_SIZE_BINARY_SCALAR    \
379   (garrow_fixed_size_binary_scalar_get_type())
380 G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeBinaryScalar,
381                          garrow_fixed_size_binary_scalar,
382                          GARROW,
383                          FIXED_SIZE_BINARY_SCALAR,
384                          GArrowBaseBinaryScalar)
385 struct _GArrowFixedSizeBinaryScalarClass
386 {
387   GArrowBaseBinaryScalarClass parent_class;
388 };
389 
390 GARROW_AVAILABLE_IN_5_0
391 GArrowFixedSizeBinaryScalar *
392 garrow_fixed_size_binary_scalar_new(GArrowFixedSizeBinaryDataType *data_type,
393                                     GArrowBuffer *value);
394 
395 
396 #define GARROW_TYPE_DATE32_SCALAR (garrow_date32_scalar_get_type())
397 G_DECLARE_DERIVABLE_TYPE(GArrowDate32Scalar,
398                          garrow_date32_scalar,
399                          GARROW,
400                          DATE32_SCALAR,
401                          GArrowScalar)
402 struct _GArrowDate32ScalarClass
403 {
404   GArrowScalarClass parent_class;
405 };
406 
407 GARROW_AVAILABLE_IN_5_0
408 GArrowDate32Scalar *
409 garrow_date32_scalar_new(gint32 value);
410 GARROW_AVAILABLE_IN_5_0
411 gint32
412 garrow_date32_scalar_get_value(GArrowDate32Scalar *scalar);
413 
414 
415 #define GARROW_TYPE_DATE64_SCALAR (garrow_date64_scalar_get_type())
416 G_DECLARE_DERIVABLE_TYPE(GArrowDate64Scalar,
417                          garrow_date64_scalar,
418                          GARROW,
419                          DATE64_SCALAR,
420                          GArrowScalar)
421 struct _GArrowDate64ScalarClass
422 {
423   GArrowScalarClass parent_class;
424 };
425 
426 GARROW_AVAILABLE_IN_5_0
427 GArrowDate64Scalar *
428 garrow_date64_scalar_new(gint64 value);
429 GARROW_AVAILABLE_IN_5_0
430 gint64
431 garrow_date64_scalar_get_value(GArrowDate64Scalar *scalar);
432 
433 
434 #define GARROW_TYPE_TIME32_SCALAR (garrow_time32_scalar_get_type())
435 G_DECLARE_DERIVABLE_TYPE(GArrowTime32Scalar,
436                          garrow_time32_scalar,
437                          GARROW,
438                          TIME32_SCALAR,
439                          GArrowScalar)
440 struct _GArrowTime32ScalarClass
441 {
442   GArrowScalarClass parent_class;
443 };
444 
445 GARROW_AVAILABLE_IN_5_0
446 GArrowTime32Scalar *
447 garrow_time32_scalar_new(GArrowTime32DataType *data_type,
448                          gint32 value);
449 GARROW_AVAILABLE_IN_5_0
450 gint32
451 garrow_time32_scalar_get_value(GArrowTime32Scalar *scalar);
452 
453 
454 #define GARROW_TYPE_TIME64_SCALAR (garrow_time64_scalar_get_type())
455 G_DECLARE_DERIVABLE_TYPE(GArrowTime64Scalar,
456                          garrow_time64_scalar,
457                          GARROW,
458                          TIME64_SCALAR,
459                          GArrowScalar)
460 struct _GArrowTime64ScalarClass
461 {
462   GArrowScalarClass parent_class;
463 };
464 
465 GARROW_AVAILABLE_IN_5_0
466 GArrowTime64Scalar *
467 garrow_time64_scalar_new(GArrowTime64DataType *data_type,
468                          gint64 value);
469 GARROW_AVAILABLE_IN_5_0
470 gint64
471 garrow_time64_scalar_get_value(GArrowTime64Scalar *scalar);
472 
473 
474 #define GARROW_TYPE_TIMESTAMP_SCALAR (garrow_timestamp_scalar_get_type())
475 G_DECLARE_DERIVABLE_TYPE(GArrowTimestampScalar,
476                          garrow_timestamp_scalar,
477                          GARROW,
478                          TIMESTAMP_SCALAR,
479                          GArrowScalar)
480 struct _GArrowTimestampScalarClass
481 {
482   GArrowScalarClass parent_class;
483 };
484 
485 GARROW_AVAILABLE_IN_5_0
486 GArrowTimestampScalar *
487 garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type,
488                             gint64 value);
489 GARROW_AVAILABLE_IN_5_0
490 gint64
491 garrow_timestamp_scalar_get_value(GArrowTimestampScalar *scalar);
492 
493 
494 #define GARROW_TYPE_DECIMAL128_SCALAR (garrow_decimal128_scalar_get_type())
495 G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128Scalar,
496                          garrow_decimal128_scalar,
497                          GARROW,
498                          DECIMAL128_SCALAR,
499                          GArrowScalar)
500 struct _GArrowDecimal128ScalarClass
501 {
502   GArrowScalarClass parent_class;
503 };
504 
505 GARROW_AVAILABLE_IN_5_0
506 GArrowDecimal128Scalar *
507 garrow_decimal128_scalar_new(GArrowDecimal128DataType *data_type,
508                              GArrowDecimal128 *value);
509 GARROW_AVAILABLE_IN_5_0
510 GArrowDecimal128 *
511 garrow_decimal128_scalar_get_value(GArrowDecimal128Scalar *scalar);
512 
513 
514 #define GARROW_TYPE_DECIMAL256_SCALAR (garrow_decimal256_scalar_get_type())
515 G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256Scalar,
516                          garrow_decimal256_scalar,
517                          GARROW,
518                          DECIMAL256_SCALAR,
519                          GArrowScalar)
520 struct _GArrowDecimal256ScalarClass
521 {
522   GArrowScalarClass parent_class;
523 };
524 
525 GARROW_AVAILABLE_IN_5_0
526 GArrowDecimal256Scalar *
527 garrow_decimal256_scalar_new(GArrowDecimal256DataType *data_type,
528                              GArrowDecimal256 *value);
529 GARROW_AVAILABLE_IN_5_0
530 GArrowDecimal256 *
531 garrow_decimal256_scalar_get_value(GArrowDecimal256Scalar *scalar);
532 
533 
534 #define GARROW_TYPE_BASE_LIST_SCALAR (garrow_base_list_scalar_get_type())
535 G_DECLARE_DERIVABLE_TYPE(GArrowBaseListScalar,
536                          garrow_base_list_scalar,
537                          GARROW,
538                          BASE_LIST_SCALAR,
539                          GArrowScalar)
540 struct _GArrowBaseListScalarClass
541 {
542   GArrowScalarClass parent_class;
543 };
544 
545 GARROW_AVAILABLE_IN_5_0
546 GArrowArray *
547 garrow_base_list_scalar_get_value(GArrowBaseListScalar *scalar);
548 
549 #define GARROW_TYPE_LIST_SCALAR (garrow_list_scalar_get_type())
550 G_DECLARE_DERIVABLE_TYPE(GArrowListScalar,
551                          garrow_list_scalar,
552                          GARROW,
553                          LIST_SCALAR,
554                          GArrowBaseListScalar)
555 struct _GArrowListScalarClass
556 {
557   GArrowBaseListScalarClass parent_class;
558 };
559 
560 GARROW_AVAILABLE_IN_5_0
561 GArrowListScalar *
562 garrow_list_scalar_new(GArrowListArray *value);
563 
564 
565 #define GARROW_TYPE_LARGE_LIST_SCALAR (garrow_large_list_scalar_get_type())
566 G_DECLARE_DERIVABLE_TYPE(GArrowLargeListScalar,
567                          garrow_large_list_scalar,
568                          GARROW,
569                          LARGE_LIST_SCALAR,
570                          GArrowBaseListScalar)
571 struct _GArrowLargeListScalarClass
572 {
573   GArrowBaseListScalarClass parent_class;
574 };
575 
576 GARROW_AVAILABLE_IN_5_0
577 GArrowLargeListScalar *
578 garrow_large_list_scalar_new(GArrowLargeListArray *value);
579 
580 
581 #define GARROW_TYPE_MAP_SCALAR (garrow_map_scalar_get_type())
582 G_DECLARE_DERIVABLE_TYPE(GArrowMapScalar,
583                          garrow_map_scalar,
584                          GARROW,
585                          MAP_SCALAR,
586                          GArrowBaseListScalar)
587 struct _GArrowMapScalarClass
588 {
589   GArrowBaseListScalarClass parent_class;
590 };
591 
592 GARROW_AVAILABLE_IN_5_0
593 GArrowMapScalar *
594 garrow_map_scalar_new(GArrowStructArray *value);
595 
596 
597 #define GARROW_TYPE_STRUCT_SCALAR (garrow_struct_scalar_get_type())
598 G_DECLARE_DERIVABLE_TYPE(GArrowStructScalar,
599                          garrow_struct_scalar,
600                          GARROW,
601                          STRUCT_SCALAR,
602                          GArrowScalar)
603 struct _GArrowStructScalarClass
604 {
605   GArrowScalarClass parent_class;
606 };
607 
608 GARROW_AVAILABLE_IN_5_0
609 GArrowStructScalar *
610 garrow_struct_scalar_new(GArrowStructDataType *data_type,
611                          GList *value);
612 GARROW_AVAILABLE_IN_5_0
613 GList *
614 garrow_struct_scalar_get_value(GArrowStructScalar *scalar);
615 
616 
617 #define GARROW_TYPE_UNION_SCALAR (garrow_union_scalar_get_type())
618 G_DECLARE_DERIVABLE_TYPE(GArrowUnionScalar,
619                          garrow_union_scalar,
620                          GARROW,
621                          UNION_SCALAR,
622                          GArrowScalar)
623 struct _GArrowUnionScalarClass
624 {
625   GArrowScalarClass parent_class;
626 };
627 
628 GARROW_AVAILABLE_IN_6_0
629 gint8
630 garrow_union_scalar_get_type_code(GArrowUnionScalar *scalar);
631 GARROW_AVAILABLE_IN_5_0
632 GArrowScalar *
633 garrow_union_scalar_get_value(GArrowUnionScalar *scalar);
634 
635 
636 #define GARROW_TYPE_SPARSE_UNION_SCALAR (garrow_sparse_union_scalar_get_type())
637 G_DECLARE_DERIVABLE_TYPE(GArrowSparseUnionScalar,
638                          garrow_sparse_union_scalar,
639                          GARROW,
640                          SPARSE_UNION_SCALAR,
641                          GArrowUnionScalar)
642 struct _GArrowSparseUnionScalarClass
643 {
644   GArrowUnionScalarClass parent_class;
645 };
646 
647 GARROW_AVAILABLE_IN_5_0
648 GArrowSparseUnionScalar *
649 garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type,
650                                gint8 type_code,
651                                GArrowScalar *value);
652 
653 
654 #define GARROW_TYPE_DENSE_UNION_SCALAR (garrow_dense_union_scalar_get_type())
655 G_DECLARE_DERIVABLE_TYPE(GArrowDenseUnionScalar,
656                          garrow_dense_union_scalar,
657                          GARROW,
658                          DENSE_UNION_SCALAR,
659                          GArrowUnionScalar)
660 struct _GArrowDenseUnionScalarClass
661 {
662   GArrowUnionScalarClass parent_class;
663 };
664 
665 GARROW_AVAILABLE_IN_5_0
666 GArrowDenseUnionScalar *
667 garrow_dense_union_scalar_new(GArrowDenseUnionDataType *data_type,
668                               gint8 type_code,
669                               GArrowScalar *value);
670 
671 
672 #define GARROW_TYPE_EXTENSION_SCALAR (garrow_extension_scalar_get_type())
673 G_DECLARE_DERIVABLE_TYPE(GArrowExtensionScalar,
674                          garrow_extension_scalar,
675                          GARROW,
676                          EXTENSION_SCALAR,
677                          GArrowScalar)
678 struct _GArrowExtensionScalarClass
679 {
680   GArrowScalarClass parent_class;
681 };
682 
683 G_END_DECLS
684