@@ -50,11 +50,9 @@ ArrowErrorCode ToArrowSchema(const Type& type, bool optional, std::string_view n
5050
5151 switch (type.type_id ()) {
5252 case TypeId::kStruct : {
53- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_STRUCT));
54-
5553 const auto & struct_type = static_cast <const StructType&>(type);
5654 const auto & fields = struct_type.fields ();
57- NANOARROW_RETURN_NOT_OK (ArrowSchemaAllocateChildren (schema, fields.size ()));
55+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeStruct (schema, fields.size ()));
5856
5957 for (size_t i = 0 ; i < fields.size (); i++) {
6058 const auto & field = fields[i];
@@ -64,7 +62,7 @@ ArrowErrorCode ToArrowSchema(const Type& type, bool optional, std::string_view n
6462 }
6563 } break ;
6664 case TypeId::kList : {
67- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_LIST));
65+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_LIST));
6866
6967 const auto & list_type = static_cast <const ListType&>(type);
7068 const auto & elem_field = list_type.fields ()[0 ];
@@ -73,7 +71,7 @@ ArrowErrorCode ToArrowSchema(const Type& type, bool optional, std::string_view n
7371 schema->children [0 ]));
7472 } break ;
7573 case TypeId::kMap : {
76- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_MAP));
74+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_MAP));
7775
7876 const auto & map_type = static_cast <const MapType&>(type);
7977 const auto & key_field = map_type.key ();
@@ -86,61 +84,55 @@ ArrowErrorCode ToArrowSchema(const Type& type, bool optional, std::string_view n
8684 schema->children [0 ]->children [1 ]));
8785 } break ;
8886 case TypeId::kBoolean :
89- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_BOOL));
87+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_BOOL));
9088 break ;
9189 case TypeId::kInt :
92- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_INT32));
90+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_INT32));
9391 break ;
9492 case TypeId::kLong :
95- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_INT64));
93+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_INT64));
9694 break ;
9795 case TypeId::kFloat :
98- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_FLOAT));
96+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_FLOAT));
9997 break ;
10098 case TypeId::kDouble :
101- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_DOUBLE));
99+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_DOUBLE));
102100 break ;
103101 case TypeId::kDecimal : {
104- ArrowSchemaInit (schema);
105102 const auto & decimal_type = static_cast <const DecimalType&>(type);
106103 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeDecimal (schema, NANOARROW_TYPE_DECIMAL128,
107104 decimal_type.precision (),
108105 decimal_type.scale ()));
109106 } break ;
110107 case TypeId::kDate :
111- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_DATE32));
108+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_DATE32));
112109 break ;
113110 case TypeId::kTime : {
114- ArrowSchemaInit (schema);
115111 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeDateTime (schema, NANOARROW_TYPE_TIME64,
116112 NANOARROW_TIME_UNIT_MICRO,
117113 /* timezone=*/ nullptr ));
118114 } break ;
119115 case TypeId::kTimestamp : {
120- ArrowSchemaInit (schema);
121116 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeDateTime (schema, NANOARROW_TYPE_TIMESTAMP,
122117 NANOARROW_TIME_UNIT_MICRO,
123118 /* timezone=*/ nullptr ));
124119 } break ;
125120 case TypeId::kTimestampTz : {
126- ArrowSchemaInit (schema);
127121 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeDateTime (
128122 schema, NANOARROW_TYPE_TIMESTAMP, NANOARROW_TIME_UNIT_MICRO, " UTC" ));
129123 } break ;
130124 case TypeId::kString :
131- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_STRING));
125+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_STRING));
132126 break ;
133127 case TypeId::kBinary :
134- NANOARROW_RETURN_NOT_OK (ArrowSchemaInitFromType (schema, NANOARROW_TYPE_BINARY));
128+ NANOARROW_RETURN_NOT_OK (ArrowSchemaSetType (schema, NANOARROW_TYPE_BINARY));
135129 break ;
136130 case TypeId::kFixed : {
137- ArrowSchemaInit (schema);
138131 const auto & fixed_type = static_cast <const FixedType&>(type);
139132 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeFixedSize (
140133 schema, NANOARROW_TYPE_FIXED_SIZE_BINARY, fixed_type.length ()));
141134 } break ;
142135 case TypeId::kUuid : {
143- ArrowSchemaInit (schema);
144136 NANOARROW_RETURN_NOT_OK (ArrowSchemaSetTypeFixedSize (
145137 schema, NANOARROW_TYPE_FIXED_SIZE_BINARY, /* fixed_size=*/ 16 ));
146138 NANOARROW_RETURN_NOT_OK (
@@ -173,6 +165,8 @@ Status ToArrowSchema(const Schema& schema, ArrowSchema* out) {
173165 return InvalidArgument (" Output Arrow schema cannot be null" );
174166 }
175167
168+ ArrowSchemaInit (out);
169+
176170 if (ArrowErrorCode errorCode = ToArrowSchema (schema, /* optional=*/ false , /* name=*/ " " ,
177171 /* field_id=*/ std::nullopt , out);
178172 errorCode != NANOARROW_OK) {
0 commit comments