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 978de3f  deploy: 0f7fc208c04bcfd2583d324b1a004d468755c334
978de3f is described below

commit 978de3f5f44b8c2d8a6a139710b5b919bf557a14
Author: liurenjie1024 <[email protected]>
AuthorDate: Sat Aug 3 02:17:28 2024 +0000

    deploy: 0f7fc208c04bcfd2583d324b1a004d468755c334
---
 api/iceberg/expr/enum.BoundPredicate.html          |   4 +-
 api/iceberg/expr/enum.Predicate.html               |   4 +-
 api/iceberg/expr/enum.PredicateOperator.html       |   4 +-
 api/iceberg/expr/struct.BinaryExpression.html      |   4 +-
 api/iceberg/expr/struct.BoundReference.html        |   4 +-
 api/iceberg/spec/enum.DataFileBuilderError.html    |   2 +-
 api/iceberg/spec/enum.DataFileFormat.html          |   2 +-
 api/iceberg/spec/enum.Literal.html                 |   4 +-
 api/iceberg/spec/enum.ManifestContentType.html     |   2 +-
 api/iceberg/spec/enum.PrimitiveType.html           |   4 +-
 api/iceberg/spec/enum.Transform.html               |   4 +-
 api/iceberg/spec/enum.Type.html                    |   2 +-
 .../enum.UnboundPartitionSpecBuilderError.html     |   2 +-
 api/iceberg/spec/struct.Datum.html                 |   2 +-
 api/iceberg/spec/struct.Schema.html                |   6 +-
 api/iceberg/spec/struct.SortField.html             |   4 +-
 api/iceberg/spec/struct.StructType.html            |   4 +-
 api/iceberg/struct.Error.html                      |   2 +-
 .../struct.MemoryCatalog.html                      |  32 +-
 api/search-index.js                                |   4 +-
 api/src/iceberg_catalog_memory/catalog.rs.html     | 498 ++++++++++++++++++++-
 api/trait.impl/core/convert/trait.From.js          |   2 +-
 22 files changed, 531 insertions(+), 65 deletions(-)

diff --git a/api/iceberg/expr/enum.BoundPredicate.html 
b/api/iceberg/expr/enum.BoundPredicate.html
index 67aaa33..098c452 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.204/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.204/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.204/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.204/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.204/serde/ser/trait.Serialize.html"; title="tr 
[...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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/enum.Predicate.html 
b/api/iceberg/expr/enum.Predicate.html
index f093d04..6d4d0c6 100644
--- a/api/iceberg/expr/enum.Predicate.html
+++ b/api/iceberg/expr/enum.Predicate.html
@@ -82,8 +82,8 @@ predicates.</p>
     &amp;self,
     schema: <a class="type" href="../spec/type.SchemaRef.html" title="type 
iceberg::spec::SchemaRef">SchemaRef</a>,
     case_sensitive: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>,
-) -&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="enum" href="enum.BoundPredicate.html" 
title="enum 
iceberg::expr::BoundPredicate">BoundPredicate</a>&gt;</h4></section></summary><div
 class='docblock'>Bind an expression to a 
schema.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Clone-for-Predicate" 
class="impl"><a class="src rightside" href="../../src/iceberg/expr/predicate.r 
[...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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 [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="enum" href="enum.BoundPredicate.html" 
title="enum 
iceberg::expr::BoundPredicate">BoundPredicate</a>&gt;</h4></section></summary><div
 class='docblock'>Bind an expression to a 
schema.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Clone-for-Predicate" 
class="impl"><a class="src rightside" href="../../src/iceberg/expr/predicate.r 
[...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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 [...]
 <p>This is different from <a href="enum.Predicate.html#method.negate" 
title="method 
iceberg::expr::Predicate::negate"><code>Predicate::negate()</code></a> since it 
doesn’t rewrite expression, but
 just adds a <code>NOT</code> operator.</p>
 <h5 id="example-4"><a class="doc-anchor" href="#example-4">§</a>Example</h5>
diff --git a/api/iceberg/expr/enum.PredicateOperator.html 
b/api/iceberg/expr/enum.PredicateOperator.html
index 2508dad..10fcdb0 100644
--- a/api/iceberg/expr/enum.PredicateOperator.html
+++ b/api/iceberg/expr/enum.PredicateOperator.html
@@ -38,8 +38,8 @@
 <span class="macro">assert!</span>(PredicateOperator::Eq.negate() == 
PredicateOperator::NotEq);
 <span class="macro">assert!</span>(PredicateOperator::In.negate() == 
PredicateOperator::NotIn);
 <span class="macro">assert!</span>(PredicateOperator::StartsWith.negate() == 
PredicateOperator::NotStartsWith);</code></pre></div>
-</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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Clone-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Clone-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Serialize-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.204/serde/ser/trait.Serialize.html"; title="tra 
[...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-Copy-for-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/ice [...]
diff --git a/api/iceberg/expr/struct.BinaryExpression.html 
b/api/iceberg/expr/struct.BinaryExpression.html
index 4aee7fa..bb84018 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.204/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.204/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.204/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.204/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.204/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.204/serde/ser/trai [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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 c229029..7127f1b 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.204/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.204/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.204/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.204/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.204/serde/ser/trait.Serialize.html"; 
title="trait s [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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/spec/enum.DataFileBuilderError.html 
b/api/iceberg/spec/enum.DataFileBuilderError.html
index 49986cb..20194b7 100644
--- a/api/iceberg/spec/enum.DataFileBuilderError.html
+++ b/api/iceberg/spec/enum.DataFileBuilderError.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 DataFileBuilder</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-DataFileBuilderError" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest.rs.html#933">source</a><a 
href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
+</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-DataFileBuilderError" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest.rs.html#933">source</a><a 
href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
     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.DataFileFormat.html 
b/api/iceberg/spec/enum.DataFileFormat.html
index f22f530..f3b50ab 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#1165">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#1165">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#1165">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.Literal.html 
b/api/iceberg/spec/enum.Literal.html
index 6a40967..1372987 100644
--- a/api/iceberg/spec/enum.Literal.html
+++ b/api/iceberg/spec/enum.Literal.html
@@ -171,9 +171,9 @@ See <a 
href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t2 = Literal::decimal_from_str(<span 
class="string">"123.45"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(t1, t2);</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" 
open><summary><section id="impl-Literal-1" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/values.rs.html#1606-1904">source</a><a 
href="#impl-Literal-1" class="anchor">§</a><h3 class="code-header">impl <a 
class="enum" href="enum.Literal.html" title="enum 
iceberg::spec::Literal">Literal</a></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><secti 
[...]
+</div></details></div></details><details class="toggle implementors-toggle" 
open><summary><section id="impl-Literal-1" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/values.rs.html#1606-1904">source</a><a 
href="#impl-Literal-1" class="anchor">§</a><h3 class="code-header">impl <a 
class="enum" href="enum.Literal.html" title="enum 
iceberg::spec::Literal">Literal</a></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><secti 
[...]
 <p>See <a 
href="https://iceberg.apache.org/spec/#json-single-value-serialization";>this 
spec</a> for reference.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.try_into_json" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1778-1880">source</a><h4 
class="code-header">pub fn <a href="#method.try_into_json" 
class="fn">try_into_json</a>(self, type: &amp;<a class="enum" 
href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a 
class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.try_into_json" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1778-1880">source</a><h4 
class="code-header">pub fn <a href="#method.try_into_json" 
class="fn">try_into_json</a>(self, type: &amp;<a class="enum" 
href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a 
class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a [...]
 <p>See <a 
href="https://iceberg.apache.org/spec/#json-single-value-serialization";>this 
spec</a> for reference.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.into_any" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1883-1903">source</a><h4 
class="code-header">pub fn <a href="#method.into_any" 
class="fn">into_any</a>(self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/cor [...]
 </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-Literal" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1134">source</a><a 
href="#impl-Clone-for-Literal" class="anchor">§</a><h3 class="code-header">impl 
<a class [...]
diff --git a/api/iceberg/spec/enum.ManifestContentType.html 
b/api/iceberg/spec/enum.ManifestContentType.html
index 110bf0e..886dd53 100644
--- a/api/iceberg/spec/enum.ManifestContentType.html
+++ b/api/iceberg/spec/enum.ManifestContentType.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>The type of files tracked by the manifest, either data or 
delete files; Data(0) for all v1 manifests</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.Data" class="variant"><a href="#variant.Data" 
class="anchor">§</a><h3 class="code-header">Data = 0</h3></section><div 
class="docblock"><p>The manifest content is data.</p>
 </div><section id="variant.Deletes" class="variant"><a href="#variant.Deletes" 
class="anchor">§</a><h3 class="code-header">Deletes = 1</h3></section><div 
class="docblock"><p>The manifest content is deletes.</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-ManifestContentType" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest_list.rs.html#579">source</a><a 
href="#impl-Clone-for-ManifestContentType" class="anchor">§</a><h3 
class="code-header">impl <a c [...]
+</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-ManifestContentType" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/manifest_list.rs.html#579">source</a><a 
href="#impl-Clone-for-ManifestContentType" class="anchor">§</a><h3 
class="code-header">impl <a c [...]
 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-TryFrom%3Ci32%3E-for-ManifestContentType" class="impl"><a class="src 
rightside" 
href="../../src/iceberg/spec/manifest_list.rs.html#611-627">source</a><a 
href="#impl-TryFrom%3Ci32%3E-for-ManifestContentType" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/ [...]
     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.PrimitiveType.html 
b/api/iceberg/spec/enum.PrimitiveType.html
index d0ab3c2..6a17800 100644
--- a/api/iceberg/spec/enum.PrimitiveType.html
+++ b/api/iceberg/spec/enum.PrimitiveType.html
@@ -41,8 +41,8 @@
     __deserializer: __D,
 ) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="enum" 
href="enum.PrimitiveType.html" title="enum 
iceberg::spec::PrimitiveType">PrimitiveType</a>, __D::<a class="associatedtype" 
href="https://docs.rs/serde/1.0.204/serde/de/trait.Deserializer.html#associatedtype.Error";
 title="type serde::de::Deserializer::Error">Error</a>&gt;<div 
class="where">where
     __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></div></details><details
 class="toggle implementors-toggle" open><summary><section 
id="impl-PrimitiveType-2" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#238-259">source</a><a 
href="#impl-PrimitiveType-2" class="anchor">§</a><h3 class="code-header">impl 
<a class="enum" [...]
-</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-PrimitiveType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#200">source</a><a 
href="#impl-Clone-for-PrimitiveType" class="anchor">§</a><h3 
class="code-header" [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-PrimitiveType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#200">source</a><a 
href="#impl-Clone-for-PrimitiveType" class="anchor">§</a><h3 
class="code-header" [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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 [...]
     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/enum.Transform.html 
b/api/iceberg/spec/enum.Transform.html
index 7038664..4fafb1e 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.204/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.204/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.204/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.204/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#666-671">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.204/serde/ser/trait.Serialize.html"; 
title="trait se [...]
     S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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 abd6bb4..c489efe 100644
--- a/api/iceberg/spec/enum.Type.html
+++ b/api/iceberg/spec/enum.Type.html
@@ -18,7 +18,7 @@
 </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.204/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.204/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 [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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.204/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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 2b12dcc..f427754 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/struct.Datum.html 
b/api/iceberg/spec/struct.Datum.html
index e5cdd18..d5b55cd 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#1012-1014">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#1018-1024">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#105">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="tra [...]
+</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#105">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="tra [...]
     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 ffa19ff..fcb81cb 100644
--- a/api/iceberg/spec/struct.Schema.html
+++ b/api/iceberg/spec/struct.Schema.html
@@ -17,11 +17,11 @@
 </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.204/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.204/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.204/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.204/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.204/serde/ser/trait.Serialize.html"; 
title="trait serde::ser::Seri [...]
-    __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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- [...]
+    __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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- [...]
     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/spec/struct.SortField.html 
b/api/iceberg/spec/struct.SortField.html
index 4c040d2..286eb33 100644
--- a/api/iceberg/spec/struct.SortField.html
+++ b/api/iceberg/spec/struct.SortField.html
@@ -11,8 +11,8 @@
 </div><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-SortField" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-SortField" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.SortField.html" title="struct 
iceberg::spec::SortFiel [...]
 On the builder, call <code>.source_id(...)</code>, 
<code>.transform(...)</code>, <code>.direction(...)</code>, 
<code>.null_order(...)</code> to set the values of the fields.
 Finally, call <code>.build()</code> to create the instance of 
<code>SortField</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-SortField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Clone-for-SortField" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-SortField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Clone-for-SortField" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-SortField" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Serialize-for-SortField" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.204/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Eq-for-SortField" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
diff --git a/api/iceberg/spec/struct.StructType.html 
b/api/iceberg/spec/struct.StructType.html
index 2930822..3261147 100644
--- a/api/iceberg/spec/struct.StructType.html
+++ b/api/iceberg/spec/struct.StructType.html
@@ -3,8 +3,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field_by_id" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#440-442">source</a><h4 
class="code-header">pub fn <a href="#method.field_by_id" 
class="fn">field_by_id</a>(&amp;self, 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/option/enum.Option.ht [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field_by_name" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#454-456">source</a><h4 
class="code-header">pub fn <a href="#method.field_by_name" 
class="fn">field_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/option/e [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.fields" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#473-475">source</a><h4 
class="code-header">pub fn <a href="#method.fields" 
class="fn">fields</a>(&amp;self) -&gt; &amp;[<a class="type" 
href="type.NestedFieldRef.html" title="type 
iceberg::spec::NestedFieldRef">NestedFieldRef</a>]</h4></section></summary><div 
class="docblock"><p>Get fields.</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-StructType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#372">source</a><a 
href="#impl-Clone-for-StructType" class="anchor">§</a><h3 
class="code-header">impl  [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-StructType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#372">source</a><a 
href="#impl-Clone-for-StructType" class="anchor">§</a><h3 
class="code-header">impl  [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/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-StructType" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#372">source</a><a 
href="#impl-Serialize-for-StructType" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.204/serde/ser/trait.Serialize.html"; 
title="trait serd [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.204/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.204/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Eq-for-StructType" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec [...]
diff --git a/api/iceberg/struct.Error.html b/api/iceberg/struct.Error.html
index d3ed5c7..a968d28 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/iceberg_catalog_memory/struct.MemoryCatalog.html 
b/api/iceberg_catalog_memory/struct.MemoryCatalog.html
index 6c1b85a..4218327 100644
--- a/api/iceberg_catalog_memory/struct.MemoryCatalog.html
+++ b/api/iceberg_catalog_memory/struct.MemoryCatalog.html
@@ -1,13 +1,13 @@
-<!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="Memory 
catalog implementation."><title>MemoryCatalog in iceberg_catalog_memory - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium
 [...]
-</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-MemoryCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#43-51">source</a><a 
href="#impl-MemoryCatalog" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.MemoryCatalog.html" ti [...]
-</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-Catalog-for-MemoryCatalog" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#54-266">source</a><a 
href="#impl-Catalog-for-MemoryCatalog" class="anchor">§</a><h3 class=" [...]
+<!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="Memory 
catalog implementation."><title>MemoryCatalog in iceberg_catalog_memory - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium
 [...]
+</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-MemoryCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#47-56">source</a><a 
href="#impl-MemoryCatalog" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.MemoryCatalog.html" ti [...]
+</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-Catalog-for-MemoryCatalog" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#59-280">source</a><a 
href="#impl-Catalog-for-MemoryCatalog" class="anchor">§</a><h3 class=" [...]
     &amp;'life0 self,
     maybe_parent: <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"; 
title="enum core::option::Option">Option</a>&lt;&amp;'life1 NamespaceIdent&gt;,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>List namespaces inside the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.create_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#85-96">source</a><a 
href="#method.create_namespace" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">create_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.create_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#90-101">source</a><a 
href="#method.create_namespace" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">create_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
     properties: <a class="struct" 
href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html";
 title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a 
class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>, <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>&gt;,
@@ -15,21 +15,21 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Create a new namespace inside the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.get_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#99-110">source</a><a 
href="#method.get_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">get_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.get_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#104-115">source</a><a 
href="#method.get_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">get_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = 
Result&lt;Namespace&gt;&gt; + <a class="trait" href="https://do [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Get a namespace information from the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.namespace_exists" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#113-117">source</a><a 
href="#method.namespace_exists" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">namespace_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.namespace_exists" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#118-122">source</a><a 
href="#method.namespace_exists" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">namespace_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Check if namespace exists in catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.update_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#124-132">source</a><a 
href="#method.update_namespace" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">update_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.update_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#129-137">source</a><a 
href="#method.update_namespace" class="anchor">§</a><h4 class="code-header">fn 
<a class="fn">update_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
     properties: <a class="struct" 
href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html";
 title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a 
class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>, <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>&gt;,
@@ -39,21 +39,21 @@
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Update a namespace inside the catalog.</p>
 <h5 id="behavior"><a class="doc-anchor" href="#behavior">§</a>Behavior</h5>
 <p>The properties must be the full set of namespace.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.drop_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#135-139">source</a><a 
href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.drop_namespace" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#140-144">source</a><a 
href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Drop a namespace from the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.list_tables" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#142-152">source</a><a 
href="#method.list_tables" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">list_tables</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.list_tables" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#147-157">source</a><a 
href="#method.list_tables" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">list_tables</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>List tables from namespace.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.create_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#155-206">source</a><a 
href="#method.create_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">create_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.create_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#160-220">source</a><a 
href="#method.create_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">create_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     namespace_ident: &amp;'life1 NamespaceIdent,
     table_creation: TableCreation,
@@ -61,28 +61,28 @@
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Create a new table inside the namespace.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.load_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#209-224">source</a><a 
href="#method.load_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">load_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.load_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#223-238">source</a><a 
href="#method.load_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">load_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     table_ident: &amp;'life1 TableIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = 
Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Load table from the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.drop_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#227-231">source</a><a 
href="#method.drop_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.drop_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#241-245">source</a><a 
href="#method.drop_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     table_ident: &amp;'life1 TableIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Drop a table from the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.table_exists" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#234-238">source</a><a 
href="#method.table_exists" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">table_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.table_exists" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#248-252">source</a><a 
href="#method.table_exists" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">table_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     table_ident: &amp;'life1 TableIdent,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a 
class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Check if a table exists in the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.rename_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#241-257">source</a><a 
href="#method.rename_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">rename_table</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.rename_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#255-271">source</a><a 
href="#method.rename_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">rename_table</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
     src_table_ident: &amp;'life1 TableIdent,
     dst_table_ident: &amp;'life2 TableIdent,
@@ -91,13 +91,13 @@
     'life0: 'async_trait,
     'life1: 'async_trait,
     'life2: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Rename a table in the catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.update_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#260-265">source</a><a 
href="#method.update_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">update_table</a>&lt;'life0, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.update_table" class="method trait-impl"><a class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#274-279">source</a><a 
href="#method.update_table" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">update_table</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     _commit: TableCommit,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = 
Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
     Self: 'async_trait,
     'life0: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Update a table to the catalog.</p>
-</div></details></div></details><details class="toggle implementors-toggle" 
open><summary><section id="impl-Debug-for-MemoryCatalog" class="impl"><a 
class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#37">source</a><a 
href="#impl-Debug-for-MemoryCatalog" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html"; title="trait 
core::fmt::Debug">Debug</a> for <a class="struct" href="struct.Memory [...]
+</div></details></div></details><details class="toggle implementors-toggle" 
open><summary><section id="impl-Debug-for-MemoryCatalog" class="impl"><a 
class="src rightside" 
href="../src/iceberg_catalog_memory/catalog.rs.html#40">source</a><a 
href="#impl-Debug-for-MemoryCatalog" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html"; title="trait 
core::fmt::Debug">Debug</a> for <a class="struct" href="struct.Memory [...]
     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/search-index.js b/api/search-index.js
index bb21dce..c708ddb 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,8 +1,8 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
 
["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"]
 [...]
+["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"]
 [...]
 
["iceberg_catalog_rest",{"t":"FFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["RestCatalog","RestCatalogConfig","borrow","borrow","borrow_mut","borrow_mut","builder","clone","clone_into","create_namespace","create_table","drop_namespace","drop_table","fmt","fmt","from","from","get_namespace","into","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","update_names
 [...]
 
["iceberg_datafusion",{"t":"FNNNNHNNNHNNNNN","n":["IcebergCatalogProvider","as_any","borrow","borrow_mut","from","from_datafusion_error","into","schema","schema_names","to_datafusion_error","try_from","try_into","try_new","type_id","vzip"],"q":[[0,"iceberg_datafusion"],[15,"iceberg_datafusion::catalog"],[16,"core::any"],[17,"datafusion_common::error"],[18,"iceberg::error"],[19,"datafusion::catalog::schema"],[20,"alloc::sync"],[21,"core::option"],[22,"alloc::string"],[23,"alloc::vec"],[24
 [...]
 
["iceberg_test_utils",{"t":"CHHFNNNNNNNNNNNNN","n":["docker","normalize_test_name","set_up","DockerCompose","borrow","borrow_mut","drop","fmt","from","get_container_ip","into","new","project_name","run","try_from","try_into","type_id"],"q":[[0,"iceberg_test_utils"],[3,"iceberg_test_utils::docker"],[17,"alloc::string"],[18,"core::fmt"],[19,"core::net::ip_addr"],[20,"core::convert"],[21,"core::result"],[22,"core::any"],[23,"iceberg_test_utils::common"]],"i":[0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6
 [...]
diff --git a/api/src/iceberg_catalog_memory/catalog.rs.html 
b/api/src/iceberg_catalog_memory/catalog.rs.html
index 1922042..d6c1ac2 100644
--- a/api/src/iceberg_catalog_memory/catalog.rs.html
+++ b/api/src/iceberg_catalog_memory/catalog.rs.html
@@ -1447,6 +1447,239 @@
 <a href="#1447" id="1447">1447</a>
 <a href="#1448" id="1448">1448</a>
 <a href="#1449" id="1449">1449</a>
+<a href="#1450" id="1450">1450</a>
+<a href="#1451" id="1451">1451</a>
+<a href="#1452" id="1452">1452</a>
+<a href="#1453" id="1453">1453</a>
+<a href="#1454" id="1454">1454</a>
+<a href="#1455" id="1455">1455</a>
+<a href="#1456" id="1456">1456</a>
+<a href="#1457" id="1457">1457</a>
+<a href="#1458" id="1458">1458</a>
+<a href="#1459" id="1459">1459</a>
+<a href="#1460" id="1460">1460</a>
+<a href="#1461" id="1461">1461</a>
+<a href="#1462" id="1462">1462</a>
+<a href="#1463" id="1463">1463</a>
+<a href="#1464" id="1464">1464</a>
+<a href="#1465" id="1465">1465</a>
+<a href="#1466" id="1466">1466</a>
+<a href="#1467" id="1467">1467</a>
+<a href="#1468" id="1468">1468</a>
+<a href="#1469" id="1469">1469</a>
+<a href="#1470" id="1470">1470</a>
+<a href="#1471" id="1471">1471</a>
+<a href="#1472" id="1472">1472</a>
+<a href="#1473" id="1473">1473</a>
+<a href="#1474" id="1474">1474</a>
+<a href="#1475" id="1475">1475</a>
+<a href="#1476" id="1476">1476</a>
+<a href="#1477" id="1477">1477</a>
+<a href="#1478" id="1478">1478</a>
+<a href="#1479" id="1479">1479</a>
+<a href="#1480" id="1480">1480</a>
+<a href="#1481" id="1481">1481</a>
+<a href="#1482" id="1482">1482</a>
+<a href="#1483" id="1483">1483</a>
+<a href="#1484" id="1484">1484</a>
+<a href="#1485" id="1485">1485</a>
+<a href="#1486" id="1486">1486</a>
+<a href="#1487" id="1487">1487</a>
+<a href="#1488" id="1488">1488</a>
+<a href="#1489" id="1489">1489</a>
+<a href="#1490" id="1490">1490</a>
+<a href="#1491" id="1491">1491</a>
+<a href="#1492" id="1492">1492</a>
+<a href="#1493" id="1493">1493</a>
+<a href="#1494" id="1494">1494</a>
+<a href="#1495" id="1495">1495</a>
+<a href="#1496" id="1496">1496</a>
+<a href="#1497" id="1497">1497</a>
+<a href="#1498" id="1498">1498</a>
+<a href="#1499" id="1499">1499</a>
+<a href="#1500" id="1500">1500</a>
+<a href="#1501" id="1501">1501</a>
+<a href="#1502" id="1502">1502</a>
+<a href="#1503" id="1503">1503</a>
+<a href="#1504" id="1504">1504</a>
+<a href="#1505" id="1505">1505</a>
+<a href="#1506" id="1506">1506</a>
+<a href="#1507" id="1507">1507</a>
+<a href="#1508" id="1508">1508</a>
+<a href="#1509" id="1509">1509</a>
+<a href="#1510" id="1510">1510</a>
+<a href="#1511" id="1511">1511</a>
+<a href="#1512" id="1512">1512</a>
+<a href="#1513" id="1513">1513</a>
+<a href="#1514" id="1514">1514</a>
+<a href="#1515" id="1515">1515</a>
+<a href="#1516" id="1516">1516</a>
+<a href="#1517" id="1517">1517</a>
+<a href="#1518" id="1518">1518</a>
+<a href="#1519" id="1519">1519</a>
+<a href="#1520" id="1520">1520</a>
+<a href="#1521" id="1521">1521</a>
+<a href="#1522" id="1522">1522</a>
+<a href="#1523" id="1523">1523</a>
+<a href="#1524" id="1524">1524</a>
+<a href="#1525" id="1525">1525</a>
+<a href="#1526" id="1526">1526</a>
+<a href="#1527" id="1527">1527</a>
+<a href="#1528" id="1528">1528</a>
+<a href="#1529" id="1529">1529</a>
+<a href="#1530" id="1530">1530</a>
+<a href="#1531" id="1531">1531</a>
+<a href="#1532" id="1532">1532</a>
+<a href="#1533" id="1533">1533</a>
+<a href="#1534" id="1534">1534</a>
+<a href="#1535" id="1535">1535</a>
+<a href="#1536" id="1536">1536</a>
+<a href="#1537" id="1537">1537</a>
+<a href="#1538" id="1538">1538</a>
+<a href="#1539" id="1539">1539</a>
+<a href="#1540" id="1540">1540</a>
+<a href="#1541" id="1541">1541</a>
+<a href="#1542" id="1542">1542</a>
+<a href="#1543" id="1543">1543</a>
+<a href="#1544" id="1544">1544</a>
+<a href="#1545" id="1545">1545</a>
+<a href="#1546" id="1546">1546</a>
+<a href="#1547" id="1547">1547</a>
+<a href="#1548" id="1548">1548</a>
+<a href="#1549" id="1549">1549</a>
+<a href="#1550" id="1550">1550</a>
+<a href="#1551" id="1551">1551</a>
+<a href="#1552" id="1552">1552</a>
+<a href="#1553" id="1553">1553</a>
+<a href="#1554" id="1554">1554</a>
+<a href="#1555" id="1555">1555</a>
+<a href="#1556" id="1556">1556</a>
+<a href="#1557" id="1557">1557</a>
+<a href="#1558" id="1558">1558</a>
+<a href="#1559" id="1559">1559</a>
+<a href="#1560" id="1560">1560</a>
+<a href="#1561" id="1561">1561</a>
+<a href="#1562" id="1562">1562</a>
+<a href="#1563" id="1563">1563</a>
+<a href="#1564" id="1564">1564</a>
+<a href="#1565" id="1565">1565</a>
+<a href="#1566" id="1566">1566</a>
+<a href="#1567" id="1567">1567</a>
+<a href="#1568" id="1568">1568</a>
+<a href="#1569" id="1569">1569</a>
+<a href="#1570" id="1570">1570</a>
+<a href="#1571" id="1571">1571</a>
+<a href="#1572" id="1572">1572</a>
+<a href="#1573" id="1573">1573</a>
+<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>
+<a href="#1591" id="1591">1591</a>
+<a href="#1592" id="1592">1592</a>
+<a href="#1593" id="1593">1593</a>
+<a href="#1594" id="1594">1594</a>
+<a href="#1595" id="1595">1595</a>
+<a href="#1596" id="1596">1596</a>
+<a href="#1597" id="1597">1597</a>
+<a href="#1598" id="1598">1598</a>
+<a href="#1599" id="1599">1599</a>
+<a href="#1600" id="1600">1600</a>
+<a href="#1601" id="1601">1601</a>
+<a href="#1602" id="1602">1602</a>
+<a href="#1603" id="1603">1603</a>
+<a href="#1604" id="1604">1604</a>
+<a href="#1605" id="1605">1605</a>
+<a href="#1606" id="1606">1606</a>
+<a href="#1607" id="1607">1607</a>
+<a href="#1608" id="1608">1608</a>
+<a href="#1609" id="1609">1609</a>
+<a href="#1610" id="1610">1610</a>
+<a href="#1611" id="1611">1611</a>
+<a href="#1612" id="1612">1612</a>
+<a href="#1613" id="1613">1613</a>
+<a href="#1614" id="1614">1614</a>
+<a href="#1615" id="1615">1615</a>
+<a href="#1616" id="1616">1616</a>
+<a href="#1617" id="1617">1617</a>
+<a href="#1618" id="1618">1618</a>
+<a href="#1619" id="1619">1619</a>
+<a href="#1620" id="1620">1620</a>
+<a href="#1621" id="1621">1621</a>
+<a href="#1622" id="1622">1622</a>
+<a href="#1623" id="1623">1623</a>
+<a href="#1624" id="1624">1624</a>
+<a href="#1625" id="1625">1625</a>
+<a href="#1626" id="1626">1626</a>
+<a href="#1627" id="1627">1627</a>
+<a href="#1628" id="1628">1628</a>
+<a href="#1629" id="1629">1629</a>
+<a href="#1630" id="1630">1630</a>
+<a href="#1631" id="1631">1631</a>
+<a href="#1632" id="1632">1632</a>
+<a href="#1633" id="1633">1633</a>
+<a href="#1634" id="1634">1634</a>
+<a href="#1635" id="1635">1635</a>
+<a href="#1636" id="1636">1636</a>
+<a href="#1637" id="1637">1637</a>
+<a href="#1638" id="1638">1638</a>
+<a href="#1639" id="1639">1639</a>
+<a href="#1640" id="1640">1640</a>
+<a href="#1641" id="1641">1641</a>
+<a href="#1642" id="1642">1642</a>
+<a href="#1643" id="1643">1643</a>
+<a href="#1644" id="1644">1644</a>
+<a href="#1645" id="1645">1645</a>
+<a href="#1646" id="1646">1646</a>
+<a href="#1647" id="1647">1647</a>
+<a href="#1648" id="1648">1648</a>
+<a href="#1649" id="1649">1649</a>
+<a href="#1650" id="1650">1650</a>
+<a href="#1651" id="1651">1651</a>
+<a href="#1652" id="1652">1652</a>
+<a href="#1653" id="1653">1653</a>
+<a href="#1654" id="1654">1654</a>
+<a href="#1655" id="1655">1655</a>
+<a href="#1656" id="1656">1656</a>
+<a href="#1657" id="1657">1657</a>
+<a href="#1658" id="1658">1658</a>
+<a href="#1659" id="1659">1659</a>
+<a href="#1660" id="1660">1660</a>
+<a href="#1661" id="1661">1661</a>
+<a href="#1662" id="1662">1662</a>
+<a href="#1663" id="1663">1663</a>
+<a href="#1664" id="1664">1664</a>
+<a href="#1665" id="1665">1665</a>
+<a href="#1666" id="1666">1666</a>
+<a href="#1667" id="1667">1667</a>
+<a href="#1668" id="1668">1668</a>
+<a href="#1669" id="1669">1669</a>
+<a href="#1670" id="1670">1670</a>
+<a href="#1671" id="1671">1671</a>
+<a href="#1672" id="1672">1672</a>
+<a href="#1673" id="1673">1673</a>
+<a href="#1674" id="1674">1674</a>
+<a href="#1675" id="1675">1675</a>
+<a href="#1676" id="1676">1676</a>
+<a href="#1677" id="1677">1677</a>
+<a href="#1678" id="1678">1678</a>
+<a href="#1679" id="1679">1679</a>
+<a href="#1680" id="1680">1680</a>
+<a href="#1681" id="1681">1681</a>
+<a href="#1682" id="1682">1682</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
@@ -1482,19 +1715,24 @@
 
 <span class="kw">use </span><span 
class="kw">crate</span>::namespace_state::NamespaceState;
 
+<span class="doccomment">/// namespace `location` property
+</span><span class="kw">const </span>LOCATION: <span 
class="kw-2">&amp;</span>str = <span class="string">"location"</span>;
+
 <span class="doccomment">/// Memory catalog implementation.
 </span><span class="attr">#[derive(Debug)]
 </span><span class="kw">pub struct </span>MemoryCatalog {
     root_namespace_state: Mutex&lt;NamespaceState&gt;,
     file_io: FileIO,
+    warehouse_location: <span class="prelude-ty">Option</span>&lt;String&gt;,
 }
 
 <span class="kw">impl </span>MemoryCatalog {
     <span class="doccomment">/// Creates an memory catalog.
-    </span><span class="kw">pub fn </span>new(file_io: FileIO) -&gt; <span 
class="self">Self </span>{
+    </span><span class="kw">pub fn </span>new(file_io: FileIO, 
warehouse_location: <span class="prelude-ty">Option</span>&lt;String&gt;) -&gt; 
<span class="self">Self </span>{
         <span class="self">Self </span>{
             root_namespace_state: Mutex::new(NamespaceState::default()),
             file_io,
+            warehouse_location,
         }
     }
 }
@@ -1614,11 +1852,20 @@
         <span class="kw">let </span>(table_creation, location) = <span 
class="kw">match </span>table_creation.location.clone() {
             <span class="prelude-val">Some</span>(location) =&gt; 
(table_creation, location),
             <span class="prelude-val">None </span>=&gt; {
-                <span class="kw">let </span>location = <span 
class="macro">format!</span>(
-                    <span class="string">"{}/{}"</span>,
-                    table_ident.namespace().join(<span 
class="string">"/"</span>),
-                    table_ident.name()
-                );
+                <span class="kw">let </span>namespace_properties = 
root_namespace_state.get_properties(namespace_ident)<span 
class="question-mark">?</span>;
+                <span class="kw">let </span>location_prefix = <span 
class="kw">match </span>namespace_properties.get(LOCATION) {
+                    <span class="prelude-val">Some</span>(namespace_location) 
=&gt; <span class="prelude-val">Ok</span>(namespace_location.clone()),
+                    <span class="prelude-val">None </span>=&gt; <span 
class="kw">match </span><span 
class="self">self</span>.warehouse_location.clone() {
+                        <span 
class="prelude-val">Some</span>(warehouse_location) =&gt; <span 
class="prelude-val">Ok</span>(<span class="macro">format!</span>(<span 
class="string">"{}/{}"</span>, warehouse_location, namespace_ident.join(<span 
class="string">"/"</span>))),
+                        <span class="prelude-val">None </span>=&gt; <span 
class="prelude-val">Err</span>(Error::new(ErrorKind::Unexpected,
+                            <span class="macro">format!</span>(
+                                <span class="string">"Cannot create table 
{:?}. No default path is set, please specify a location when creating a 
table."</span>,
+                                <span class="kw-2">&amp;</span>table_ident
+                            )))
+                    },
+                }<span class="question-mark">?</span>;
+
+                <span class="kw">let </span>location = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, 
location_prefix, table_ident.name());
 
                 <span class="kw">let </span>new_table_creation = TableCreation 
{
                     location: <span 
class="prelude-val">Some</span>(location.clone()),
@@ -1722,13 +1969,20 @@
 
     <span class="kw">use </span>iceberg::io::FileIOBuilder;
     <span class="kw">use </span>iceberg::spec::{NestedField, PartitionSpec, 
PrimitiveType, Schema, SortOrder, Type};
+    <span class="kw">use </span>regex::Regex;
     <span class="kw">use </span>tempfile::TempDir;
 
     <span class="kw">use super</span>::<span class="kw-2">*</span>;
 
+    <span class="kw">fn </span>temp_path() -&gt; String {
+        <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
+        temp_dir.path().to_str().unwrap().to_string()
+    }
+
     <span class="kw">fn </span>new_memory_catalog() -&gt; <span 
class="kw">impl </span>Catalog {
         <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
-        MemoryCatalog::new(file_io)
+        <span class="kw">let </span>warehouse_location = temp_path();
+        MemoryCatalog::new(file_io, <span 
class="prelude-val">Some</span>(warehouse_location))
     }
 
     <span class="kw">async fn </span>create_namespace&lt;C: 
Catalog&gt;(catalog: <span class="kw-2">&amp;</span>C, namespace_ident: <span 
class="kw-2">&amp;</span>NamespaceIdent) {
@@ -1761,16 +2015,12 @@
     }
 
     <span class="kw">async fn </span>create_table&lt;C: Catalog&gt;(catalog: 
<span class="kw-2">&amp;</span>C, table_ident: <span 
class="kw-2">&amp;</span>TableIdent) {
-        <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
-        <span class="kw">let </span>location = 
tmp_dir.path().to_str().unwrap().to_string();
-
         <span class="kw">let _ </span>= catalog
             .create_table(
                 <span class="kw-2">&amp;</span>table_ident.namespace,
                 TableCreation::builder()
                     .name(table_ident.name().into())
                     .schema(simple_table_schema())
-                    .location(location)
                     .build(),
             )
             .<span class="kw">await
@@ -1823,6 +2073,14 @@
         <span class="macro">assert!</span>(!table.readonly());
     }
 
+    <span class="kw">const </span>UUID_REGEX_STR: <span 
class="kw-2">&amp;</span>str = <span 
class="string">"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"</span>;
+
+    <span class="kw">fn </span>assert_table_metadata_location_matches(table: 
<span class="kw-2">&amp;</span>Table, regex_str: <span 
class="kw-2">&amp;</span>str) {
+        <span class="kw">let </span>actual = 
table.metadata_location().unwrap().to_string();
+        <span class="kw">let </span>regex = Regex::new(regex_str).unwrap();
+        <span class="macro">assert!</span>(regex.is_match(<span 
class="kw-2">&amp;</span>actual))
+    }
+
     <span class="attr">#[tokio::test]
     </span><span class="kw">async fn 
</span>test_list_namespaces_returns_empty_vector() {
         <span class="kw">let </span>catalog = new_memory_catalog();
@@ -2439,12 +2697,220 @@
             .metadata_location()
             .unwrap()
             .to_string()
-            .starts_with(<span class="kw-2">&amp;</span>location));
+            .starts_with(<span class="kw-2">&amp;</span>location))
+    }
 
-        assert_table_eq(
-            <span class="kw-2">&amp;</span>catalog.load_table(<span 
class="kw-2">&amp;</span>expected_table_ident).<span 
class="kw">await</span>.unwrap(),
-            <span class="kw-2">&amp;</span>expected_table_ident,
-            <span class="kw-2">&amp;</span>simple_table_schema(),
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_create_table_falls_back_to_namespace_location_if_table_location_is_missing()
 {
+        <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>warehouse_location = temp_path();
+        <span class="kw">let </span>catalog = MemoryCatalog::new(file_io, 
<span class="prelude-val">Some</span>(warehouse_location.clone()));
+
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        <span class="kw">let </span><span class="kw-2">mut 
</span>namespace_properties = HashMap::new();
+        <span class="kw">let </span>namespace_location = temp_path();
+        namespace_properties.insert(LOCATION.to_string(), 
namespace_location.to_string());
+        catalog
+            .create_namespace(<span class="kw-2">&amp;</span>namespace_ident, 
namespace_properties)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>table_name = <span 
class="string">"tbl1"</span>;
+        <span class="kw">let </span>expected_table_ident = 
TableIdent::new(namespace_ident.clone(), table_name.into());
+        <span class="kw">let </span>expected_table_metadata_location_regex = 
<span class="macro">format!</span>(
+            <span 
class="string">"^{}/tbl1/metadata/0-{}.metadata.json$"</span>,
+            namespace_location, UUID_REGEX_STR,
+        );
+
+        <span class="kw">let </span>table = catalog
+            .create_table(
+                <span class="kw-2">&amp;</span>namespace_ident,
+                TableCreation::builder()
+                    .name(table_name.into())
+                    .schema(simple_table_schema())
+                    <span class="comment">// no location specified for table
+                    </span>.build(),
+            )
+            .<span class="kw">await
+            </span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+
+        <span class="kw">let </span>table = catalog.load_table(<span 
class="kw-2">&amp;</span>expected_table_ident).<span 
class="kw">await</span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_create_table_in_nested_namespace_falls_back_to_nested_namespace_location_if_table_location_is_missing(
+    ) {
+        <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>warehouse_location = temp_path();
+        <span class="kw">let </span>catalog = MemoryCatalog::new(file_io, 
<span class="prelude-val">Some</span>(warehouse_location.clone()));
+
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        <span class="kw">let </span><span class="kw-2">mut 
</span>namespace_properties = HashMap::new();
+        <span class="kw">let </span>namespace_location = temp_path();
+        namespace_properties.insert(LOCATION.to_string(), 
namespace_location.to_string());
+        catalog
+            .create_namespace(<span class="kw-2">&amp;</span>namespace_ident, 
namespace_properties)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>nested_namespace_ident = 
NamespaceIdent::from_strs(<span class="macro">vec!</span>[<span 
class="string">"a"</span>, <span class="string">"b"</span>]).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut 
</span>nested_namespace_properties = HashMap::new();
+        <span class="kw">let </span>nested_namespace_location = temp_path();
+        nested_namespace_properties
+            .insert(LOCATION.to_string(), 
nested_namespace_location.to_string());
+        catalog
+            .create_namespace(<span 
class="kw-2">&amp;</span>nested_namespace_ident, nested_namespace_properties)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>table_name = <span 
class="string">"tbl1"</span>;
+        <span class="kw">let </span>expected_table_ident =
+            TableIdent::new(nested_namespace_ident.clone(), table_name.into());
+        <span class="kw">let </span>expected_table_metadata_location_regex = 
<span class="macro">format!</span>(
+            <span 
class="string">"^{}/tbl1/metadata/0-{}.metadata.json$"</span>,
+            nested_namespace_location, UUID_REGEX_STR,
+        );
+
+        <span class="kw">let </span>table = catalog
+            .create_table(
+                <span class="kw-2">&amp;</span>nested_namespace_ident,
+                TableCreation::builder()
+                    .name(table_name.into())
+                    .schema(simple_table_schema())
+                    <span class="comment">// no location specified for table
+                    </span>.build(),
+            )
+            .<span class="kw">await
+            </span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+
+        <span class="kw">let </span>table = catalog.load_table(<span 
class="kw-2">&amp;</span>expected_table_ident).<span 
class="kw">await</span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_create_table_falls_back_to_warehouse_location_if_both_table_location_and_namespace_location_are_missing(
+    ) {
+        <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>warehouse_location = temp_path();
+        <span class="kw">let </span>catalog = MemoryCatalog::new(file_io, 
<span class="prelude-val">Some</span>(warehouse_location.clone()));
+
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        <span class="comment">// note: no location specified in 
namespace_properties
+        </span><span class="kw">let </span>namespace_properties = 
HashMap::new();
+        catalog
+            .create_namespace(<span class="kw-2">&amp;</span>namespace_ident, 
namespace_properties)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>table_name = <span 
class="string">"tbl1"</span>;
+        <span class="kw">let </span>expected_table_ident = 
TableIdent::new(namespace_ident.clone(), table_name.into());
+        <span class="kw">let </span>expected_table_metadata_location_regex = 
<span class="macro">format!</span>(
+            <span 
class="string">"^{}/a/tbl1/metadata/0-{}.metadata.json$"</span>,
+            warehouse_location, UUID_REGEX_STR
+        );
+
+        <span class="kw">let </span>table = catalog
+            .create_table(
+                <span class="kw-2">&amp;</span>namespace_ident,
+                TableCreation::builder()
+                    .name(table_name.into())
+                    .schema(simple_table_schema())
+                    <span class="comment">// no location specified for table
+                    </span>.build(),
+            )
+            .<span class="kw">await
+            </span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+
+        <span class="kw">let </span>table = catalog.load_table(<span 
class="kw-2">&amp;</span>expected_table_ident).<span 
class="kw">await</span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_create_table_in_nested_namespace_falls_back_to_warehouse_location_if_both_table_location_and_namespace_location_are_missing(
+    ) {
+        <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>warehouse_location = temp_path();
+        <span class="kw">let </span>catalog = MemoryCatalog::new(file_io, 
<span class="prelude-val">Some</span>(warehouse_location.clone()));
+
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        catalog
+            <span class="comment">// note: no location specified in 
namespace_properties
+            </span>.create_namespace(<span 
class="kw-2">&amp;</span>namespace_ident, HashMap::new())
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>nested_namespace_ident = 
NamespaceIdent::from_strs(<span class="macro">vec!</span>[<span 
class="string">"a"</span>, <span class="string">"b"</span>]).unwrap();
+        catalog
+            <span class="comment">// note: no location specified in 
namespace_properties
+            </span>.create_namespace(<span 
class="kw-2">&amp;</span>nested_namespace_ident, HashMap::new())
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="kw">let </span>table_name = <span 
class="string">"tbl1"</span>;
+        <span class="kw">let </span>expected_table_ident =
+            TableIdent::new(nested_namespace_ident.clone(), table_name.into());
+        <span class="kw">let </span>expected_table_metadata_location_regex = 
<span class="macro">format!</span>(
+            <span 
class="string">"^{}/a/b/tbl1/metadata/0-{}.metadata.json$"</span>,
+            warehouse_location, UUID_REGEX_STR
+        );
+
+        <span class="kw">let </span>table = catalog
+            .create_table(
+                <span class="kw-2">&amp;</span>nested_namespace_ident,
+                TableCreation::builder()
+                    .name(table_name.into())
+                    .schema(simple_table_schema())
+                    <span class="comment">// no location specified for table
+                    </span>.build(),
+            )
+            .<span class="kw">await
+            </span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+
+        <span class="kw">let </span>table = catalog.load_table(<span 
class="kw-2">&amp;</span>expected_table_ident).<span 
class="kw">await</span>.unwrap();
+        assert_table_eq(<span class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_ident, <span 
class="kw-2">&amp;</span>simple_table_schema());
+        assert_table_metadata_location_matches(<span 
class="kw-2">&amp;</span>table, <span 
class="kw-2">&amp;</span>expected_table_metadata_location_regex);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_create_table_throws_error_if_table_location_and_namespace_location_and_warehouse_location_are_missing(
+    ) {
+        <span class="kw">let </span>file_io = 
FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>catalog = MemoryCatalog::new(file_io, 
<span class="prelude-val">None</span>);
+
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        create_namespace(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>namespace_ident).<span class="kw">await</span>;
+
+        <span class="kw">let </span>table_name = <span 
class="string">"tbl1"</span>;
+        <span class="kw">let </span>expected_table_ident = 
TableIdent::new(namespace_ident.clone(), table_name.into());
+
+        <span class="macro">assert_eq!</span>(
+            catalog
+                .create_table(
+                    <span class="kw-2">&amp;</span>namespace_ident,
+                    TableCreation::builder()
+                        .name(table_name.into())
+                        .schema(simple_table_schema())
+                        .build(),
+                )
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(
+                <span class="string">"Unexpected =&gt; Cannot create table 
{:?}. No default path is set, please specify a location when creating a 
table."</span>,
+                <span class="kw-2">&amp;</span>expected_table_ident
+            )
         )
     }
 
diff --git a/api/trait.impl/core/convert/trait.From.js 
b/api/trait.impl/core/convert/trait.From.js
index dd2aff7..75be8cc 100644
--- a/api/trait.impl/core/convert/trait.From.js
+++ b/api/trait.impl/core/convert/trait.From.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" 
href=\"https://doc.rust-lang.org/nightly/core/convert/trait.From.html\"; 
title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" 
href=\"https://docs.rs/url/2.5.2/url/parser/enum.ParseError.html\"; title=\"enum 
url::parser::ParseError\">ParseError</a>&gt; for <a class=\"struct\" 
href=\"iceberg/struct.Error.html\" title=\"struct 
iceberg::Error\">Error</a>"],["impl <a class=\"trait\" 
href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Fro [...]
+"iceberg":[["impl <a class=\"trait\" 
href=\"https://doc.rust-lang.org/nightly/core/convert/trait.From.html\"; 
title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" 
href=\"https://docs.rs/url/2.5.2/url/parser/enum.ParseError.html\"; title=\"enum 
url::parser::ParseError\">ParseError</a>&gt; for <a class=\"struct\" 
href=\"iceberg/struct.Error.html\" title=\"struct 
iceberg::Error\">Error</a>"],["impl <a class=\"trait\" 
href=\"https://doc.rust-lang.org/nightly/core/convert/trait.Fro [...]
 };if (window.register_implementors) 
{window.register_implementors(implementors);} else {window.pending_implementors 
= implementors;}})()
\ No newline at end of file

Reply via email to