Skip to content

Commit 1cc8563

Browse files
authored
Replace the fn get_data_type by const DATA_TYPE in BinaryArray and StringArray (#2289)
* const fn get_data_type for binary and string Signed-off-by: remzi <[email protected]> * const value instead of const fn Signed-off-by: remzi <[email protected]> * deprecate Signed-off-by: remzi <[email protected]>
1 parent 299908e commit 1cc8563

File tree

6 files changed

+47
-54
lines changed

6 files changed

+47
-54
lines changed

arrow/src/array/array_binary.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,17 @@ pub struct GenericBinaryArray<OffsetSize: OffsetSizeTrait> {
3737
}
3838

3939
impl<OffsetSize: OffsetSizeTrait> GenericBinaryArray<OffsetSize> {
40+
/// Data type of the array.
41+
pub const DATA_TYPE: DataType = if OffsetSize::IS_LARGE {
42+
DataType::LargeBinary
43+
} else {
44+
DataType::Binary
45+
};
46+
4047
/// Get the data type of the array.
41-
// Declare this function as `pub const fn` after
42-
// https://github.com/rust-lang/rust/issues/93706 is merged.
43-
pub fn get_data_type() -> DataType {
44-
if OffsetSize::IS_LARGE {
45-
DataType::LargeBinary
46-
} else {
47-
DataType::Binary
48-
}
48+
#[deprecated(note = "please use `Self::DATA_TYPE` instead")]
49+
pub const fn get_data_type() -> DataType {
50+
Self::DATA_TYPE
4951
}
5052

5153
/// Returns the length for value at index `i`.
@@ -158,7 +160,7 @@ impl<OffsetSize: OffsetSizeTrait> GenericBinaryArray<OffsetSize> {
158160
"The child array cannot contain null values."
159161
);
160162

161-
let builder = ArrayData::builder(Self::get_data_type())
163+
let builder = ArrayData::builder(Self::DATA_TYPE)
162164
.len(v.len())
163165
.offset(v.offset())
164166
.add_buffer(v.data_ref().buffers()[0].clone())
@@ -197,7 +199,7 @@ impl<OffsetSize: OffsetSizeTrait> GenericBinaryArray<OffsetSize> {
197199
assert!(!offsets.is_empty()); // wrote at least one
198200
let actual_len = (offsets.len() / std::mem::size_of::<OffsetSize>()) - 1;
199201

200-
let array_data = ArrayData::builder(Self::get_data_type())
202+
let array_data = ArrayData::builder(Self::DATA_TYPE)
201203
.len(actual_len)
202204
.add_buffer(offsets.into())
203205
.add_buffer(values.into());
@@ -276,7 +278,7 @@ impl<OffsetSize: OffsetSizeTrait> From<ArrayData> for GenericBinaryArray<OffsetS
276278
fn from(data: ArrayData) -> Self {
277279
assert_eq!(
278280
data.data_type(),
279-
&Self::get_data_type(),
281+
&Self::DATA_TYPE,
280282
"[Large]BinaryArray expects Datatype::[Large]Binary"
281283
);
282284
assert_eq!(
@@ -353,7 +355,7 @@ where
353355

354356
// calculate actual data_len, which may be different from the iterator's upper bound
355357
let data_len = offsets.len() - 1;
356-
let array_data = ArrayData::builder(Self::get_data_type())
358+
let array_data = ArrayData::builder(Self::DATA_TYPE)
357359
.len(data_len)
358360
.add_buffer(Buffer::from_slice_ref(&offsets))
359361
.add_buffer(Buffer::from_slice_ref(&values))
@@ -598,7 +600,7 @@ mod tests {
598600
let offsets = [0, 5, 5, 12].map(|n| O::from_usize(n).unwrap());
599601

600602
// Array data: ["hello", "", "parquet"]
601-
let array_data1 = ArrayData::builder(GenericBinaryArray::<O>::get_data_type())
603+
let array_data1 = ArrayData::builder(GenericBinaryArray::<O>::DATA_TYPE)
602604
.len(3)
603605
.add_buffer(Buffer::from_slice_ref(&offsets))
604606
.add_buffer(Buffer::from_slice_ref(&values))

arrow/src/array/array_string.rs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,17 @@ pub struct GenericStringArray<OffsetSize: OffsetSizeTrait> {
3939
}
4040

4141
impl<OffsetSize: OffsetSizeTrait> GenericStringArray<OffsetSize> {
42+
/// Data type of the array.
43+
pub const DATA_TYPE: DataType = if OffsetSize::IS_LARGE {
44+
DataType::LargeUtf8
45+
} else {
46+
DataType::Utf8
47+
};
48+
4249
/// Get the data type of the array.
43-
// Declare this function as `pub const fn` after
44-
// https://github.com/rust-lang/rust/issues/93706 is merged.
45-
pub fn get_data_type() -> DataType {
46-
if OffsetSize::IS_LARGE {
47-
DataType::LargeUtf8
48-
} else {
49-
DataType::Utf8
50-
}
50+
#[deprecated(note = "please use `Self::DATA_TYPE` instead")]
51+
pub const fn get_data_type() -> DataType {
52+
Self::DATA_TYPE
5153
}
5254

5355
/// Returns the length for the element at index `i`.
@@ -148,7 +150,7 @@ impl<OffsetSize: OffsetSizeTrait> GenericStringArray<OffsetSize> {
148150
"The child array cannot contain null values."
149151
);
150152

151-
let builder = ArrayData::builder(Self::get_data_type())
153+
let builder = ArrayData::builder(Self::DATA_TYPE)
152154
.len(v.len())
153155
.offset(v.offset())
154156
.add_buffer(v.data().buffers()[0].clone())
@@ -187,7 +189,7 @@ impl<OffsetSize: OffsetSizeTrait> GenericStringArray<OffsetSize> {
187189
assert!(!offsets.is_empty()); // wrote at least one
188190
let actual_len = (offsets.len() / std::mem::size_of::<OffsetSize>()) - 1;
189191

190-
let array_data = ArrayData::builder(Self::get_data_type())
192+
let array_data = ArrayData::builder(Self::DATA_TYPE)
191193
.len(actual_len)
192194
.add_buffer(offsets.into())
193195
.add_buffer(values.into());
@@ -264,7 +266,7 @@ where
264266

265267
// calculate actual data_len, which may be different from the iterator's upper bound
266268
let data_len = (offsets.len() / offset_size) - 1;
267-
let array_data = ArrayData::builder(Self::get_data_type())
269+
let array_data = ArrayData::builder(Self::DATA_TYPE)
268270
.len(data_len)
269271
.add_buffer(offsets.into())
270272
.add_buffer(values.into())
@@ -342,10 +344,7 @@ impl<OffsetSize: OffsetSizeTrait> From<GenericBinaryArray<OffsetSize>>
342344
for GenericStringArray<OffsetSize>
343345
{
344346
fn from(v: GenericBinaryArray<OffsetSize>) -> Self {
345-
let builder = v
346-
.into_data()
347-
.into_builder()
348-
.data_type(Self::get_data_type());
347+
let builder = v.into_data().into_builder().data_type(Self::DATA_TYPE);
349348
let data = unsafe { builder.build_unchecked() };
350349
Self::from(data)
351350
}
@@ -355,7 +354,7 @@ impl<OffsetSize: OffsetSizeTrait> From<ArrayData> for GenericStringArray<OffsetS
355354
fn from(data: ArrayData) -> Self {
356355
assert_eq!(
357356
data.data_type(),
358-
&Self::get_data_type(),
357+
&Self::DATA_TYPE,
359358
"[Large]StringArray expects Datatype::[Large]Utf8"
360359
);
361360
assert_eq!(

arrow/src/array/builder/generic_binary_builder.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18-
use crate::{
19-
array::{
20-
ArrayBuilder, ArrayDataBuilder, ArrayRef, GenericBinaryArray, OffsetSizeTrait,
21-
UInt8BufferBuilder,
22-
},
23-
datatypes::DataType,
18+
use crate::array::{
19+
ArrayBuilder, ArrayDataBuilder, ArrayRef, GenericBinaryArray, OffsetSizeTrait,
20+
UInt8BufferBuilder,
2421
};
2522
use std::any::Any;
2623
use std::sync::Arc;
@@ -80,11 +77,7 @@ impl<OffsetSize: OffsetSizeTrait> GenericBinaryBuilder<OffsetSize> {
8077

8178
/// Builds the [`GenericBinaryArray`] and reset this builder.
8279
pub fn finish(&mut self) -> GenericBinaryArray<OffsetSize> {
83-
let array_type = if OffsetSize::IS_LARGE {
84-
DataType::LargeBinary
85-
} else {
86-
DataType::Binary
87-
};
80+
let array_type = GenericBinaryArray::<OffsetSize>::DATA_TYPE;
8881
let array_builder = ArrayDataBuilder::new(array_type)
8982
.len(self.len())
9083
.add_buffer(self.offsets_builder.finish())

arrow/src/compute/kernels/concat_elements.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub fn concat_elements_utf8<Offset: OffsetSizeTrait>(
7575
output_offsets.append(Offset::from_usize(output_values.len()).unwrap());
7676
}
7777

78-
let builder = ArrayDataBuilder::new(GenericStringArray::<Offset>::get_data_type())
78+
let builder = ArrayDataBuilder::new(GenericStringArray::<Offset>::DATA_TYPE)
7979
.len(left.len())
8080
.add_buffer(output_offsets.finish())
8181
.add_buffer(output_values.finish())
@@ -155,7 +155,7 @@ pub fn concat_elements_utf8_many<Offset: OffsetSizeTrait>(
155155
output_offsets.append(Offset::from_usize(output_values.len()).unwrap());
156156
}
157157

158-
let builder = ArrayDataBuilder::new(GenericStringArray::<Offset>::get_data_type())
158+
let builder = ArrayDataBuilder::new(GenericStringArray::<Offset>::DATA_TYPE)
159159
.len(size)
160160
.add_buffer(output_offsets.finish())
161161
.add_buffer(output_values.finish())

arrow/src/compute/kernels/substring.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ pub fn substring_by_char<OffsetSize: OffsetSizeTrait>(
205205
});
206206
let data = unsafe {
207207
ArrayData::new_unchecked(
208-
GenericStringArray::<OffsetSize>::get_data_type(),
208+
GenericStringArray::<OffsetSize>::DATA_TYPE,
209209
array.len(),
210210
None,
211211
array
@@ -294,7 +294,7 @@ fn binary_substring<OffsetSize: OffsetSizeTrait>(
294294

295295
let data = unsafe {
296296
ArrayData::new_unchecked(
297-
GenericBinaryArray::<OffsetSize>::get_data_type(),
297+
GenericBinaryArray::<OffsetSize>::DATA_TYPE,
298298
array.len(),
299299
None,
300300
array
@@ -425,7 +425,7 @@ fn utf8_substring<OffsetSize: OffsetSizeTrait>(
425425

426426
let data = unsafe {
427427
ArrayData::new_unchecked(
428-
GenericStringArray::<OffsetSize>::get_data_type(),
428+
GenericStringArray::<OffsetSize>::DATA_TYPE,
429429
array.len(),
430430
None,
431431
array
@@ -587,7 +587,7 @@ mod tests {
587587
// set the first and third element to be valid
588588
let bitmap = [0b101_u8];
589589

590-
let data = ArrayData::builder(GenericBinaryArray::<O>::get_data_type())
590+
let data = ArrayData::builder(GenericBinaryArray::<O>::DATA_TYPE)
591591
.len(2)
592592
.add_buffer(Buffer::from_slice_ref(offsets))
593593
.add_buffer(Buffer::from_iter(values))
@@ -814,7 +814,7 @@ mod tests {
814814
// set the first and third element to be valid
815815
let bitmap = [0b101_u8];
816816

817-
let data = ArrayData::builder(GenericStringArray::<O>::get_data_type())
817+
let data = ArrayData::builder(GenericStringArray::<O>::DATA_TYPE)
818818
.len(2)
819819
.add_buffer(Buffer::from_slice_ref(offsets))
820820
.add_buffer(Buffer::from(values))
@@ -939,7 +939,7 @@ mod tests {
939939
// set the first and third element to be valid
940940
let bitmap = [0b101_u8];
941941

942-
let data = ArrayData::builder(GenericStringArray::<O>::get_data_type())
942+
let data = ArrayData::builder(GenericStringArray::<O>::DATA_TYPE)
943943
.len(2)
944944
.add_buffer(Buffer::from_slice_ref(offsets))
945945
.add_buffer(Buffer::from(values))

arrow/src/compute/kernels/take.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -771,12 +771,11 @@ where
771771
};
772772
}
773773

774-
let array_data =
775-
ArrayData::builder(GenericStringArray::<OffsetSize>::get_data_type())
776-
.len(data_len)
777-
.add_buffer(offsets_buffer.into())
778-
.add_buffer(values.into())
779-
.null_bit_buffer(nulls);
774+
let array_data = ArrayData::builder(GenericStringArray::<OffsetSize>::DATA_TYPE)
775+
.len(data_len)
776+
.add_buffer(offsets_buffer.into())
777+
.add_buffer(values.into())
778+
.null_bit_buffer(nulls);
780779

781780
let array_data = unsafe { array_data.build_unchecked() };
782781

0 commit comments

Comments
 (0)