MCPcopy Create free account
hub / github.com/apache/datafusion / invoke_with_args

Method invoke_with_args

datafusion/functions/src/unicode/translate.rs:93–158  ·  view source on GitHub ↗
(&self, args: ScalarFunctionArgs)

Source from the content-addressed store, hash-verified

91 }
92
93 fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result<ColumnarValue> {
94 // When from and to are scalars, pre-build the translation map once
95 if let (Some(from_str), Some(to_str)) = (
96 try_as_scalar_str(&args.args[1]),
97 try_as_scalar_str(&args.args[2]),
98 ) {
99 let to_chars: Vec<char> = to_str.chars().collect();
100
101 let mut from_map: HashMap<char, usize> = HashMap::new();
102 for (index, c) in from_str.chars().enumerate() {
103 from_map.entry(c).or_insert(index);
104 }
105
106 let ascii_table = build_ascii_translate_table(from_str, to_str);
107
108 let string_array = args.args[0].to_array_of_size(args.number_rows)?;
109 let len = string_array.len();
110
111 let result = match string_array.data_type() {
112 DataType::Utf8View => {
113 let arr = string_array.as_string_view();
114 let builder = StringViewBuilder::with_capacity(len);
115 translate_with_map(
116 arr,
117 &from_map,
118 &to_chars,
119 ascii_table.as_ref(),
120 builder,
121 )
122 }
123 DataType::Utf8 => {
124 let arr = string_array.as_string::<i32>();
125 let builder =
126 StringBuilder::with_capacity(len, arr.value_data().len());
127 translate_with_map(
128 arr,
129 &from_map,
130 &to_chars,
131 ascii_table.as_ref(),
132 builder,
133 )
134 }
135 DataType::LargeUtf8 => {
136 let arr = string_array.as_string::<i64>();
137 let builder =
138 LargeStringBuilder::with_capacity(len, arr.value_data().len());
139 translate_with_map(
140 arr,
141 &from_map,
142 &to_chars,
143 ascii_table.as_ref(),
144 builder,
145 )
146 }
147 other => {
148 return exec_err!(
149 "Unsupported data type {other:?} for function translate"
150 );

Callers

nothing calls this directly

Calls 10

try_as_scalar_strFunction · 0.85
newFunction · 0.85
translate_with_mapFunction · 0.85
collectMethod · 0.80
make_scalar_functionFunction · 0.50
to_array_of_sizeMethod · 0.45
lenMethod · 0.45
data_typeMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected