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

Method invoke_with_args

datafusion/functions/src/string/repeat.rs:99–156  ·  view source on GitHub ↗
(&self, args: ScalarFunctionArgs)

Source from the content-addressed store, hash-verified

97 }
98
99 fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result<ColumnarValue> {
100 let return_type = args.return_field.data_type().clone();
101 let [string_arg, count_arg] = take_function_args(self.name(), args.args)?;
102
103 // Early return if either argument is a scalar null
104 if let ColumnarValue::Scalar(s) = &string_arg
105 && s.is_null()
106 {
107 return Ok(ColumnarValue::Scalar(ScalarValue::try_from(&return_type)?));
108 }
109 if let ColumnarValue::Scalar(c) = &count_arg
110 && c.is_null()
111 {
112 return Ok(ColumnarValue::Scalar(ScalarValue::try_from(&return_type)?));
113 }
114
115 match (&string_arg, &count_arg) {
116 (
117 ColumnarValue::Scalar(string_scalar),
118 ColumnarValue::Scalar(count_scalar),
119 ) => {
120 let count = match count_scalar {
121 ScalarValue::Int64(Some(n)) => *n,
122 _ => {
123 return internal_err!(
124 "Unexpected data type {:?} for repeat count",
125 count_scalar.data_type()
126 );
127 }
128 };
129
130 let result = match string_scalar {
131 ScalarValue::Utf8View(Some(s)) => ScalarValue::Utf8View(Some(
132 compute_repeat(s, count, i32::MAX as usize)?,
133 )),
134 ScalarValue::Utf8(Some(s)) => ScalarValue::Utf8(Some(
135 compute_repeat(s, count, i32::MAX as usize)?,
136 )),
137 ScalarValue::LargeUtf8(Some(s)) => ScalarValue::LargeUtf8(Some(
138 compute_repeat(s, count, i64::MAX as usize)?,
139 )),
140 _ => {
141 return internal_err!(
142 "Unexpected data type {:?} for function repeat",
143 string_scalar.data_type()
144 );
145 }
146 };
147
148 Ok(ColumnarValue::Scalar(result))
149 }
150 _ => {
151 let string_array = string_arg.to_array(args.number_rows)?;
152 let count_array = count_arg.to_array(args.number_rows)?;
153 Ok(ColumnarValue::Array(repeat(&string_array, &count_array)?))
154 }
155 }
156 }

Callers

nothing calls this directly

Calls 8

take_function_argsFunction · 0.85
compute_repeatFunction · 0.85
repeatFunction · 0.85
cloneMethod · 0.45
data_typeMethod · 0.45
nameMethod · 0.45
is_nullMethod · 0.45
to_arrayMethod · 0.45

Tested by

no test coverage detected