mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-08-12 09:19:44 +00:00
refactor: scan Batches directly (#6369)
* refactor: scan `Batch`es directly Signed-off-by: luofucong <luofc@foxmail.com> * fix ci Signed-off-by: luofucong <luofc@foxmail.com> * resolve PR comments Signed-off-by: luofucong <luofc@foxmail.com> * resolve PR comments Signed-off-by: luofucong <luofc@foxmail.com> --------- Signed-off-by: luofucong <luofc@foxmail.com>
This commit is contained in:
@@ -67,14 +67,34 @@ pub struct ScanRequest {
|
||||
|
||||
impl Display for ScanRequest {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "ScanRequest {{")?;
|
||||
enum Delimiter {
|
||||
None,
|
||||
Init,
|
||||
}
|
||||
|
||||
impl Delimiter {
|
||||
fn as_str(&mut self) -> &str {
|
||||
match self {
|
||||
Delimiter::None => {
|
||||
*self = Delimiter::Init;
|
||||
""
|
||||
}
|
||||
Delimiter::Init => ", ",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut delimiter = Delimiter::None;
|
||||
|
||||
write!(f, "ScanRequest {{ ")?;
|
||||
if let Some(projection) = &self.projection {
|
||||
write!(f, "projection: {:?},", projection)?;
|
||||
write!(f, "{}projection: {:?}", delimiter.as_str(), projection)?;
|
||||
}
|
||||
if !self.filters.is_empty() {
|
||||
write!(
|
||||
f,
|
||||
", filters: [{}]",
|
||||
"{}filters: [{}]",
|
||||
delimiter.as_str(),
|
||||
self.filters
|
||||
.iter()
|
||||
.map(|f| f.to_string())
|
||||
@@ -83,23 +103,90 @@ impl Display for ScanRequest {
|
||||
)?;
|
||||
}
|
||||
if let Some(output_ordering) = &self.output_ordering {
|
||||
write!(f, ", output_ordering: {:?}", output_ordering)?;
|
||||
write!(
|
||||
f,
|
||||
"{}output_ordering: {:?}",
|
||||
delimiter.as_str(),
|
||||
output_ordering
|
||||
)?;
|
||||
}
|
||||
if let Some(limit) = &self.limit {
|
||||
write!(f, ", limit: {}", limit)?;
|
||||
write!(f, "{}limit: {}", delimiter.as_str(), limit)?;
|
||||
}
|
||||
if let Some(series_row_selector) = &self.series_row_selector {
|
||||
write!(f, ", series_row_selector: {}", series_row_selector)?;
|
||||
write!(
|
||||
f,
|
||||
"{}series_row_selector: {}",
|
||||
delimiter.as_str(),
|
||||
series_row_selector
|
||||
)?;
|
||||
}
|
||||
if let Some(sequence) = &self.sequence {
|
||||
write!(f, ", sequence: {}", sequence)?;
|
||||
write!(f, "{}sequence: {}", delimiter.as_str(), sequence)?;
|
||||
}
|
||||
if let Some(sst_min_sequence) = &self.sst_min_sequence {
|
||||
write!(f, ", sst_min_sequence: {}", sst_min_sequence)?;
|
||||
write!(
|
||||
f,
|
||||
"{}sst_min_sequence: {}",
|
||||
delimiter.as_str(),
|
||||
sst_min_sequence
|
||||
)?;
|
||||
}
|
||||
if let Some(distribution) = &self.distribution {
|
||||
write!(f, ", distribution: {}", distribution)?;
|
||||
write!(f, "{}distribution: {}", delimiter.as_str(), distribution)?;
|
||||
}
|
||||
write!(f, "}}")
|
||||
write!(f, " }}")
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use datafusion_expr::{binary_expr, col, lit, Operator};
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_display_scan_request() {
|
||||
let request = ScanRequest {
|
||||
..Default::default()
|
||||
};
|
||||
assert_eq!(request.to_string(), "ScanRequest { }");
|
||||
|
||||
let request = ScanRequest {
|
||||
projection: Some(vec![1, 2]),
|
||||
filters: vec![
|
||||
binary_expr(col("i"), Operator::Gt, lit(1)),
|
||||
binary_expr(col("s"), Operator::Eq, lit("x")),
|
||||
],
|
||||
limit: Some(10),
|
||||
..Default::default()
|
||||
};
|
||||
assert_eq!(
|
||||
request.to_string(),
|
||||
r#"ScanRequest { projection: [1, 2], filters: [i > Int32(1), s = Utf8("x")], limit: 10 }"#
|
||||
);
|
||||
|
||||
let request = ScanRequest {
|
||||
filters: vec![
|
||||
binary_expr(col("i"), Operator::Gt, lit(1)),
|
||||
binary_expr(col("s"), Operator::Eq, lit("x")),
|
||||
],
|
||||
limit: Some(10),
|
||||
..Default::default()
|
||||
};
|
||||
assert_eq!(
|
||||
request.to_string(),
|
||||
r#"ScanRequest { filters: [i > Int32(1), s = Utf8("x")], limit: 10 }"#
|
||||
);
|
||||
|
||||
let request = ScanRequest {
|
||||
projection: Some(vec![1, 2]),
|
||||
limit: Some(10),
|
||||
..Default::default()
|
||||
};
|
||||
assert_eq!(
|
||||
request.to_string(),
|
||||
"ScanRequest { projection: [1, 2], limit: 10 }"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user