in azure-kusto-data/src/operations/query.rs [212:275]
fn next(&mut self) -> Option<Self::Item> {
if self.finished {
return None;
}
let next_table = self.tables.find_map(|t| match t {
V2QueryResult::DataTable(_) | V2QueryResult::TableHeader(_) => Some(t),
_ => None,
});
if let Some(V2QueryResult::DataTable(t)) = next_table {
return Some(t);
}
let mut table = DataTable {
table_id: 0,
table_name: "".to_string(),
table_kind: TableKind::Unknown,
columns: vec![],
rows: vec![],
};
if let Some(V2QueryResult::TableHeader(header)) = next_table {
table.table_id = header.table_id;
table.table_kind = header.table_kind;
table.table_name = header.table_name;
table.columns = header.columns;
} else {
self.finished = true;
return None;
}
let mut finished_table = false;
for result in &mut self.tables {
match result {
V2QueryResult::TableFragment(fragment) => {
assert_eq!(fragment.table_id, table.table_id);
match fragment.table_fragment_type {
TableFragmentType::DataAppend => table.rows.extend(fragment.rows),
TableFragmentType::DataReplace => table.rows = fragment.rows,
};
}
V2QueryResult::TableProgress(progress) => {
assert_eq!(progress.table_id, table.table_id);
}
V2QueryResult::TableCompletion(completion) => {
assert_eq!(completion.table_id, table.table_id);
assert_eq!(
completion.row_count,
TryInto::<i32>::try_into(table.rows.len()).expect("Row count overflow")
);
finished_table = true;
break;
}
_ => unreachable!("Unexpected result type"),
}
}
if finished_table {
Some(table)
} else {
None
}
}