diff --git a/crates/integrations/datafusion/src/physical_plan/scan.rs b/crates/integrations/datafusion/src/physical_plan/scan.rs index 234ab26470..36539ae503 100644 --- a/crates/integrations/datafusion/src/physical_plan/scan.rs +++ b/crates/integrations/datafusion/src/physical_plan/scan.rs @@ -196,7 +196,11 @@ impl DisplayAs for IcebergTableScan { self.predicates .clone() .map_or(String::from(""), |p| format!("{p}")) - ) + )?; + if let Some(limit) = self.limit { + write!(f, " limit:[{limit}]")?; + } + Ok(()) } } diff --git a/crates/sqllogictest/testdata/slts/df_test/basic_queries.slt b/crates/sqllogictest/testdata/slts/df_test/basic_queries.slt index 5d8889f158..a5ca4de46a 100644 --- a/crates/sqllogictest/testdata/slts/df_test/basic_queries.slt +++ b/crates/sqllogictest/testdata/slts/df_test/basic_queries.slt @@ -43,6 +43,18 @@ INSERT INTO default.default.query_test_table VALUES ---- 10 +# Verify EXPLAIN shows limit is pushed down to IcebergTableScan +query TT +EXPLAIN SELECT * FROM default.default.query_test_table LIMIT 3 +---- +logical_plan +01)Limit: skip=0, fetch=3 +02)--TableScan: default.default.query_test_table projection=[id, name, score, category], fetch=3 +physical_plan +01)GlobalLimitExec: skip=0, fetch=3 +02)--CooperativeExec +03)----IcebergTableScan projection:[id,name,score,category] predicate:[] limit:[3] + # Test SELECT * with ORDER BY and LIMIT query ITRT SELECT * FROM default.default.query_test_table ORDER BY id LIMIT 3