Skip to content

Commit 107b094

Browse files
authored
cp 3 and 12 (#13)
cherry pick #3 and #12 to 0.21.2 Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
1 parent fbf1fd5 commit 107b094

File tree

3 files changed

+72
-11
lines changed

3 files changed

+72
-11
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fs4 = { version = "0.6.3", optional = true }
3838
levenshtein_automata = "0.2.1"
3939
uuid = { version = "1.0.0", features = ["v4", "serde"] }
4040
crossbeam-channel = "0.5.4"
41-
rust-stemmers = "1.2.0"
41+
rust-stemmers = { git="https://github.com/milvus-io/rust-stemmers.git" , dev = "3b254521"}
4242
downcast-rs = "1.2.0"
4343
bitpacking = { version = "0.8.4", default-features = false, features = [
4444
"bitpacker4x",

columnar/src/column/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,22 @@ impl<T: PartialOrd + Copy + Debug + Send + Sync + 'static> Column<T> {
109109
.map(|value_row_id: RowId| self.values.get_val(value_row_id))
110110
}
111111

112+
/// Get batch of values for the provided docids.Add commentMore actions
113+
/// Note: there may be multiple or no values for a specific doc_id, and the
114+
/// values returned are flattened.
115+
pub fn values_for_docs_flatten(&self, doc_ids: &[DocId]) -> Vec<T>
116+
where T: Default {
117+
let mut doc_ids_out = Vec::with_capacity(doc_ids.len());
118+
let mut row_ids = Vec::with_capacity(doc_ids.len());
119+
self.row_ids_for_docs(doc_ids, &mut doc_ids_out, &mut row_ids);
120+
let mut values = (0..row_ids.len())
121+
.into_iter()
122+
.map(|_| T::default())
123+
.collect::<Vec<_>>();
124+
self.values.get_vals(&row_ids, &mut values);
125+
values
126+
}
127+
112128
/// Get the docids of values which are in the provided value range.
113129
#[inline]
114130
pub fn get_docids_for_value_range(

columnar/src/tests.rs

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,41 @@ impl AssertEqualToColumnValue for DateTime {
579579
}
580580
}
581581

582+
fn assert_column_values_batch<
583+
T: AssertEqualToColumnValue
584+
+ PartialEq
585+
+ Copy
586+
+ PartialOrd
587+
+ Default
588+
+ Debug
589+
+ Send
590+
+ Sync
591+
+ 'static,
592+
>(
593+
col: &Column<T>,
594+
expected: &HashMap<u32, Vec<&ColumnValue>>,
595+
) {
596+
let doc_ids = (0..col.num_docs()).collect::<Vec<_>>();
597+
let expected_value_flatten = doc_ids
598+
.iter()
599+
.flat_map(|id| {
600+
expected
601+
.get(id)
602+
.cloned()
603+
.unwrap_or_default()
604+
.clone()
605+
.into_iter()
606+
})
607+
.collect::<Vec<_>>();
608+
for (val, expected_val) in col
609+
.values_for_docs_flatten(&doc_ids)
610+
.iter()
611+
.zip(expected_value_flatten.iter())
612+
{
613+
val.assert_equal_to_column_value(expected_val);
614+
}
615+
}
616+
582617
fn assert_column_values<
583618
T: AssertEqualToColumnValue + PartialEq + Copy + PartialOrd + Debug + Send + Sync + 'static,
584619
>(
@@ -662,18 +697,28 @@ proptest! {
662697
let col_category: ColumnTypeCategory = dynamic_column.column_type().into();
663698
let expected_col_values: &HashMap<u32, Vec<&ColumnValue>> = expected_columns.get(&(column_name.as_str(), col_category)).unwrap();
664699
match &dynamic_column {
665-
DynamicColumn::Bool(col) =>
666-
assert_column_values(col, expected_col_values),
667-
DynamicColumn::I64(col) =>
668-
assert_column_values(col, expected_col_values),
669-
DynamicColumn::U64(col) =>
670-
assert_column_values(col, expected_col_values),
671-
DynamicColumn::F64(col) =>
672-
assert_column_values(col, expected_col_values),
700+
DynamicColumn::Bool(col) => {
701+
assert_column_values(col, expected_col_values);
702+
assert_column_values_batch(col, expected_col_values);
703+
}
704+
DynamicColumn::I64(col) =>{
705+
assert_column_values(col, expected_col_values);
706+
assert_column_values_batch(col, expected_col_values);
707+
}
708+
DynamicColumn::U64(col) =>{
709+
assert_column_values(col, expected_col_values);
710+
assert_column_values_batch(col, expected_col_values);
711+
}
712+
DynamicColumn::F64(col) =>{
713+
assert_column_values(col, expected_col_values);
714+
assert_column_values_batch(col, expected_col_values);
715+
}
673716
DynamicColumn::IpAddr(col) =>
674717
assert_column_values(col, expected_col_values),
675-
DynamicColumn::DateTime(col) =>
676-
assert_column_values(col, expected_col_values),
718+
DynamicColumn::DateTime(col) =>{
719+
assert_column_values(col, expected_col_values);
720+
assert_column_values_batch(col, expected_col_values);
721+
}
677722
DynamicColumn::Bytes(col) =>
678723
assert_bytes_column_values(col, expected_col_values, false),
679724
DynamicColumn::Str(col) =>

0 commit comments

Comments
 (0)