This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new caecb6d  deploy: 275896115f834c9079607e2da37e87449ecd7958
caecb6d is described below

commit caecb6dfb484a9fea0880606fc2d73e753044bec
Author: liurenjie1024 <[email protected]>
AuthorDate: Wed Aug 14 13:10:46 2024 +0000

    deploy: 275896115f834c9079607e2da37e87449ecd7958
---
 api/iceberg/arrow/struct.ArrowReader.html          |   6 +-
 api/iceberg/arrow/struct.ArrowReaderBuilder.html   |   7 +-
 api/iceberg/expr/enum.BoundPredicate.html          |   4 +-
 api/iceberg/expr/struct.BinaryExpression.html      |   4 +-
 api/iceberg/expr/struct.BoundReference.html        |   4 +-
 api/iceberg/expr/struct.SetExpression.html         |   4 +-
 api/iceberg/expr/struct.UnaryExpression.html       |   4 +-
 api/iceberg/index.html                             |   2 +-
 api/iceberg/scan/index.html                        |   2 +-
 api/iceberg/scan/struct.FileScanTask.html          |  14 +-
 api/iceberg/scan/struct.TableScan.html             |  12 +-
 api/iceberg/scan/struct.TableScanBuilder.html      |  23 +--
 api/iceberg/scan/type.ArrowRecordBatchStream.html  |   2 +-
 api/iceberg/scan/type.FileScanTaskStream.html      |   2 +-
 api/iceberg/spec/enum.DataFileFormat.html          |   2 +-
 api/iceberg/spec/enum.SortDirection.html           |   4 +-
 api/iceberg/spec/enum.Transform.html               |   4 +-
 api/iceberg/spec/enum.Type.html                    |   4 +-
 .../enum.UnboundPartitionSpecBuilderError.html     |   2 +-
 api/iceberg/spec/enum.ViewFormatVersion.html       |   4 +-
 api/iceberg/spec/struct.Datum.html                 |   2 +-
 api/iceberg/spec/struct.Schema.html                |   4 +-
 api/iceberg/struct.Error.html                      |   2 +-
 api/search-index.js                                |   2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js         |   2 +-
 api/src-files.js                                   |   2 +-
 api/src/iceberg/arrow/reader.rs.html               | 200 ++++++++++++++++-----
 api/src/iceberg/lib.rs.html                        |   2 +
 api/src/iceberg/scan.rs.html                       |  48 +++--
 api/src/iceberg/utils.rs.html                      |  85 +++++++++
 30 files changed, 340 insertions(+), 119 deletions(-)

diff --git a/api/iceberg/arrow/struct.ArrowReader.html 
b/api/iceberg/arrow/struct.ArrowReader.html
index 4914853..c4c4231 100644
--- a/api/iceberg/arrow/struct.ArrowReader.html
+++ b/api/iceberg/arrow/struct.ArrowReader.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Reads data 
from Parquet files"><title>ArrowReader in iceberg::arrow - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e49
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-ArrowReader" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#89-254">source</a><a 
href="#impl-ArrowReader" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.ArrowReader.html" title="struct  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Reads data 
from Parquet files"><title>ArrowReader in iceberg::arrow - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e49
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-ArrowReader" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#105-306">source</a><a 
href="#impl-ArrowReader" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.ArrowReader.html" title="struct [...]
 Returns a stream of Arrow RecordBatches containing the data from the files</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-ArrowReader" class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#83">source</a><a 
href="#impl-Clone-for-ArrowReader" class="anchor">§</a><h3 
class="code-header">impl < [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-ArrowReader" class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#96">source</a><a 
href="#impl-Clone-for-ArrowReader" class="anchor">§</a><h3 
class="code-header">impl < [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow_mut" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217";>source</a><a
 href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a 
href= [...]
diff --git a/api/iceberg/arrow/struct.ArrowReaderBuilder.html 
b/api/iceberg/arrow/struct.ArrowReaderBuilder.html
index c7d23c5..615b09e 100644
--- a/api/iceberg/arrow/struct.ArrowReaderBuilder.html
+++ b/api/iceberg/arrow/struct.ArrowReaderBuilder.html
@@ -1,7 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder to 
create ArrowReader"><title>ArrowReaderBuilder in iceberg::arrow - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-ArrowReaderBuilder" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#57-80">source</a><a 
href="#impl-ArrowReaderBuilder" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.ArrowReaderBuilder. 
[...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder to 
create ArrowReader"><title>ArrowReaderBuilder in iceberg::arrow - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-ArrowReaderBuilder" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#59-93">source</a><a 
href="#impl-ArrowReaderBuilder" class="anchor">§</a><h3 
class="code-header">impl <a class="struct" href="struct.ArrowReaderBuilder. 
[...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_batch_size" class="method"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#80-83">source</a><h4 
class="code-header">pub fn <a href="#method.with_batch_size" 
class="fn">with_batch_size</a>(self, batch_size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></section></summary><div class="docblock"><p>Sets the desi [...]
 to something other than the default</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#74-79">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="struct" href="struct.ArrowReader.html" title="struct 
iceberg::arrow::ArrowReader">ArrowReader</a></h4></section></summary><div 
class="docblock"><p>Build the ArrowReader.</p>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/arrow/reader.rs.html#86-92">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="struct" href="struct.ArrowReader.html" title="struct 
iceberg::arrow::ArrowReader">ArrowReader</a></h4></section></summary><div 
class="docblock"><p>Build the ArrowReader.</p>
 </div></details></div></details></div><h2 id="synthetic-implementations" 
class="section-header">Auto Trait Implementations<a 
href="#synthetic-implementations" class="anchor">§</a></h2><div 
id="synthetic-implementations-list"><section 
id="impl-Freeze-for-ArrowReaderBuilder" class="impl"><a 
href="#impl-Freeze-for-ArrowReaderBuilder" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html"; 
title="trait core::mar [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
diff --git a/api/iceberg/expr/enum.BoundPredicate.html 
b/api/iceberg/expr/enum.BoundPredicate.html
index c5c5359..dca8e31 100644
--- a/api/iceberg/expr/enum.BoundPredicate.html
+++ b/api/iceberg/expr/enum.BoundPredicate.html
@@ -16,8 +16,8 @@
 </div><section id="variant.Unary" class="variant"><a href="#variant.Unary" 
class="anchor">§</a><h3 class="code-header">Unary(<a class="struct" 
href="struct.UnaryExpression.html" title="struct 
iceberg::expr::UnaryExpression">UnaryExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Unary expression, for example, <code>a IS NULL</code>.</p>
 </div><section id="variant.Binary" class="variant"><a href="#variant.Binary" 
class="anchor">§</a><h3 class="code-header">Binary(<a class="struct" 
href="struct.BinaryExpression.html" title="struct 
iceberg::expr::BinaryExpression">BinaryExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Binary expression, for example, <code>a &gt; 10</code>.</p>
 </div><section id="variant.Set" class="variant"><a href="#variant.Set" 
class="anchor">§</a><h3 class="code-header">Set(<a class="struct" 
href="struct.SetExpression.html" title="struct 
iceberg::expr::SetExpression">SetExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Set predicates, for example, <code>a IN (1, 2, 
3)</code>.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-BoundPredicate" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#653">source</a><a 
href="#impl-Clone-for-BoundPredicate" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-BoundPredicate" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#653">source</a><a 
href="#impl-Clone-for-BoundPredicate" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-BoundPredicate" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#653">source</a><a 
href="#impl-Serialize-for-BoundPredicate" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; title="tr 
[...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-StructuralPartialEq-for-BoundPredicate" class="impl"><a class="src 
rightside" href=". [...]
diff --git a/api/iceberg/expr/struct.BinaryExpression.html 
b/api/iceberg/expr/struct.BinaryExpression.html
index b037778..501f205 100644
--- a/api/iceberg/expr/struct.BinaryExpression.html
+++ b/api/iceberg/expr/struct.BinaryExpression.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Binary 
predicate, for example, `a &gt; 10`."><title>BinaryExpression in iceberg::expr 
- 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans
 [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-BinaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#200-211">source</a><a 
href="#impl-Bind-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header" [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-BinaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#200-211">source</a><a 
href="#impl-Bind-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header" [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html"; 
title="trait 
serde::de::Deserialize">Deserialize</a>&lt;'de&gt;,</div></h3></section></summary><div
 class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.deserialize" class="method trait-impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#152">source</a><a 
href="#method.deserialize" class="anchor">§</a><h4 class="code-header">fn <a hr 
[...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-BinaryExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#152">source</a><a 
href="#impl-Serialize-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trai [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait 
serde::ser::Serialize">Serialize</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.serialize" class="method trait-impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#152">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs [...]
diff --git a/api/iceberg/expr/struct.BoundReference.html 
b/api/iceberg/expr/struct.BoundReference.html
index 3924e68..7f5b4b4 100644
--- a/api/iceberg/expr/struct.BoundReference.html
+++ b/api/iceberg/expr/struct.BoundReference.html
@@ -6,8 +6,8 @@
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a new 
bound reference.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#366-368">source</a><h4 
class="code-header">pub fn <a href="#method.field" 
class="fn">field</a>(&amp;self) -&gt; &amp;<a class="struct" 
href="../spec/struct.NestedField.html" title="struct 
iceberg::spec::NestedField">NestedField</a></h4></section></summary><div 
class="docblock"><p>Return the field of this reference.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.accessor" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#371-373">source</a><h4 
class="code-header">pub fn <a href="#method.accessor" 
class="fn">accessor</a>(&amp;self) -&gt; 
&amp;StructAccessor</h4></section></summary><div class="docblock"><p>Get this 
BoundReference’s Accessor</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-BoundReference" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#342">source</a><a 
href="#impl-Clone-for-BoundReference" class="anchor">§</a><h3 
class="code-header">im [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-BoundReference" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#342">source</a><a 
href="#impl-Clone-for-BoundReference" class="anchor">§</a><h3 
class="code-header">im [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-BoundReference" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#342">source</a><a 
href="#impl-Serialize-for-BoundReference" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait s [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-Eq-for-BoundReference" class="impl"><a class="src rightside" 
href="../../src/iceberg/ [...]
diff --git a/api/iceberg/expr/struct.SetExpression.html 
b/api/iceberg/expr/struct.SetExpression.html
index cd93a87..5608a77 100644
--- a/api/iceberg/expr/struct.SetExpression.html
+++ b/api/iceberg/expr/struct.SetExpression.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Set 
predicates, for example, `a in (1, 2, 3)`."><title>SetExpression in 
iceberg::expr - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans
 [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-SetExpression%3CT%3E" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#255-266">source</a><a 
href="#impl-Bind-for-SetExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl& [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-SetExpression%3CT%3E" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#255-266">source</a><a 
href="#impl-Bind-for-SetExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl& [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html"; 
title="trait 
serde::de::Deserialize">Deserialize</a>&lt;'de&gt;,</div></h3></section></summary><div
 class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.deserialize" class="method trait-impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#214">source</a><a 
href="#method.deserialize" class="anchor">§</a><h4 class="code-header">fn <a hr 
[...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-SetExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#214">source</a><a 
href="#impl-Serialize-for-SetExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Seri [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait 
serde::ser::Serialize">Serialize</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.serialize" class="method trait-impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#214">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs [...]
diff --git a/api/iceberg/expr/struct.UnaryExpression.html 
b/api/iceberg/expr/struct.UnaryExpression.html
index a047c09..e69bf2d 100644
--- a/api/iceberg/expr/struct.UnaryExpression.html
+++ b/api/iceberg/expr/struct.UnaryExpression.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Unary 
predicate, for example, `a IS NULL`."><title>UnaryExpression in iceberg::expr - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-M
 [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-UnaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#125-132">source</a><a 
href="#impl-Bind-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">i [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Bind-for-UnaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#125-132">source</a><a 
href="#impl-Bind-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">i [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html"; 
title="trait 
serde::de::Deserialize">Deserialize</a>&lt;'de&gt;,</div></h3></section></summary><div
 class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.deserialize" class="method trait-impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#101">source</a><a 
href="#method.deserialize" class="anchor">§</a><h4 class="code-header">fn <a hr 
[...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-UnaryExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#101">source</a><a 
href="#impl-Serialize-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait. [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait 
serde::ser::Serialize">Serialize</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.serialize" class="method trait-impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#101">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs [...]
diff --git a/api/iceberg/index.html b/api/iceberg/index.html
index b5810da..2c1398a 100644
--- a/api/iceberg/index.html
+++ b/api/iceberg/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Apache 
Iceberg Official Native Rust Implementation"><title>iceberg - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Apache 
Iceberg Official Native Rust Implementation"><title>iceberg - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497
 [...]
 <h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2><h3 
id="scan-a-table"><a class="doc-anchor" href="#scan-a-table">§</a>Scan A 
Table</h3>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span 
class="kw">use </span>futures::TryStreamExt;
 <span class="kw">use </span>iceberg::io::{FileIO, FileIOBuilder};
diff --git a/api/iceberg/scan/index.html b/api/iceberg/scan/index.html
index f53f3fa..a4ccf0f 100644
--- a/api/iceberg/scan/index.html
+++ b/api/iceberg/scan/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Table scan 
api."><title>iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Reg
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Table scan 
api."><title>iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Reg
 [...]
 </div></details><h2 id="structs" class="section-header">Structs<a 
href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name"><a class="struct" href="struct.FileScanTask.html" 
title="struct iceberg::scan::FileScanTask">FileScanTask</a></div><div 
class="desc docblock-short">A task to scan part of file.</div></li><li><div 
class="item-name"><a class="struct" href="struct.TableScan.html" title="struct 
iceberg::scan::TableScan">TableScan</a></div><div class="des [...]
\ No newline at end of file
diff --git a/api/iceberg/scan/struct.FileScanTask.html 
b/api/iceberg/scan/struct.FileScanTask.html
index d11519f..8a650b5 100644
--- a/api/iceberg/scan/struct.FileScanTask.html
+++ b/api/iceberg/scan/struct.FileScanTask.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A task to 
scan part of file."><title>FileScanTask in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-FileScanTask" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#839-859">source</a><a 
href="#impl-FileScanTask" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileScanTask.html" title="struct iceb [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.project_field_ids" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#846-848">source</a><h4 
class="code-header">pub fn <a href="#method.project_field_ids" 
class="fn">project_field_ids</a>(&amp;self) -&gt; &amp;[<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i32.html";>i32</a>]</h4></section></summary><div
 class="docblock"><p>Returns the project fie [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.predicate" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#851-853">source</a><h4 
class="code-header">pub fn <a href="#method.predicate" 
class="fn">predicate</a>(&amp;self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"; 
title="enum core::option::Option">Option</a>&lt;&amp;<a class="enum" 
href="../expr/enum.BoundPredicate.html" t [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.schema" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#856-858">source</a><h4 
class="code-header">pub fn <a href="#method.schema" 
class="fn">schema</a>(&amp;self) -&gt; &amp;<a class="struct" 
href="../spec/struct.Schema.html" title="struct 
iceberg::spec::Schema">Schema</a></h4></section></summary><div 
class="docblock"><p>Returns the schema id of this file scan task.</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-FileScanTask" class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#828">source</a><a 
href="#impl-Clone-for-FileScanTask" class="anchor">§</a><h3 
class="code-header">impl <a cla [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Seria [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A task to 
scan part of file."><title>FileScanTask in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-FileScanTask" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#853-873">source</a><a 
href="#impl-FileScanTask" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileScanTask.html" title="struct iceb [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.project_field_ids" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#860-862">source</a><h4 
class="code-header">pub fn <a href="#method.project_field_ids" 
class="fn">project_field_ids</a>(&amp;self) -&gt; &amp;[<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i32.html";>i32</a>]</h4></section></summary><div
 class="docblock"><p>Returns the project fie [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.predicate" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#865-867">source</a><h4 
class="code-header">pub fn <a href="#method.predicate" 
class="fn">predicate</a>(&amp;self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"; 
title="enum core::option::Option">Option</a>&lt;&amp;<a class="enum" 
href="../expr/enum.BoundPredicate.html" t [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.schema" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#870-872">source</a><h4 
class="code-header">pub fn <a href="#method.schema" 
class="fn">schema</a>(&amp;self) -&gt; &amp;<a class="struct" 
href="../spec/struct.Schema.html" title="struct 
iceberg::spec::Schema">Schema</a></h4></section></summary><div 
class="docblock"><p>Returns the schema id of this file scan task.</p>
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-FileScanTask" class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#842">source</a><a 
href="#impl-Clone-for-FileScanTask" class="anchor">§</a><h3 
class="code-header">impl <a cla [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Seria [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details></div><h2 
id="synthetic-implementations" class="section-header">Auto Trait 
Implementations<a href="#syn [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
diff --git a/api/iceberg/scan/struct.TableScan.html 
b/api/iceberg/scan/struct.TableScan.html
index e8ad38d..058f7c3 100644
--- a/api/iceberg/scan/struct.TableScan.html
+++ b/api/iceberg/scan/struct.TableScan.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Table 
scan."><title>TableScan in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCo
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-TableScan" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/scan.rs.html#290-428">source</a><a 
href="#impl-TableScan" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.TableScan.html" title="struct iceberg::scan [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.to_arrow" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#352-360">source</a><h4 
class="code-header">pub async fn <a href="#method.to_arrow" 
class="fn">to_arrow</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="type" href="type.ArrowRecordBatchStream.html" title="type 
iceberg::scan::ArrowRecordBatchStream"> [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.column_names" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#363-365">source</a><h4 
class="code-header">pub fn <a href="#method.column_names" 
class="fn">column_names</a>(&amp;self) -&gt; &amp;[<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>]</h4></section></summary><div 
class="docbl [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.snapshot" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#367-369">source</a><h4 
class="code-header">pub fn <a href="#method.snapshot" 
class="fn">snapshot</a>(&amp;self) -&gt; &amp;<a class="type" 
href="../spec/type.SnapshotRef.html" title="type 
iceberg::spec::SnapshotRef">SnapshotRef</a></h4></section></summary><div 
class="docblock"><p>Returns a reference to the snapshot  [...]
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Debug-for-TableScan" class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#256">source</a><a 
href="#impl-Debug-for-TableScan" class="anchor">§</a><h3 
class="code-header">impl <a class="tr [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Table 
scan."><title>TableScan in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCo
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-TableScan" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/scan.rs.html#303-442">source</a><a 
href="#impl-TableScan" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.TableScan.html" title="struct iceberg::scan [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.to_arrow" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#365-374">source</a><h4 
class="code-header">pub async fn <a href="#method.to_arrow" 
class="fn">to_arrow</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="type" href="type.ArrowRecordBatchStream.html" title="type 
iceberg::scan::ArrowRecordBatchStream"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.column_names" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#377-379">source</a><h4 
class="code-header">pub fn <a href="#method.column_names" 
class="fn">column_names</a>(&amp;self) -&gt; &amp;[<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>]</h4></section></summary><div 
class="docbl [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.snapshot" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#381-383">source</a><h4 
class="code-header">pub fn <a href="#method.snapshot" 
class="fn">snapshot</a>(&amp;self) -&gt; &amp;<a class="type" 
href="../spec/type.SnapshotRef.html" title="type 
iceberg::spec::SnapshotRef">SnapshotRef</a></h4></section></summary><div 
class="docblock"><p>Returns a reference to the snapshot  [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Debug-for-TableScan" class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#265">source</a><a 
href="#impl-Debug-for-TableScan" class="anchor">§</a><h3 
class="code-header">impl <a class="tr [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow_mut" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217";>source</a><a
 href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a 
href= [...]
diff --git a/api/iceberg/scan/struct.TableScanBuilder.html 
b/api/iceberg/scan/struct.TableScanBuilder.html
index 8df96c1..6a16239 100644
--- a/api/iceberg/scan/struct.TableScanBuilder.html
+++ b/api/iceberg/scan/struct.TableScanBuilder.html
@@ -1,19 +1,20 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder to 
create table scan."><title>TableScanBuilder in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-TableScanBuilder%3C'a%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#62-253">source</a><a 
href="#impl-TableScanBuilder%3C'a%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;'a&gt; <a class="struct" href="struct.Tabl [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder to 
create table scan."><title>TableScanBuilder in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-TableScanBuilder%3C'a%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#64-262">source</a><a 
href="#impl-TableScanBuilder%3C'a%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;'a&gt; <a class="struct" href="struct.Tabl [...]
 to something other than the default</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_case_sensitive" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#88-91">source</a><h4 
class="code-header">pub fn <a href="#method.with_case_sensitive" 
class="fn">with_case_sensitive</a>(self, case_sensitive: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>) 
-&gt; Self</h4></section></summary><div class="docblock"><p>Sets th [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_filter" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#94-99">source</a><h4 
class="code-header">pub fn <a href="#method.with_filter" 
class="fn">with_filter</a>(self, predicate: <a class="enum" 
href="../expr/enum.Predicate.html" title="enum 
iceberg::expr::Predicate">Predicate</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Specifies a predicate to 
use [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.select_all" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#102-105">source</a><h4 
class="code-header">pub fn <a href="#method.select_all" 
class="fn">select_all</a>(self) -&gt; Self</h4></section></summary><div 
class="docblock"><p>Select all columns.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.select" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#108-114">source</a><h4 
class="code-header">pub fn <a href="#method.select" class="fn">select</a>(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_case_sensitive" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#89-92">source</a><h4 
class="code-header">pub fn <a href="#method.with_case_sensitive" 
class="fn">with_case_sensitive</a>(self, case_sensitive: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>) 
-&gt; Self</h4></section></summary><div class="docblock"><p>Sets th [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_filter" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#95-100">source</a><h4 
class="code-header">pub fn <a href="#method.with_filter" 
class="fn">with_filter</a>(self, predicate: <a class="enum" 
href="../expr/enum.Predicate.html" title="enum 
iceberg::expr::Predicate">Predicate</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Specifies a predicate to 
us [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.select_all" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#103-106">source</a><h4 
class="code-header">pub fn <a href="#method.select_all" 
class="fn">select_all</a>(self) -&gt; Self</h4></section></summary><div 
class="docblock"><p>Select all columns.</p>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.select" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#109-115">source</a><h4 
class="code-header">pub fn <a href="#method.select" class="fn">select</a>(
     self,
     column_names: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = impl <a 
class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToString</a>&gt;,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Select some 
columns of the table.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.snapshot_id" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#117-120">source</a><h4 
class="code-header">pub fn <a href="#method.snapshot_id" 
class="fn">snapshot_id</a>(self, snapshot_id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i64.html";>i64</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Set the snapshot to scan. 
When not [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_concurrency_limit" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#124-128">source</a><h4 
class="code-header">pub fn <a href="#method.with_concurrency_limit" 
class="fn">with_concurrency_limit</a>(self, limit: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.snapshot_id" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#118-121">source</a><h4 
class="code-header">pub fn <a href="#method.snapshot_id" 
class="fn">snapshot_id</a>(self, snapshot_id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i64.html";>i64</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Set the snapshot to scan. 
When not [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_concurrency_limit" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#125-130">source</a><h4 
class="code-header">pub fn <a href="#method.with_concurrency_limit" 
class="fn">with_concurrency_limit</a>(self, limit: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></section></summary><div class="docblock"><p>Set [...]
 entries for this scan</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_manifest_file_concurrency_limit" class="method"><a class="src 
rightside" href="../../src/iceberg/scan.rs.html#131-134">source</a><h4 
class="code-header">pub fn <a 
href="#method.with_manifest_file_concurrency_limit" 
class="fn">with_manifest_file_concurrency_limit</a>(self, limit: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></sect [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_manifest_entry_concurrency_limit" class="method"><a class="src 
rightside" href="../../src/iceberg/scan.rs.html#137-140">source</a><h4 
class="code-header">pub fn <a 
href="#method.with_manifest_entry_concurrency_limit" 
class="fn">with_manifest_entry_concurrency_limit</a>(self, limit: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></s [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#143-252">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="struct" href="struct.TableScan.html" 
title="struct 
iceberg::scan::TableScan">TableScan</a>&gt;</h4></section></summar [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_data_file_concurrency_limit" class="method"><a class="src 
rightside" href="../../src/iceberg/scan.rs.html#133-136">source</a><h4 
class="code-header">pub fn <a href="#method.with_data_file_concurrency_limit" 
class="fn">with_data_file_concurrency_limit</a>(self, limit: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></section></summar [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_manifest_entry_concurrency_limit" class="method"><a class="src 
rightside" href="../../src/iceberg/scan.rs.html#139-142">source</a><h4 
class="code-header">pub fn <a 
href="#method.with_manifest_entry_concurrency_limit" 
class="fn">with_manifest_entry_concurrency_limit</a>(self, limit: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></s [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_manifest_file_concurrency_limit" class="method"><a class="src 
rightside" href="../../src/iceberg/scan.rs.html#145-148">source</a><h4 
class="code-header">pub fn <a 
href="#method.with_manifest_file_concurrency_limit" 
class="fn">with_manifest_file_concurrency_limit</a>(self, limit: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>) 
-&gt; Self</h4></sect [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/scan.rs.html#151-261">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="struct" href="struct.TableScan.html" 
title="struct 
iceberg::scan::TableScan">TableScan</a>&gt;</h4></section></summar [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" 
class="section-header">Auto Trait Implementations<a 
href="#synthetic-implementations" class="anchor">§</a></h2><div 
id="synthetic-implementations-list"><section 
id="impl-Freeze-for-TableScanBuilder%3C'a%3E" class="impl"><a 
href="#impl-Freeze-for-TableScanBuilder%3C'a%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;'a&gt; <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html";  [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
diff --git a/api/iceberg/scan/type.ArrowRecordBatchStream.html 
b/api/iceberg/scan/type.ArrowRecordBatchStream.html
index 1109c63..3e8d71c 100644
--- a/api/iceberg/scan/type.ArrowRecordBatchStream.html
+++ b/api/iceberg/scan/type.ArrowRecordBatchStream.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A stream 
of arrow `RecordBatch`es."><title>ArrowRecordBatchStream in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Me
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A stream 
of arrow `RecordBatch`es."><title>ArrowRecordBatchStream in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Me
 [...]
 </div></details><h2 id="aliased-type" class="section-header">Aliased Type<a 
href="#aliased-type" class="anchor">§</a></h2><pre class="rust 
item-decl"><code>struct ArrowRecordBatchStream 
{}</code></pre></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/scan/type.FileScanTaskStream.html 
b/api/iceberg/scan/type.FileScanTaskStream.html
index 0b40e04..1e45816 100644
--- a/api/iceberg/scan/type.FileScanTaskStream.html
+++ b/api/iceberg/scan/type.FileScanTaskStream.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A stream 
of `FileScanTask`."><title>FileScanTaskStream in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A stream 
of `FileScanTask`."><title>FileScanTaskStream in iceberg::scan - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78
 [...]
 </div></details><h2 id="aliased-type" class="section-header">Aliased Type<a 
href="#aliased-type" class="anchor">§</a></h2><pre class="rust 
item-decl"><code>struct FileScanTaskStream 
{}</code></pre></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/spec/enum.DataFileFormat.html 
b/api/iceberg/spec/enum.DataFileFormat.html
index 4fa00c2..8b9aa65 100644
--- a/api/iceberg/spec/enum.DataFileFormat.html
+++ b/api/iceberg/spec/enum.DataFileFormat.html
@@ -6,7 +6,7 @@
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.Avro" class="variant"><a href="#variant.Avro" 
class="anchor">§</a><h3 class="code-header">Avro</h3></section><div 
class="docblock"><p>Avro file format: <a 
href="https://avro.apache.org/";>https://avro.apache.org/</a></p>
 </div><section id="variant.Orc" class="variant"><a href="#variant.Orc" 
class="anchor">§</a><h3 class="code-header">Orc</h3></section><div 
class="docblock"><p>Orc file format: <a 
href="https://orc.apache.org/";>https://orc.apache.org/</a></p>
 </div><section id="variant.Parquet" class="variant"><a href="#variant.Parquet" 
class="anchor">§</a><h3 class="code-header">Parquet</h3></section><div 
class="docblock"><p>Parquet file format: <a 
href="https://parquet.apache.org/";>https://parquet.apache.org/</a></p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-DataFileFormat" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest.rs.html#1171">source</a><a 
href="#impl-Clone-for-DataFileFormat" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-DataFileFormat" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest.rs.html#1171">source</a><a 
href="#impl-Clone-for-DataFileFormat" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><section 
id="impl-Copy-for-DataFileFormat" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/manifest.rs.html#1171">source</a><a 
href="#impl-Copy-for-DataFileFormat" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html"; 
title="trait core::marker::Copy">Copy</a> for <a class="enum" href="enum.Dat 
[...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
diff --git a/api/iceberg/spec/enum.SortDirection.html 
b/api/iceberg/spec/enum.SortDirection.html
index 67bfaf3..093a060 100644
--- a/api/iceberg/spec/enum.SortDirection.html
+++ b/api/iceberg/spec/enum.SortDirection.html
@@ -4,8 +4,8 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Sort direction in a partition, either ascending or 
descending</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.Ascending" class="variant"><a href="#variant.Ascending" 
class="anchor">§</a><h3 class="code-header">Ascending</h3></section><div 
class="docblock"><p>Ascending</p>
 </div><section id="variant.Descending" class="variant"><a 
href="#variant.Descending" class="anchor">§</a><h3 
class="code-header">Descending</h3></section><div 
class="docblock"><p>Descending</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-SortDirection" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Clone-for-SortDirection" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="htt [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-SortDirection" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Clone-for-SortDirection" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="htt [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-Serialize-for-SortDirection" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Serialize-for-SortDirection" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait serd [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-Copy-for-SortDirection" class="impl"><a class="src rightside" 
href="../../src/iceberg [...]
diff --git a/api/iceberg/spec/enum.Transform.html 
b/api/iceberg/spec/enum.Transform.html
index 4ac8785..a1b1f21 100644
--- a/api/iceberg/spec/enum.Transform.html
+++ b/api/iceberg/spec/enum.Transform.html
@@ -125,8 +125,8 @@ and filtering based on the original, untransformed data.</p>
 <code>bucket(a, 37) as bs</code>, if one row matches <code>a = 10</code>, then 
its partition
 value should match <code>bucket(10, 37) as bs</code>, and we project <code>a = 
10</code> to
 <code>bs = bucket(10, 37)</code></p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Transform" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#48">source</a><a 
href="#impl-Clone-for-Transform" class="anchor">§</a><h3 
class="code-header">impl <a  [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Transform" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#48">source</a><a 
href="#impl-Clone-for-Transform" class="anchor">§</a><h3 
class="code-header">impl <a  [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Serialize-for-Transform" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#672-677">source</a><a 
href="#impl-Serialize-for-Transform" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait se [...]
     S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Copy-for-Transform" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
diff --git a/api/iceberg/spec/enum.Type.html b/api/iceberg/spec/enum.Type.html
index e28508f..5f7a5fe 100644
--- a/api/iceberg/spec/enum.Type.html
+++ b/api/iceberg/spec/enum.Type.html
@@ -17,8 +17,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.decimal_required_bytes" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#153-156">source</a><h4 
class="code-header">pub fn <a href="#method.decimal_required_bytes" 
class="fn">decimal_required_bytes</a>(precision: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>) -&gt; 
<a class="type" href="../type.Result.html" title="typ [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.decimal" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#160-163">source</a><h4 
class="code-header">pub fn <a href="#method.decimal" 
class="fn">decimal</a>(precision: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>, scale: 
<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>) -&g 
[...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_floating_type" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#167-172">source</a><h4 
class="code-header">pub fn <a href="#method.is_floating_type" 
class="fn">is_floating_type</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a></h4></section></summary><div
 class="docblock"><p>Check if it’s float o [...]
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Type" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#80">source</a><a 
href="#impl-Clone-for-Type" class="anchor">§</a><h3 class="code-header">impl <a 
class="tra [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Type" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#80">source</a><a 
href="#impl-Clone-for-Type" class="anchor">§</a><h3 class="code-header">impl <a 
class="tra [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Serialize-for-Type" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#261-267">source</a><a 
href="#impl-Serialize-for-Type" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Eq-for-Type" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatyp [...]
diff --git a/api/iceberg/spec/enum.UnboundPartitionSpecBuilderError.html 
b/api/iceberg/spec/enum.UnboundPartitionSpecBuilderError.html
index f47526c..69a3b13 100644
--- a/api/iceberg/spec/enum.UnboundPartitionSpecBuilderError.html
+++ b/api/iceberg/spec/enum.UnboundPartitionSpecBuilderError.html
@@ -4,7 +4,7 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Error type for UnboundPartitionSpecBuilder</p>
 </div></details><h2 id="variants" class="variants section-header">Variants 
(Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details 
class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked 
as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums 
could have additional variants added in future. Therefore, when matching 
against variants of non-exhaustive enums, an extra wildcard arm must be added 
to account for any future variants.</di [...]
 </div><section id="variant.ValidationError" class="variant"><a 
href="#variant.ValidationError" class="anchor">§</a><h3 
class="code-header">ValidationError(<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>)</h3></section><div 
class="docblock"><p>Custom validation error</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Debug-for-UnboundPartitionSpecBuilderError" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/partition.rs.html#120">source</a><a 
href="#impl-Debug-for-UnboundPartitionSpecBuilderError" class="anchor">§</a><h3 
class=" [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Debug-for-UnboundPartitionSpecBuilderError" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/partition.rs.html#120">source</a><a 
href="#impl-Debug-for-UnboundPartitionSpecBuilderError" class="anchor">§</a><h3 
class=" [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/error/trait.Error.html"; 
title="trait core::error::Error">Error</a> + 
'static,</div></h3></section></summary><div class="impl-items"><details 
class="toggle method-toggle" open><summary><section id="method.as_error_source" 
class="method trait-impl"><a href="#method.as_error_source" 
class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">as_error_source</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" 
href="https://doc [...]
 to benefit from Rust’s automatic dereferencing of method
diff --git a/api/iceberg/spec/enum.ViewFormatVersion.html 
b/api/iceberg/spec/enum.ViewFormatVersion.html
index 7a98b43..9f2996f 100644
--- a/api/iceberg/spec/enum.ViewFormatVersion.html
+++ b/api/iceberg/spec/enum.ViewFormatVersion.html
@@ -2,8 +2,8 @@
     V1 = 1,
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Iceberg format version</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.V1" class="variant"><a href="#variant.V1" class="anchor">§</a><h3 
class="code-header">V1 = 1</h3></section><div class="docblock"><p>Iceberg view 
spec version 1</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-ViewFormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/view_metadata.rs.html#397">source</a><a 
href="#impl-Clone-for-ViewFormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-ViewFormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/view_metadata.rs.html#397">source</a><a 
href="#impl-Clone-for-ViewFormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Display [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Compares and returns the maximum of two values. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.max";>Read
 more</a></div></details><details class="toggle method-toggle" 
open><summary><section id="method.min" class="method trait-impl"><span 
class="rightside"><span class="si [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Compares and returns the minimum of two values. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.min";>Read
 more</a></div></details><details class="toggle method-toggle" 
open><summary><section id="method.clamp" class="method trait-impl"><span 
class="rightside"><span class=" [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html"; 
title="trait 
core::cmp::PartialOrd">PartialOrd</a>,</div></h4></section></summary><div 
class='docblock'>Restrict a value to a certain interval. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.clamp";>Read
 more</a></div></details></div> [...]
diff --git a/api/iceberg/spec/struct.Datum.html 
b/api/iceberg/spec/struct.Datum.html
index d44edfd..9202cc4 100644
--- a/api/iceberg/spec/struct.Datum.html
+++ b/api/iceberg/spec/struct.Datum.html
@@ -251,7 +251,7 @@ Example:</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.data_type" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1002-1004">source</a><h4 
class="code-header">pub fn <a href="#method.data_type" 
class="fn">data_type</a>(&amp;self) -&gt; &amp;<a class="enum" 
href="enum.PrimitiveType.html" title="enum 
iceberg::spec::PrimitiveType">PrimitiveType</a></h4></section></summary><div 
class="docblock"><p>Get the primitive type fro [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_nan" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1008-1014">source</a><h4 
class="code-header">pub fn <a href="#method.is_nan" 
class="fn">is_nan</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a></h4></section></summary><div
 class="docblock"><p>Returns true if the Literal represents a primitive type
 that can be a NaN, and that it’s value is NaN</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Datum" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#95">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="trai [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Datum" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#95">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="trai [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Feeds a slice of this type into the given <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher"><code>Hasher</code></a>. <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice";>Read
 more</a></div></details></div></d [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
diff --git a/api/iceberg/spec/struct.Schema.html 
b/api/iceberg/spec/struct.Schema.html
index 928ec4e..601a398 100644
--- a/api/iceberg/spec/struct.Schema.html
+++ b/api/iceberg/spec/struct.Schema.html
@@ -17,8 +17,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field_id_by_name" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#337-339">source</a><h4 
class="code-header">pub fn <a href="#method.field_id_by_name" 
class="fn">field_id_by_name</a>(&amp;self, name: &amp;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.str.html";>str</a>) -&gt; 
<a class="enum" href="https://doc.rust-lang.org/nightly/core/op [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.name_by_field_id" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#342-344">source</a><h4 
class="code-header">pub fn <a href="#method.name_by_field_id" 
class="fn">name_by_field_id</a>(&amp;self, field_id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i32.html";>i32</a>) -&gt; 
<a class="enum" href="https://doc.rust-lang.org/nightly/core/opt [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.accessor_by_field_id" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#347-349">source</a><h4 
class="code-header">pub fn <a href="#method.accessor_by_field_id" 
class="fn">accessor_by_field_id</a>(&amp;self, field_id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i32.html";>i32</a>) -&gt; 
<a class="enum" href="https://doc.rust-lang.org/nigh [...]
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Schema" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#45">source</a><a 
href="#impl-Clone-for-Schema" class="anchor">§</a><h3 class="code-header">impl 
<a class="tr [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-Schema" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#45">source</a><a 
href="#impl-Clone-for-Schema" class="anchor">§</a><h3 class="code-header">impl 
<a class="tr [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.207/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Serialize-for-Schema" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/schema.rs.html#45">source</a><a 
href="#impl-Serialize-for-Schema" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html"; 
title="trait serde::ser::Seri [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serializer.html"; 
title="trait 
serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div 
class='docblock'>Serialize this value into the given Serde serializer. <a 
href="https://docs.rs/serde/1.0.207/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section 
id="impl-TryFrom%3C%26Schema%3E-for- [...]
diff --git a/api/iceberg/struct.Error.html b/api/iceberg/struct.Error.html
index 8a72984..185a059 100644
--- a/api/iceberg/struct.Error.html
+++ b/api/iceberg/struct.Error.html
@@ -35,7 +35,7 @@ Backtrace:
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.kind" class="method"><a class="src rightside" 
href="../src/iceberg/error.rs.html#241-243">source</a><h4 
class="code-header">pub fn <a href="#method.kind" 
class="fn">kind</a>(&amp;self) -&gt; <a class="enum" href="enum.ErrorKind.html" 
title="enum iceberg::ErrorKind">ErrorKind</a></h4></section></summary><div 
class="docblock"><p>Return error’s kind.</p>
 <p>Users can use this method to check error’s kind and take actions.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.message" class="method"><a class="src rightside" 
href="../src/iceberg/error.rs.html#247-249">source</a><h4 
class="code-header">pub fn <a href="#method.message" 
class="fn">message</a>(&amp;self) -&gt; &amp;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.str.html";>str</a></h4></section></summary><div
 class="docblock"><p>Return error’s message.</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Debug-for-Error" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#148-187">source</a><a 
href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl 
<a class="trait" h [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Debug-for-Error" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#148-187">source</a><a 
href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl 
<a class="trait" h [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/error/trait.Error.html"; 
title="trait core::error::Error">Error</a> + 
'static,</div></h3></section></summary><div class="impl-items"><details 
class="toggle method-toggle" open><summary><section id="method.as_error_source" 
class="method trait-impl"><a href="#method.as_error_source" 
class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">as_error_source</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" 
href="https://doc [...]
 to benefit from Rust’s automatic dereferencing of method
diff --git a/api/search-index.js b/api/search-index.js
index 2077b8c..45e0ef8 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
 
["iceberg_catalog_glue",{"t":"SSSSSFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQ","n":["AWS_ACCESS_KEY_ID","AWS_PROFILE_NAME","AWS_REGION_NAME","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","GlueCatalog","GlueCatalogConfig","borrow","borrow","borrow_mut","borrow_mut","builder","create_namespace","create_table","drop_namespace","drop_table","file_io","fmt","fmt","from","from","get_namespace","into","into","into_shared","into_shared","list_namespaces","list_tables","load_table","namespace_exists",
 [...]
 
["iceberg_catalog_hms",{"t":"PPFFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Buffered","Framed","HmsCatalog","HmsCatalogConfig","HmsThriftTransport","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","builder","create_namespace","create_table","default","drop_namespace","drop_table","file_io","fmt","fmt","fmt","from","from","from","get_namespace","into","into","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists
 [...]
 
["iceberg_catalog_memory",{"t":"FNNNNNNNNNNNNNNNNNNNNNNN","n":["MemoryCatalog","borrow","borrow_mut","create_namespace","create_table","drop_namespace","drop_table","fmt","from","get_namespace","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists","try_from","try_into","type_id","update_namespace","update_table","vzip"],"q":[[0,"iceberg_catalog_memory"],[24,"iceberg_catalog_memory::catalog"],[25,"iceberg::catalog"],[26,"alloc::string"]
 [...]
diff --git a/api/search.desc/iceberg/iceberg-desc-0-.js 
b/api/search.desc/iceberg/iceberg-desc-0-.js
index 0402c35..021628b 100644
--- a/api/search.desc/iceberg/iceberg-desc-0-.js
+++ b/api/search.desc/iceberg/iceberg-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust 
Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort 
order to table.\nAdd a new partition spec to the table\nAssign a new UUID to 
the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id 
must match the requirement.\nIceberg data is invalid.\nThe table’s default sort 
order id must match the …\nThe table’s default spec id must match the 
requirement.\nContains the err [...]
\ No newline at end of file
+searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust 
Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort 
order to table.\nAdd a new partition spec to the table\nAssign a new UUID to 
the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id 
must match the requirement.\nIceberg data is invalid.\nThe table’s default sort 
order id must match the …\nThe table’s default spec id must match the 
requirement.\nContains the err [...]
\ No newline at end of file
diff --git a/api/src-files.js b/api/src-files.js
index 07be271..c3e21b4 100644
--- a/api/src-files.js
+++ b/api/src-files.js
@@ -1,5 +1,5 @@
 var srcIndex = new Map(JSON.parse('[\
-["iceberg",["",[["arrow",[],["mod.rs","reader.rs","schema.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs"]]],["accessor.rs","mod.rs","predicate.rs","term.rs"]],["io",[],["file_io.rs","mod.rs","storage.rs","storage_fs.rs","storage_gcs.rs","storage_memory.rs","storage_s3.rs"]],["runtime",[],["mod.rs"]]
 [...]
+["iceberg",["",[["arrow",[],["mod.rs","reader.rs","schema.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs"]]],["accessor.rs","mod.rs","predicate.rs","term.rs"]],["io",[],["file_io.rs","mod.rs","storage.rs","storage_fs.rs","storage_gcs.rs","storage_memory.rs","storage_s3.rs"]],["runtime",[],["mod.rs"]]
 [...]
 
["iceberg_catalog_glue",["",[],["catalog.rs","error.rs","lib.rs","schema.rs","utils.rs"]]],\
 
["iceberg_catalog_hms",["",[],["catalog.rs","error.rs","lib.rs","schema.rs","utils.rs"]]],\
 
["iceberg_catalog_memory",["",[],["catalog.rs","lib.rs","namespace_state.rs"]]],\
diff --git a/api/src/iceberg/arrow/reader.rs.html 
b/api/src/iceberg/arrow/reader.rs.html
index fd875bf..09af83e 100644
--- a/api/src/iceberg/arrow/reader.rs.html
+++ b/api/src/iceberg/arrow/reader.rs.html
@@ -949,6 +949,58 @@
 <a href="#949" id="949">949</a>
 <a href="#950" id="950">950</a>
 <a href="#951" id="951">951</a>
+<a href="#952" id="952">952</a>
+<a href="#953" id="953">953</a>
+<a href="#954" id="954">954</a>
+<a href="#955" id="955">955</a>
+<a href="#956" id="956">956</a>
+<a href="#957" id="957">957</a>
+<a href="#958" id="958">958</a>
+<a href="#959" id="959">959</a>
+<a href="#960" id="960">960</a>
+<a href="#961" id="961">961</a>
+<a href="#962" id="962">962</a>
+<a href="#963" id="963">963</a>
+<a href="#964" id="964">964</a>
+<a href="#965" id="965">965</a>
+<a href="#966" id="966">966</a>
+<a href="#967" id="967">967</a>
+<a href="#968" id="968">968</a>
+<a href="#969" id="969">969</a>
+<a href="#970" id="970">970</a>
+<a href="#971" id="971">971</a>
+<a href="#972" id="972">972</a>
+<a href="#973" id="973">973</a>
+<a href="#974" id="974">974</a>
+<a href="#975" id="975">975</a>
+<a href="#976" id="976">976</a>
+<a href="#977" id="977">977</a>
+<a href="#978" id="978">978</a>
+<a href="#979" id="979">979</a>
+<a href="#980" id="980">980</a>
+<a href="#981" id="981">981</a>
+<a href="#982" id="982">982</a>
+<a href="#983" id="983">983</a>
+<a href="#984" id="984">984</a>
+<a href="#985" id="985">985</a>
+<a href="#986" id="986">986</a>
+<a href="#987" id="987">987</a>
+<a href="#988" id="988">988</a>
+<a href="#989" id="989">989</a>
+<a href="#990" id="990">990</a>
+<a href="#991" id="991">991</a>
+<a href="#992" id="992">992</a>
+<a href="#993" id="993">993</a>
+<a href="#994" id="994">994</a>
+<a href="#995" id="995">995</a>
+<a href="#996" id="996">996</a>
+<a href="#997" id="997">997</a>
+<a href="#998" id="998">998</a>
+<a href="#999" id="999">999</a>
+<a href="#1000" id="1000">1000</a>
+<a href="#1001" id="1001">1001</a>
+<a href="#1002" id="1002">1002</a>
+<a href="#1003" id="1003">1003</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the 
Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -978,12 +1030,11 @@
 <span class="kw">use </span>arrow_ord::cmp::{eq, gt, gt_eq, lt, lt_eq, neq};
 <span class="kw">use </span>arrow_schema::{ArrowError, DataType, SchemaRef 
<span class="kw">as </span>ArrowSchemaRef};
 <span class="kw">use </span>arrow_string::like::starts_with;
-<span class="kw">use </span>async_stream::try_stream;
 <span class="kw">use </span>bytes::Bytes;
 <span class="kw">use </span>fnv::FnvHashSet;
+<span class="kw">use </span>futures::channel::mpsc::{channel, Sender};
 <span class="kw">use </span>futures::future::BoxFuture;
-<span class="kw">use </span>futures::stream::StreamExt;
-<span class="kw">use </span>futures::{try_join, TryFutureExt};
+<span class="kw">use </span>futures::{try_join, SinkExt, StreamExt, 
TryFutureExt, TryStreamExt};
 <span class="kw">use </span>parquet::arrow::arrow_reader::{ArrowPredicateFn, 
RowFilter};
 <span class="kw">use </span>parquet::arrow::async_reader::{AsyncFileReader, 
MetadataLoader};
 <span class="kw">use </span>parquet::arrow::{ParquetRecordBatchStreamBuilder, 
ProjectionMask, PARQUET_FIELD_ID_META_KEY};
@@ -995,25 +1046,38 @@
 <span class="kw">use </span><span 
class="kw">crate</span>::expr::visitors::bound_predicate_visitor::{visit, 
BoundPredicateVisitor};
 <span class="kw">use </span><span 
class="kw">crate</span>::expr::{BoundPredicate, BoundReference};
 <span class="kw">use </span><span class="kw">crate</span>::io::{FileIO, 
FileMetadata, FileRead};
-<span class="kw">use </span><span 
class="kw">crate</span>::scan::{ArrowRecordBatchStream, FileScanTaskStream};
+<span class="kw">use </span><span class="kw">crate</span>::runtime::spawn;
+<span class="kw">use </span><span 
class="kw">crate</span>::scan::{ArrowRecordBatchStream, FileScanTask, 
FileScanTaskStream};
 <span class="kw">use </span><span class="kw">crate</span>::spec::{Datum, 
Schema};
+<span class="kw">use </span><span 
class="kw">crate</span>::utils::available_parallelism;
 <span class="kw">use crate</span>::{Error, ErrorKind};
 
 <span class="doccomment">/// Builder to create ArrowReader
 </span><span class="kw">pub struct </span>ArrowReaderBuilder {
     batch_size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
     file_io: FileIO,
+    concurrency_limit_data_files: usize,
 }
 
 <span class="kw">impl </span>ArrowReaderBuilder {
     <span class="doccomment">/// Create a new ArrowReaderBuilder
     </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span 
class="kw">fn </span>new(file_io: FileIO) -&gt; <span class="self">Self </span>{
+        <span class="kw">let </span>num_cpus = available_parallelism().get();
+
         ArrowReaderBuilder {
             batch_size: <span class="prelude-val">None</span>,
             file_io,
+            concurrency_limit_data_files: num_cpus,
         }
     }
 
+    <span class="doccomment">/// Sets the max number of in flight data files 
that are being fetched
+    </span><span class="kw">pub fn 
</span>with_data_file_concurrency_limit(<span class="kw-2">mut </span><span 
class="self">self</span>, val: usize) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.concurrency_limit_data_files = val;
+
+        <span class="self">self
+    </span>}
+
     <span class="doccomment">/// Sets the desired size of batches in the 
response
     /// to something other than the default
     </span><span class="kw">pub fn </span>with_batch_size(<span 
class="kw-2">mut </span><span class="self">self</span>, batch_size: usize) 
-&gt; <span class="self">Self </span>{
@@ -1026,6 +1090,7 @@
         ArrowReader {
             batch_size: <span class="self">self</span>.batch_size,
             file_io: <span class="self">self</span>.file_io,
+            concurrency_limit_data_files: <span 
class="self">self</span>.concurrency_limit_data_files,
         }
     }
 }
@@ -1035,73 +1100,113 @@
 </span><span class="kw">pub struct </span>ArrowReader {
     batch_size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
     file_io: FileIO,
+
+    <span class="doccomment">/// the maximum number of data files that can be 
fetched at the same time
+    </span>concurrency_limit_data_files: usize,
 }
 
 <span class="kw">impl </span>ArrowReader {
     <span class="doccomment">/// Take a stream of FileScanTasks and reads all 
the files.
     /// Returns a stream of Arrow RecordBatches containing the data from the 
files
-    </span><span class="kw">pub fn </span>read(<span class="self">self</span>, 
<span class="kw-2">mut </span>tasks: FileScanTaskStream) -&gt; <span 
class="kw">crate</span>::Result&lt;ArrowRecordBatchStream&gt; {
+    </span><span class="kw">pub fn </span>read(<span class="self">self</span>, 
tasks: FileScanTaskStream) -&gt; <span 
class="prelude-ty">Result</span>&lt;ArrowRecordBatchStream&gt; {
         <span class="kw">let </span>file_io = <span 
class="self">self</span>.file_io.clone();
-
-        <span class="prelude-val">Ok</span>(<span 
class="macro">try_stream!</span> {
-            <span class="kw">while let </span><span 
class="prelude-val">Some</span>(task_result) = tasks.next().<span 
class="kw">await </span>{
-                <span class="kw">match </span>task_result {
-                    <span class="prelude-val">Ok</span>(task) =&gt; {
-                        <span class="comment">// Collect Parquet column 
indices from field ids
-                        </span><span class="kw">let </span><span 
class="kw-2">mut </span>collector = CollectFieldIdVisitor {
-                            field_ids: HashSet::default(),
-                        };
-                        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(predicates) = task.predicate() {
-                            visit(<span class="kw-2">&amp;mut 
</span>collector, predicates)<span class="question-mark">?</span>;
+        <span class="kw">let </span>batch_size = <span 
class="self">self</span>.batch_size;
+        <span class="kw">let </span>concurrency_limit_data_files = <span 
class="self">self</span>.concurrency_limit_data_files;
+
+        <span class="kw">let </span>(tx, rx) = 
channel(concurrency_limit_data_files);
+        <span class="kw">let </span><span class="kw-2">mut 
</span>channel_for_error = tx.clone();
+
+        spawn(<span class="kw">async move </span>{
+            <span class="kw">let </span>result = tasks
+                .map(|task| <span class="prelude-val">Ok</span>((task, 
file_io.clone(), tx.clone())))
+                .try_for_each_concurrent(
+                    concurrency_limit_data_files,
+                    |(file_scan_task, file_io, tx)| <span class="kw">async 
move </span>{
+                        <span class="kw">match </span>file_scan_task {
+                            <span class="prelude-val">Ok</span>(task) =&gt; {
+                                <span class="kw">let </span>file_path = 
task.data_file_path().to_string();
+
+                                spawn(<span class="kw">async move </span>{
+                                    <span 
class="self">Self</span>::process_file_scan_task(task, batch_size, file_io, tx)
+                                        .<span class="kw">await
+                                </span>})
+                                .<span class="kw">await
+                                </span>.map_err(|e| e.with_context(<span 
class="string">"file_path"</span>, file_path))
+                            }
+                            <span class="prelude-val">Err</span>(err) =&gt; 
<span class="prelude-val">Err</span>(err),
                         }
+                    },
+                )
+                .<span class="kw">await</span>;
 
-                        <span class="kw">let </span>parquet_file = file_io
-                            .new_input(task.data_file_path())<span 
class="question-mark">?</span>;
+            <span class="kw">if let </span><span 
class="prelude-val">Err</span>(error) = result {
+                <span class="kw">let _ </span>= channel_for_error.send(<span 
class="prelude-val">Err</span>(error)).<span class="kw">await</span>;
+            }
+        });
 
-                        <span class="kw">let </span>(parquet_metadata, 
parquet_reader) = <span class="macro">try_join!</span>(parquet_file.metadata(), 
parquet_file.reader())<span class="question-mark">?</span>;
-                        <span class="kw">let </span>arrow_file_reader = 
ArrowFileReader::new(parquet_metadata, parquet_reader);
+        <span class="kw">return </span><span 
class="prelude-val">Ok</span>(rx.boxed());
+    }
 
-                        <span class="kw">let </span><span class="kw-2">mut 
</span>batch_stream_builder = 
ParquetRecordBatchStreamBuilder::new(arrow_file_reader)
-                            .<span class="kw">await</span><span 
class="question-mark">?</span>;
+    <span class="kw">async fn </span>process_file_scan_task(
+        task: FileScanTask,
+        batch_size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
+        file_io: FileIO,
+        <span class="kw-2">mut </span>tx: Sender&lt;<span 
class="prelude-ty">Result</span>&lt;RecordBatch&gt;&gt;,
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="comment">// Collect Parquet column indices from field ids
+        </span><span class="kw">let </span><span class="kw-2">mut 
</span>collector = CollectFieldIdVisitor {
+            field_ids: HashSet::default(),
+        };
 
-                        <span class="kw">let </span>parquet_schema = 
batch_stream_builder.parquet_schema();
-                        <span class="kw">let </span>arrow_schema = 
batch_stream_builder.schema();
-                        <span class="kw">let </span>projection_mask = <span 
class="self">self</span>.get_arrow_projection_mask(task.project_field_ids(),task.schema(),parquet_schema,
 arrow_schema)<span class="question-mark">?</span>;
-                        batch_stream_builder = 
batch_stream_builder.with_projection(projection_mask);
+        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(predicates) = task.predicate() {
+            visit(<span class="kw-2">&amp;mut </span>collector, 
predicates)<span class="question-mark">?</span>;
+        }
 
-                        <span class="kw">let </span>parquet_schema = 
batch_stream_builder.parquet_schema();
-                        <span class="kw">let </span>row_filter = <span 
class="self">self</span>.get_row_filter(task.predicate(),parquet_schema, <span 
class="kw-2">&amp;</span>collector)<span class="question-mark">?</span>;
+        <span class="kw">let </span>parquet_file = 
file_io.new_input(task.data_file_path())<span class="question-mark">?</span>;
 
-                        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(row_filter) = row_filter {
-                            batch_stream_builder = 
batch_stream_builder.with_row_filter(row_filter);
-                        }
+        <span class="kw">let </span>(parquet_metadata, parquet_reader) =
+            <span class="macro">try_join!</span>(parquet_file.metadata(), 
parquet_file.reader())<span class="question-mark">?</span>;
+        <span class="kw">let </span>arrow_file_reader = 
ArrowFileReader::new(parquet_metadata, parquet_reader);
 
-                        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(batch_size) = <span 
class="self">self</span>.batch_size {
-                            batch_stream_builder = 
batch_stream_builder.with_batch_size(batch_size);
-                        }
+        <span class="kw">let </span><span class="kw-2">mut 
</span>batch_stream_builder =
+            ParquetRecordBatchStreamBuilder::new(arrow_file_reader).<span 
class="kw">await</span><span class="question-mark">?</span>;
 
-                        <span class="kw">let </span><span class="kw-2">mut 
</span>batch_stream = batch_stream_builder.build()<span 
class="question-mark">?</span>;
+        <span class="kw">let </span>parquet_schema = 
batch_stream_builder.parquet_schema();
+        <span class="kw">let </span>arrow_schema = 
batch_stream_builder.schema();
+        <span class="kw">let </span>projection_mask = <span 
class="self">Self</span>::get_arrow_projection_mask(
+            task.project_field_ids(),
+            task.schema(),
+            parquet_schema,
+            arrow_schema,
+        )<span class="question-mark">?</span>;
+        batch_stream_builder = 
batch_stream_builder.with_projection(projection_mask);
 
-                        <span class="kw">while let </span><span 
class="prelude-val">Some</span>(batch) = batch_stream.next().<span 
class="kw">await </span>{
-                            <span class="kw">yield </span>batch<span 
class="question-mark">?</span>;
-                        }
-                    }
-                    <span class="prelude-val">Err</span>(e) =&gt; {
-                        <span class="prelude-val">Err</span>(e)<span 
class="question-mark">?
-                    </span>}
-                }
-            }
+        <span class="kw">let </span>parquet_schema = 
batch_stream_builder.parquet_schema();
+        <span class="kw">let </span>row_filter = <span 
class="self">Self</span>::get_row_filter(task.predicate(), parquet_schema, 
<span class="kw-2">&amp;</span>collector)<span class="question-mark">?</span>;
+
+        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(row_filter) = row_filter {
+            batch_stream_builder = 
batch_stream_builder.with_row_filter(row_filter);
         }
-        .boxed())
+
+        <span class="kw">if let </span><span 
class="prelude-val">Some</span>(batch_size) = batch_size {
+            batch_stream_builder = 
batch_stream_builder.with_batch_size(batch_size);
+        }
+
+        <span class="kw">let </span><span class="kw-2">mut </span>batch_stream 
= batch_stream_builder.build()<span class="question-mark">?</span>;
+
+        <span class="kw">while let </span><span 
class="prelude-val">Some</span>(batch) = batch_stream.try_next().<span 
class="kw">await</span><span class="question-mark">? </span>{
+            tx.send(<span class="prelude-val">Ok</span>(batch)).<span 
class="kw">await</span><span class="question-mark">?
+        </span>}
+
+        <span class="prelude-val">Ok</span>(())
     }
 
     <span class="kw">fn </span>get_arrow_projection_mask(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
         field_ids: <span class="kw-2">&amp;</span>[i32],
         iceberg_schema_of_task: <span class="kw-2">&amp;</span>Schema,
         parquet_schema: <span class="kw-2">&amp;</span>SchemaDescriptor,
         arrow_schema: <span class="kw-2">&amp;</span>ArrowSchemaRef,
-    ) -&gt; <span class="kw">crate</span>::Result&lt;ProjectionMask&gt; {
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;ProjectionMask&gt; {
         <span class="kw">if </span>field_ids.is_empty() {
             <span class="prelude-val">Ok</span>(ProjectionMask::all())
         } <span class="kw">else </span>{
@@ -1167,7 +1272,6 @@
     }
 
     <span class="kw">fn </span>get_row_filter(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
         predicates: <span class="prelude-ty">Option</span>&lt;<span 
class="kw-2">&amp;</span>BoundPredicate&gt;,
         parquet_schema: <span class="kw-2">&amp;</span>SchemaDescriptor,
         collector: <span class="kw-2">&amp;</span>CollectFieldIdVisitor,
diff --git a/api/src/iceberg/lib.rs.html b/api/src/iceberg/lib.rs.html
index 54c9034..a0293ef 100644
--- a/api/src/iceberg/lib.rs.html
+++ b/api/src/iceberg/lib.rs.html
@@ -82,6 +82,7 @@
 <a href="#82" id="82">82</a>
 <a href="#83" id="83">83</a>
 <a href="#84" id="84">84</a>
+<a href="#85" id="85">85</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the 
Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -165,5 +166,6 @@
 <span class="kw">mod </span>runtime;
 
 <span class="kw">pub mod </span>arrow;
+<span class="kw">mod </span>utils;
 <span class="kw">pub mod </span>writer;
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/scan.rs.html b/api/src/iceberg/scan.rs.html
index 9c2f892..f5cac37 100644
--- a/api/src/iceberg/scan.rs.html
+++ b/api/src/iceberg/scan.rs.html
@@ -1574,6 +1574,20 @@
 <a href="#1574" id="1574">1574</a>
 <a href="#1575" id="1575">1575</a>
 <a href="#1576" id="1576">1576</a>
+<a href="#1577" id="1577">1577</a>
+<a href="#1578" id="1578">1578</a>
+<a href="#1579" id="1579">1579</a>
+<a href="#1580" id="1580">1580</a>
+<a href="#1581" id="1581">1581</a>
+<a href="#1582" id="1582">1582</a>
+<a href="#1583" id="1583">1583</a>
+<a href="#1584" id="1584">1584</a>
+<a href="#1585" id="1585">1585</a>
+<a href="#1586" id="1586">1586</a>
+<a href="#1587" id="1587">1587</a>
+<a href="#1588" id="1588">1588</a>
+<a href="#1589" id="1589">1589</a>
+<a href="#1590" id="1590">1590</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the 
Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -1615,6 +1629,7 @@
     SchemaRef, SnapshotRef, TableMetadataRef,
 };
 <span class="kw">use </span><span class="kw">crate</span>::table::Table;
+<span class="kw">use </span><span 
class="kw">crate</span>::utils::available_parallelism;
 <span class="kw">use crate</span>::{Error, ErrorKind, <span 
class="prelude-ty">Result</span>};
 
 <span class="doccomment">/// A stream of [`FileScanTask`].
@@ -1631,15 +1646,14 @@
     batch_size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
     case_sensitive: bool,
     filter: <span class="prelude-ty">Option</span>&lt;Predicate&gt;,
-    concurrency_limit_manifest_files: usize,
+    concurrency_limit_data_files: usize,
     concurrency_limit_manifest_entries: usize,
+    concurrency_limit_manifest_files: usize,
 }
 
 <span class="kw">impl</span>&lt;<span class="lifetime">'a</span>&gt; 
TableScanBuilder&lt;<span class="lifetime">'a</span>&gt; {
     <span class="kw">pub</span>(<span class="kw">crate</span>) <span 
class="kw">fn </span>new(table: <span class="kw-2">&amp;</span><span 
class="lifetime">'a </span>Table) -&gt; <span class="self">Self </span>{
-        <span class="kw">let </span>num_cpus = 
std::thread::available_parallelism()
-            .expect(<span class="string">"failed to get number of CPUs"</span>)
-            .get();
+        <span class="kw">let </span>num_cpus = available_parallelism().get();
 
         <span class="self">Self </span>{
             table,
@@ -1648,8 +1662,9 @@
             batch_size: <span class="prelude-val">None</span>,
             case_sensitive: <span class="bool-val">true</span>,
             filter: <span class="prelude-val">None</span>,
-            concurrency_limit_manifest_files: num_cpus,
+            concurrency_limit_data_files: num_cpus,
             concurrency_limit_manifest_entries: num_cpus,
+            concurrency_limit_manifest_files: num_cpus,
         }
     }
 
@@ -1700,12 +1715,13 @@
     </span><span class="kw">pub fn </span>with_concurrency_limit(<span 
class="kw-2">mut </span><span class="self">self</span>, limit: usize) -&gt; 
<span class="self">Self </span>{
         <span class="self">self</span>.concurrency_limit_manifest_files = 
limit;
         <span class="self">self</span>.concurrency_limit_manifest_entries = 
limit;
+        <span class="self">self</span>.concurrency_limit_data_files = limit;
         <span class="self">self
     </span>}
 
-    <span class="doccomment">/// Sets the manifest file concurrency limit for 
this scan
-    </span><span class="kw">pub fn 
</span>with_manifest_file_concurrency_limit(<span class="kw-2">mut </span><span 
class="self">self</span>, limit: usize) -&gt; <span class="self">Self </span>{
-        <span class="self">self</span>.concurrency_limit_manifest_files = 
limit;
+    <span class="doccomment">/// Sets the data file concurrency limit for this 
scan
+    </span><span class="kw">pub fn 
</span>with_data_file_concurrency_limit(<span class="kw-2">mut </span><span 
class="self">self</span>, limit: usize) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.concurrency_limit_data_files = limit;
         <span class="self">self
     </span>}
 
@@ -1715,6 +1731,12 @@
         <span class="self">self
     </span>}
 
+    <span class="doccomment">/// Sets the manifest file concurrency limit for 
this scan
+    </span><span class="kw">pub fn 
</span>with_manifest_file_concurrency_limit(<span class="kw-2">mut </span><span 
class="self">self</span>, limit: usize) -&gt; <span class="self">Self </span>{
+        <span class="self">self</span>.concurrency_limit_manifest_files = 
limit;
+        <span class="self">self
+    </span>}
+
     <span class="doccomment">/// Build the table scan.
     </span><span class="kw">pub fn </span>build(<span 
class="self">self</span>) -&gt; <span 
class="prelude-ty">Result</span>&lt;TableScan&gt; {
         <span class="kw">let </span>snapshot = <span class="kw">match 
</span><span class="self">self</span>.snapshot_id {
@@ -1820,10 +1842,11 @@
         <span class="prelude-val">Ok</span>(TableScan {
             batch_size: <span class="self">self</span>.batch_size,
             column_names: <span class="self">self</span>.column_names,
-            concurrency_limit_manifest_files: <span 
class="self">self</span>.concurrency_limit_manifest_files,
             file_io: <span class="self">self</span>.table.file_io().clone(),
             plan_context,
+            concurrency_limit_data_files: <span 
class="self">self</span>.concurrency_limit_data_files,
             concurrency_limit_manifest_entries: <span 
class="self">self</span>.concurrency_limit_manifest_entries,
+            concurrency_limit_manifest_files: <span 
class="self">self</span>.concurrency_limit_manifest_files,
         })
     }
 }
@@ -1842,6 +1865,10 @@
     <span class="doccomment">/// The maximum number of [`ManifestEntry`]s that 
will
     /// be processed in parallel
     </span>concurrency_limit_manifest_entries: usize,
+
+    <span class="doccomment">/// The maximum number of [`ManifestEntry`]s that 
will
+    /// be processed in parallel
+    </span>concurrency_limit_data_files: usize,
 }
 
 <span class="doccomment">/// PlanContext wraps a [`SnapshotRef`] alongside all 
the other
@@ -1926,7 +1953,8 @@
 
     <span class="doccomment">/// Returns an [`ArrowRecordBatchStream`].
     </span><span class="kw">pub async fn </span>to_arrow(<span 
class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span 
class="prelude-ty">Result</span>&lt;ArrowRecordBatchStream&gt; {
-        <span class="kw">let </span><span class="kw-2">mut 
</span>arrow_reader_builder = ArrowReaderBuilder::new(<span 
class="self">self</span>.file_io.clone());
+        <span class="kw">let </span><span class="kw-2">mut 
</span>arrow_reader_builder = ArrowReaderBuilder::new(<span 
class="self">self</span>.file_io.clone())
+            .with_data_file_concurrency_limit(<span 
class="self">self</span>.concurrency_limit_data_files);
 
         <span class="kw">if let </span><span 
class="prelude-val">Some</span>(batch_size) = <span 
class="self">self</span>.batch_size {
             arrow_reader_builder = 
arrow_reader_builder.with_batch_size(batch_size);
diff --git a/api/src/iceberg/utils.rs.html b/api/src/iceberg/utils.rs.html
new file mode 100644
index 0000000..4dfec98
--- /dev/null
+++ b/api/src/iceberg/utils.rs.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Source of 
the Rust file `crates/iceberg/src/utils.rs`."><title>utils.rs - 
source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a
 [...]
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+</pre></div><pre class="rust"><code><span class="comment">// Licensed to the 
Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="kw">use </span>std::num::NonZero;
+
+<span class="comment">// Use a default value of 1 as the safest option.
+// See 
https://doc.rust-lang.org/std/thread/fn.available_parallelism.html#limitations
+// for more details.
+</span><span class="kw">const </span>DEFAULT_PARALLELISM: usize = <span 
class="number">1</span>;
+
+<span class="doccomment">/// Uses [`std::thread::available_parallelism`] in 
order to
+/// retrieve an estimate of the default amount of parallelism
+/// that should be used. Note that [`std::thread::available_parallelism`]
+/// returns a `Result` as it can fail, so here we use
+/// a default value instead.
+/// Note: we don't use a OnceCell or LazyCell here as there
+/// are circumstances where the level of available
+/// parallelism can change during the lifetime of an executing
+/// process, but this should not be called in a hot loop.
+</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span 
class="kw">fn </span>available_parallelism() -&gt; NonZero&lt;usize&gt; {
+    std::thread::available_parallelism().unwrap_or_else(|_err| {
+        <span class="comment">// Failed to get the level of parallelism.
+        // TODO: log/trace when this fallback occurs.
+
+        // Using a default value.
+        </span>NonZero::new(DEFAULT_PARALLELISM).unwrap()
+    })
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file


Reply via email to