This is an automated email from the ASF dual-hosted git repository.
csy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/auron.git
The following commit(s) were added to refs/heads/master by this push:
new 87de6be3 [AURON #1917] Clean up Clippy format/string lints (#1948)
87de6be3 is described below
commit 87de6be3371fbdb5a2b8c95f455ef066e08bd0f9
Author: Miao <[email protected]>
AuthorDate: Mon Jan 26 11:16:25 2026 +0800
[AURON #1917] Clean up Clippy format/string lints (#1948)
# Which issue does this PR close?
Closes #1917
# Rationale for this change
Improve Rust code quality.
# What changes are included in this PR?
# Are there any user-facing changes?
# How was this patch tested?
---
Cargo.toml | 5 -
.../datafusion-ext-functions/src/spark_strings.rs | 38 ++++----
native-engine/datafusion-ext-plans/src/agg_exec.rs | 4 +-
.../src/common/cached_exprs_evaluator.rs | 2 +-
.../src/common/execution_context.rs | 2 +-
.../src/common/row_null_checker.rs | 2 +-
native-engine/datafusion-ext-plans/src/orc_exec.rs | 107 +++++++++------------
.../datafusion-ext-plans/src/parquet_sink_exec.rs | 4 +-
.../datafusion-ext-plans/src/shuffle/mod.rs | 2 +-
.../datafusion-ext-plans/src/sort_exec.rs | 2 +-
10 files changed, 71 insertions(+), 97 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 692b9379..f9fb1de3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -75,11 +75,6 @@ while_let_loop = "allow"
while_let_on_iterator = "allow"
explicit_counter_loop = "allow"
-# Format/String
-useless_format = "allow"
-uninlined_format_args = "allow"
-to_string_in_format_args = "allow"
-
# Code Style/Redundancy (Part 1)
needless_borrow = "allow"
needless_return = "allow"
diff --git a/native-engine/datafusion-ext-functions/src/spark_strings.rs
b/native-engine/datafusion-ext-functions/src/spark_strings.rs
index 6b514b0d..568bfdee 100644
--- a/native-engine/datafusion-ext-functions/src/spark_strings.rs
+++ b/native-engine/datafusion-ext-functions/src/spark_strings.rs
@@ -176,7 +176,7 @@ pub fn string_concat(args: &[ColumnarValue]) ->
Result<ColumnarValue> {
}
// concat
- let initial = Some("".to_string());
+ let initial = Some(String::new());
let result = args.iter().fold(initial, |mut acc, rhs| {
if let Some(ref mut inner) = acc {
match rhs {
@@ -401,8 +401,8 @@ mod test {
// positive case
let r = string_repeat(&vec![
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123")),
- Some(format!("a")),
+ Some("123".to_string()),
+ Some("a".to_string()),
None,
]))),
ColumnarValue::Scalar(ScalarValue::from(3_i32)),
@@ -416,8 +416,8 @@ mod test {
// repeat with n < 0
let r = string_repeat(&vec![
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123")),
- Some(format!("a")),
+ Some("123".to_string()),
+ Some("a".to_string()),
None,
]))),
ColumnarValue::Scalar(ScalarValue::from(-1_i32)),
@@ -431,8 +431,8 @@ mod test {
// repeat with n = null
let r = string_repeat(&vec![
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123")),
- Some(format!("a")),
+ Some("123".to_string()),
+ Some("a".to_string()),
None,
]))),
ColumnarValue::Scalar(ScalarValue::Int32(None)),
@@ -450,9 +450,9 @@ mod test {
// positive case
let r = string_split(&vec![
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123,456,,,789,")),
- Some(format!("123")),
- Some(format!("")),
+ Some("123,456,,,789,".to_string()),
+ Some("123".to_string()),
+ Some(String::new()),
None,
]))),
ColumnarValue::Scalar(ScalarValue::from(",")),
@@ -485,16 +485,16 @@ mod test {
// positive case
let r = string_concat(&vec![
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123")),
+ Some("123".to_string()),
None,
]))),
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("444")),
- Some(format!("456")),
+ Some("444".to_string()),
+ Some("456".to_string()),
]))),
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("")),
- Some(format!("")),
+ Some(String::new()),
+ Some(String::new()),
]))),
ColumnarValue::Scalar(ScalarValue::from("SomeScalar")),
])?;
@@ -511,16 +511,16 @@ mod test {
let r = string_concat_ws(&vec![
ColumnarValue::Scalar(ScalarValue::from("||")),
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("123")),
+ Some("123".to_string()),
None,
]))),
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
None,
- Some(format!("456")),
+ Some("456".to_string()),
]))),
ColumnarValue::Array(Arc::new(StringArray::from_iter(vec![
- Some(format!("")),
- Some(format!("")),
+ Some(String::new()),
+ Some(String::new()),
]))),
ColumnarValue::Array(Arc::new({
let mut list_builder = ListBuilder::new(StringBuilder::new());
diff --git a/native-engine/datafusion-ext-plans/src/agg_exec.rs
b/native-engine/datafusion-ext-plans/src/agg_exec.rs
index 23ceacbf..474451e0 100644
--- a/native-engine/datafusion-ext-plans/src/agg_exec.rs
+++ b/native-engine/datafusion-ext-plans/src/agg_exec.rs
@@ -765,7 +765,7 @@ mod fuzztest {
let partial_agg = Arc::new(AggExec::try_new(
HashAgg,
vec![GroupingExpr {
- field_name: format!("key"),
+ field_name: "key".to_string(),
expr: phys_expr::col("key", &schema)?,
}],
vec![
@@ -792,7 +792,7 @@ mod fuzztest {
let final_agg = Arc::new(AggExec::try_new(
HashAgg,
vec![GroupingExpr {
- field_name: format!("key"),
+ field_name: "key".to_string(),
expr: phys_expr::col("key", &schema)?,
}],
vec![
diff --git
a/native-engine/datafusion-ext-plans/src/common/cached_exprs_evaluator.rs
b/native-engine/datafusion-ext-plans/src/common/cached_exprs_evaluator.rs
index dc42dbb0..27ad6b45 100644
--- a/native-engine/datafusion-ext-plans/src/common/cached_exprs_evaluator.rs
+++ b/native-engine/datafusion-ext-plans/src/common/cached_exprs_evaluator.rs
@@ -331,7 +331,7 @@ struct CachedExpr {
impl Display for CachedExpr {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
- write!(f, "{:?}", self)
+ write!(f, "{self:?}")
}
}
diff --git a/native-engine/datafusion-ext-plans/src/common/execution_context.rs
b/native-engine/datafusion-ext-plans/src/common/execution_context.rs
index 6bfa8279..b45aae70 100644
--- a/native-engine/datafusion-ext-plans/src/common/execution_context.rs
+++ b/native-engine/datafusion-ext-plans/src/common/execution_context.rs
@@ -593,7 +593,7 @@ impl ExecutionContext {
if !task_running {
panic!("output_with_sender[{desc}] canceled due to task
finished/killed");
} else {
- panic!("output_with_sender[{desc}] error: {}",
err.to_string());
+ panic!("output_with_sender[{desc}] error: {err}");
}
}
Ok::<_, DataFusionError>(())
diff --git a/native-engine/datafusion-ext-plans/src/common/row_null_checker.rs
b/native-engine/datafusion-ext-plans/src/common/row_null_checker.rs
index cbdb87b0..5e2da061 100644
--- a/native-engine/datafusion-ext-plans/src/common/row_null_checker.rs
+++ b/native-engine/datafusion-ext-plans/src/common/row_null_checker.rs
@@ -127,7 +127,7 @@ impl RowNullChecker {
}
other => {
// For unsupported types, panic
- panic!("unsupported data type in RowNullChecker: {:?}", other)
+ panic!("unsupported data type in RowNullChecker: {other:?}")
}
}
}
diff --git a/native-engine/datafusion-ext-plans/src/orc_exec.rs
b/native-engine/datafusion-ext-plans/src/orc_exec.rs
index 387ea06e..844b5c7b 100644
--- a/native-engine/datafusion-ext-plans/src/orc_exec.rs
+++ b/native-engine/datafusion-ext-plans/src/orc_exec.rs
@@ -109,8 +109,7 @@ impl DisplayAs for OrcExec {
write!(
f,
- "OrcExec: file_group={:?}, limit={:?}, projection={:?},
predicate={:?}",
- file_group, limit, projection, pred
+ "OrcExec: file_group={file_group:?}, limit={limit:?},
projection={projection:?}, predicate={pred:?}"
)
}
}
@@ -825,7 +824,7 @@ mod tests {
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(
- format!("{:?}", predicate),
+ format!("{predicate:?}"),
"Comparison { column: \"id\", op: Equal, value: Int32(Some(42)) }"
);
}
@@ -841,7 +840,7 @@ mod tests {
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(
- format!("{:?}", predicate),
+ format!("{predicate:?}"),
"Comparison { column: \"name\", op: NotEqual, value:
Utf8(Some(\"test\")) }"
);
}
@@ -900,12 +899,11 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be GreaterThan, not LessThan
assert!(
debug_str.contains("GreaterThan") || debug_str.contains("Gt"),
- "Expected GreaterThan for reversed Lt, got: {}",
- debug_str
+ "Expected GreaterThan for reversed Lt, got: {debug_str}"
);
// Test: 42 <= id → id >= 42
@@ -913,13 +911,12 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
assert!(
debug_str.contains("GreaterThanOrEqual")
|| debug_str.contains("GreaterThanEquals")
|| debug_str.contains("Gte"),
- "Expected GreaterThanOrEqual for reversed LtEq, got: {}",
- debug_str
+ "Expected GreaterThanOrEqual for reversed LtEq, got: {debug_str}"
);
// Test: 42 > id → id < 42
@@ -927,11 +924,10 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
assert!(
debug_str.contains("LessThan") || debug_str.contains("Lt"),
- "Expected LessThan for reversed Gt, got: {}",
- debug_str
+ "Expected LessThan for reversed Gt, got: {debug_str}"
);
// Test: 42 >= id → id <= 42
@@ -939,13 +935,12 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
assert!(
debug_str.contains("LessThanOrEqual")
|| debug_str.contains("LessThanEquals")
|| debug_str.contains("Lte"),
- "Expected LessThanOrEqual for reversed GtEq, got: {}",
- debug_str
+ "Expected LessThanOrEqual for reversed GtEq, got: {debug_str}"
);
}
@@ -958,7 +953,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- assert_eq!(format!("{:?}", predicate), "IsNull { column: \"name\" }");
+ assert_eq!(format!("{predicate:?}"), "IsNull { column: \"name\" }");
}
#[test]
@@ -970,10 +965,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- assert_eq!(
- format!("{:?}", predicate),
- "Not(IsNull { column: \"age\" })"
- );
+ assert_eq!(format!("{predicate:?}"), "Not(IsNull { column: \"age\"
})");
}
#[test]
@@ -987,7 +979,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(not_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- assert!(format!("{:?}", predicate).starts_with("Not(Comparison"));
+ assert!(format!("{predicate:?}").starts_with("Not(Comparison"));
}
#[test]
@@ -1008,7 +1000,7 @@ mod tests {
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
// IN list should be converted to OR of equality predicates
- assert!(format!("{:?}", predicate).starts_with("Or(["));
+ assert!(format!("{predicate:?}").starts_with("Or(["));
}
#[test]
@@ -1027,7 +1019,7 @@ mod tests {
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
// NOT IN should be converted to NOT(OR(...))
- assert!(format!("{:?}", predicate).starts_with("Not(Or(["));
+ assert!(format!("{predicate:?}").starts_with("Not(Or(["));
}
#[test]
@@ -1047,7 +1039,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- assert!(format!("{:?}", predicate).starts_with("And(["));
+ assert!(format!("{predicate:?}").starts_with("And(["));
}
#[test]
@@ -1073,7 +1065,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(and2), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to And([cond1, cond2, cond3])
assert!(debug_str.starts_with("And(["));
// Count the number of conditions (should be 3)
@@ -1097,7 +1089,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(or_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- assert!(format!("{:?}", predicate).starts_with("Or(["));
+ assert!(format!("{predicate:?}").starts_with("Or(["));
}
#[test]
@@ -1123,7 +1115,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(or2), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to Or([cond1, cond2, cond3])
assert!(debug_str.starts_with("Or(["));
let condition_count = debug_str.matches("Comparison").count();
@@ -1151,20 +1143,15 @@ mod tests {
let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should have And at top level
- assert!(
- debug_str.contains("And"),
- "Expected And, got: {}",
- debug_str
- );
+ assert!(debug_str.contains("And"), "Expected And, got: {debug_str}");
// Should contain OR for the id conditions
- assert!(debug_str.contains("Or"), "Expected Or, got: {}", debug_str);
+ assert!(debug_str.contains("Or"), "Expected Or, got: {debug_str}");
// Should contain the IS NOT NULL condition
assert!(
debug_str.contains("IsNull"),
- "Expected IsNull, got: {}",
- debug_str
+ "Expected IsNull, got: {debug_str}",
);
}
@@ -1197,7 +1184,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(and3), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to And([cond1, cond2, cond3, cond4])
assert!(debug_str.starts_with("And(["));
let condition_count = debug_str.matches("Comparison").count();
@@ -1332,7 +1319,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be converted to OR of equality predicates
// NULL values should be included (even though they won't match)
assert!(debug_str.starts_with("Or(["));
@@ -1357,7 +1344,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be NOT(OR(...))
assert!(debug_str.starts_with("Not(Or(["));
}
@@ -1402,7 +1389,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to And([...])
assert!(debug_str.contains("And"));
}
@@ -1425,7 +1412,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(or_expr), &schema);
assert!(result.is_some());
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to Or([...])
assert!(debug_str.contains("Or"));
}
@@ -1447,7 +1434,7 @@ mod tests {
col_name,
schema
.index_of(col_name)
- .expect(&format!("Column '{}' not found", col_name)),
+ .expect(&format!("Column '{col_name}' not found")),
));
let null_lit = Arc::new(Literal::new(null_value));
let expr = Arc::new(BinaryExpr::new(col, Operator::Eq, null_lit));
@@ -1455,8 +1442,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(
result.is_some(),
- "Failed to convert NULL comparison for column: {}",
- col_name
+ "Failed to convert NULL comparison for column: {col_name}"
);
}
}
@@ -1498,13 +1484,12 @@ mod tests {
);
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should use the synthetic column name
assert!(
debug_str.contains("__orc_where_false_constant__") ||
debug_str.contains("And"),
- "Expected synthetic column or And predicate, got: {}",
- debug_str
+ "Expected synthetic column or And predicate, got: {debug_str}"
);
}
@@ -1543,12 +1528,11 @@ mod tests {
assert!(result.is_some(), "SCAndExpr should convert to predicate");
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to And([...])
assert!(
debug_str.contains("And"),
- "Expected And predicate, got: {}",
- debug_str
+ "Expected And predicate, got: {debug_str}",
);
}
@@ -1571,12 +1555,11 @@ mod tests {
assert!(result.is_some(), "SCOrExpr should convert to predicate");
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should be flattened to Or([...])
assert!(
debug_str.contains("Or"),
- "Expected Or predicate, got: {}",
- debug_str
+ "Expected Or predicate, got: {debug_str}"
);
}
@@ -1608,17 +1591,15 @@ mod tests {
);
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should have And at top level with Or inside
assert!(
debug_str.contains("And"),
- "Expected And at top level, got: {}",
- debug_str
+ "Expected And at top level, got: {debug_str}"
);
assert!(
debug_str.contains("Or"),
- "Expected Or inside And, got: {}",
- debug_str
+ "Expected Or inside And, got: {debug_str}"
);
}
@@ -1650,19 +1631,17 @@ mod tests {
);
let predicate = result.expect("Expected valid ORC predicate");
- let debug_str = format!("{:?}", predicate);
+ let debug_str = format!("{predicate:?}");
// Should all be flattened to And([...])
assert!(
debug_str.contains("And"),
- "Expected And predicate, got: {}",
- debug_str
+ "Expected And predicate, got: {debug_str}"
);
// Should have 3 conditions flattened
let condition_count = debug_str.matches("Comparison").count();
assert_eq!(
condition_count, 3,
- "Expected 3 comparison conditions, got: {}",
- condition_count
+ "Expected 3 comparison conditions, got: {condition_count}"
);
}
}
diff --git a/native-engine/datafusion-ext-plans/src/parquet_sink_exec.rs
b/native-engine/datafusion-ext-plans/src/parquet_sink_exec.rs
index 647e7eff..72be4e55 100644
--- a/native-engine/datafusion-ext-plans/src/parquet_sink_exec.rs
+++ b/native-engine/datafusion-ext-plans/src/parquet_sink_exec.rs
@@ -366,7 +366,7 @@ fn parse_writer_props(prop_kvs: &[(String, String)]) ->
WriterProperties {
"PARQUET_1_0" => WriterVersion::PARQUET_1_0,
"PARQUET_2_0" => WriterVersion::PARQUET_2_0,
_ => {
- log::warn!("unsupported parquet writer version: {}",
value);
+ log::warn!("unsupported parquet writer version:
{value}");
WriterVersion::PARQUET_1_0
}
})
@@ -390,7 +390,7 @@ fn parse_writer_props(prop_kvs: &[(String, String)]) ->
WriterProperties {
Compression::ZSTD(ZstdLevel::try_new(level).unwrap_or_default())
}
_ => {
- log::warn!("unsupported parquet compression: {}",
value);
+ log::warn!("unsupported parquet compression: {value}");
Compression::UNCOMPRESSED
}
})
diff --git a/native-engine/datafusion-ext-plans/src/shuffle/mod.rs
b/native-engine/datafusion-ext-plans/src/shuffle/mod.rs
index d737af91..7250a807 100644
--- a/native-engine/datafusion-ext-plans/src/shuffle/mod.rs
+++ b/native-engine/datafusion-ext-plans/src/shuffle/mod.rs
@@ -154,7 +154,7 @@ impl fmt::Display for Partitioning {
.map(|e| format!("{e}"))
.collect::<Vec<String>>()
.join(", ");
- write!(f, "Range([{phy_exprs_str}], {size}, {:?})", bounds)
+ write!(f, "Range([{phy_exprs_str}], {size}, {bounds:?})")
}
}
}
diff --git a/native-engine/datafusion-ext-plans/src/sort_exec.rs
b/native-engine/datafusion-ext-plans/src/sort_exec.rs
index ef6ce9e6..9cc2f801 100644
--- a/native-engine/datafusion-ext-plans/src/sort_exec.rs
+++ b/native-engine/datafusion-ext-plans/src/sort_exec.rs
@@ -146,7 +146,7 @@ impl DisplayAs for SortExec {
.map(|e| e.to_string())
.collect::<Vec<_>>()
.join(", ");
- write!(f, "SortExec: {}", exprs)
+ write!(f, "SortExec: {exprs}")
}
}