Skip to content

Commit b711527

Browse files
Let Inserter accept &String and &Vec<u8>
1 parent f631fc6 commit b711527

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

crates/duckdb/src/core/vector.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ impl Inserter<&str> for FlatVector {
144144
}
145145
}
146146

147+
impl Inserter<&String> for FlatVector {
148+
fn insert(&self, index: usize, value: &String) {
149+
let cstr = CString::new(value.as_bytes()).unwrap();
150+
unsafe {
151+
duckdb_vector_assign_string_element(self.ptr, index as u64, cstr.as_ptr());
152+
}
153+
}
154+
}
155+
147156
impl Inserter<&[u8]> for FlatVector {
148157
fn insert(&self, index: usize, value: &[u8]) {
149158
let value_size = value.len();
@@ -159,6 +168,21 @@ impl Inserter<&[u8]> for FlatVector {
159168
}
160169
}
161170

171+
impl Inserter<&Vec<u8>> for FlatVector {
172+
fn insert(&self, index: usize, value: &Vec<u8>) {
173+
let value_size = value.len();
174+
unsafe {
175+
// This function also works for binary data. https://duckdb.org/docs/api/c/api#duckdb_vector_assign_string_element_len
176+
duckdb_vector_assign_string_element_len(
177+
self.ptr,
178+
index as u64,
179+
value.as_ptr() as *const ::std::os::raw::c_char,
180+
value_size as u64,
181+
);
182+
}
183+
}
184+
}
185+
162186
/// A list vector.
163187
pub struct ListVector {
164188
/// ListVector does not own the vector pointer.

0 commit comments

Comments
 (0)