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

Function spark_unhex

datafusion/spark/src/function/math/unhex.rs:152–209  ·  view source on GitHub ↗
(args: &[ColumnarValue])

Source from the content-addressed store, hash-verified

150}
151
152fn spark_unhex(args: &[ColumnarValue]) -> Result<ColumnarValue, DataFusionError> {
153 let [args] = take_function_args("unhex", args)?;
154
155 match args {
156 ColumnarValue::Array(array) => match array.data_type() {
157 DataType::Utf8 => {
158 let array = as_string_array(array)?;
159 let capacity = array.values().len().div_ceil(2);
160 Ok(ColumnarValue::Array(unhex_array(
161 array.iter(),
162 array.len(),
163 capacity,
164 )?))
165 }
166 DataType::Utf8View => {
167 let array = as_string_view_array(array)?;
168 // Estimate capacity since StringViewArray data can be scattered or inlined.
169 let capacity = array.len() * 32;
170 Ok(ColumnarValue::Array(unhex_array(
171 array.iter(),
172 array.len(),
173 capacity,
174 )?))
175 }
176 DataType::LargeUtf8 => {
177 let array = as_large_string_array(array)?;
178 let capacity = array.values().len().div_ceil(2);
179 Ok(ColumnarValue::Array(unhex_array(
180 array.iter(),
181 array.len(),
182 capacity,
183 )?))
184 }
185 _ => exec_err!(
186 "unhex only supports string argument, but got: {}",
187 array.data_type()
188 ),
189 },
190 ColumnarValue::Scalar(sv) => match sv {
191 ScalarValue::Utf8(None)
192 | ScalarValue::Utf8View(None)
193 | ScalarValue::LargeUtf8(None) => {
194 Ok(ColumnarValue::Scalar(ScalarValue::Binary(None)))
195 }
196 ScalarValue::Utf8(Some(s))
197 | ScalarValue::Utf8View(Some(s))
198 | ScalarValue::LargeUtf8(Some(s)) => {
199 Ok(ColumnarValue::Scalar(ScalarValue::Binary(unhex_scalar(s))))
200 }
201 _ => {
202 exec_err!(
203 "unhex only supports string argument, but got: {}",
204 sv.data_type()
205 )
206 }
207 },
208 }
209}

Callers 1

invoke_with_argsMethod · 0.85

Calls 10

take_function_argsFunction · 0.85
as_string_arrayFunction · 0.85
unhex_arrayFunction · 0.85
as_string_view_arrayFunction · 0.85
as_large_string_arrayFunction · 0.85
unhex_scalarFunction · 0.85
data_typeMethod · 0.45
lenMethod · 0.45
valuesMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…