From a9eb0bf66ff387fd352ab76193a40661e0d8dd09 Mon Sep 17 00:00:00 2001 From: ingrese1nombre <93015563+ingrese1nombre@users.noreply.github.com> Date: Wed, 2 Jul 2025 01:05:06 +0000 Subject: [PATCH] fix: improve QueryStream::into_results to better handle empty results. (#380) --- src/tds/stream/query.rs | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/tds/stream/query.rs b/src/tds/stream/query.rs index 0dc69474..8522cf4a 100644 --- a/src/tds/stream/query.rs +++ b/src/tds/stream/query.rs @@ -222,28 +222,21 @@ impl<'a> QueryStream<'a> { /// of querying. pub async fn into_results(mut self) -> crate::Result>> { let mut results: Vec> = Vec::new(); - let mut result: Option> = None; + let mut result: Vec = if self.try_next().await?.is_some() { + Vec::new() + } else { + return Ok(results); + }; while let Some(item) = self.try_next().await? { - match (item, &mut result) { - (QueryItem::Row(row), None) => { - result = Some(vec![row]); - } - (QueryItem::Row(row), Some(ref mut result)) => result.push(row), - (QueryItem::Metadata(_), None) => { - result = Some(Vec::new()); - } - (QueryItem::Metadata(_), ref mut previous_result) => { - results.push(previous_result.take().unwrap()); - result = None; - } + if let QueryItem::Row(row) = item { + result.push(row); + } else { + results.push(result); + result = Vec::new(); } } - - if let Some(result) = result { - results.push(result); - } - + results.push(result); Ok(results) }