Skip to content

Commit 4da5044

Browse files
committed
feat(query): eliminate the allocation
1 parent 7480daa commit 4da5044

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/query/functions-v2/src/scalars/string.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use common_expression::types::NumberType;
2525
use common_expression::types::StringType;
2626
use common_expression::vectorize_with_builder_1_arg;
2727
use common_expression::vectorize_with_builder_2_arg;
28+
use common_expression::vectorize_with_builder_4_arg;
2829
use common_expression::FunctionProperty;
2930
use common_expression::FunctionRegistry;
3031
use common_expression::Value;
@@ -135,11 +136,12 @@ pub fn register(registry: &mut FunctionRegistry) {
135136
},
136137
);
137138

138-
registry.register_4_arg::<StringType, NumberType<i64>, NumberType<i64>, StringType, StringType, _, _>(
139+
registry.register_passthrough_nullable_4_arg::<StringType, NumberType<i64>, NumberType<i64>, StringType, StringType, _, _>(
139140
"insert",
140141
FunctionProperty::default(),
141142
|_, _, _, _| None,
142-
|srcstr, pos, len, substr| {
143+
vectorize_with_builder_4_arg::<StringType, NumberType<i64>, NumberType<i64>, StringType, StringType>(
144+
|srcstr, pos, len, substr, builder| {
143145
let mut values: Vec<u8> = vec![];
144146

145147
let sl = srcstr.len() as i64;
@@ -154,8 +156,10 @@ pub fn register(registry: &mut FunctionRegistry) {
154156
values.extend_from_slice(&srcstr[p + l..]);
155157
}
156158
}
157-
values
158-
}
159+
builder.put_slice(&values);
160+
builder.commit_row();
161+
Ok(())
162+
}),
159163
);
160164

161165
registry.register_3_arg::<StringType, NumberType<u64>, StringType, StringType, _, _>(

0 commit comments

Comments
 (0)