@@ -21,9 +21,9 @@ use std::fmt::{Display, Formatter};
21
21
use std:: sync:: Arc ;
22
22
23
23
use arrow:: array:: {
24
- new_null_array, Array , ArrayAccessor , ArrayDataBuilder , ArrayIter , ArrayRef ,
25
- GenericStringArray , GenericStringBuilder , LargeStringArray , OffsetSizeTrait ,
26
- StringArray , StringBuilder , StringViewArray , StringViewBuilder ,
24
+ make_view , new_null_array, Array , ArrayAccessor , ArrayDataBuilder , ArrayIter ,
25
+ ArrayRef , ByteView , GenericStringArray , GenericStringBuilder , LargeStringArray ,
26
+ OffsetSizeTrait , StringArray , StringBuilder , StringViewArray , StringViewBuilder ,
27
27
} ;
28
28
use arrow:: buffer:: { Buffer , MutableBuffer , NullBuffer } ;
29
29
use arrow:: datatypes:: DataType ;
@@ -33,7 +33,27 @@ use datafusion_common::Result;
33
33
use datafusion_common:: { exec_err, ScalarValue } ;
34
34
use datafusion_expr:: ColumnarValue ;
35
35
36
- use crate :: unicode:: substr:: make_and_append_view;
36
+ /// Make a `u128` based on the given substr, start(offset to view.offset), and
37
+ /// push into to the given buffers
38
+ // TODO: tmp copy, remove after #12383 is merged
39
+ fn make_and_append_view (
40
+ views_buffer : & mut Vec < u128 > ,
41
+ null_builder : & mut NullBufferBuilder ,
42
+ raw : & u128 ,
43
+ substr : & str ,
44
+ start : u32 ,
45
+ ) {
46
+ let substr_len = substr. len ( ) ;
47
+ let sub_view = if substr_len > 12 {
48
+ let view = ByteView :: from ( * raw) ;
49
+ make_view ( substr. as_bytes ( ) , view. buffer_index , view. offset + start)
50
+ } else {
51
+ // inline value does not need block id or offset
52
+ make_view ( substr. as_bytes ( ) , 0 , 0 )
53
+ } ;
54
+ views_buffer. push ( sub_view) ;
55
+ null_builder. append_non_null ( ) ;
56
+ }
37
57
38
58
pub ( crate ) enum TrimType {
39
59
Left ,
0 commit comments