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 930ee854 deploy: ae6d0958843e6d18be301547de31de1610a72304
930ee854 is described below

commit 930ee8541b50a545e5f6b7408e8aaeb1117a0561
Author: liurenjie1024 <[email protected]>
AuthorDate: Sat Oct 12 09:19:16 2024 +0000

    deploy: ae6d0958843e6d18be301547de31de1610a72304
---
 api/iceberg_catalog_sql/enum.SqlBindStyle.html     |    6 +-
 api/iceberg_catalog_sql/struct.SqlCatalog.html     |   50 +-
 .../struct.SqlCatalogConfig.html                   |    6 +-
 api/src/iceberg_catalog_sql/catalog.rs.html        | 1614 +++++++++++++++++++-
 api/src/iceberg_catalog_sql/error.rs.html          |   30 +-
 5 files changed, 1645 insertions(+), 61 deletions(-)

diff --git a/api/iceberg_catalog_sql/enum.SqlBindStyle.html 
b/api/iceberg_catalog_sql/enum.SqlBindStyle.html
index 38bebbb9..afa92c4f 100644
--- a/api/iceberg_catalog_sql/enum.SqlBindStyle.html
+++ b/api/iceberg_catalog_sql/enum.SqlBindStyle.html
@@ -1,12 +1,12 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Set the 
SQL parameter bind style to either $1..$N (Postgres style) or ? 
(SQLite/MySQL/MariaDB)"><title>SqlBindStyle in iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.w
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Set the 
SQL parameter bind style to either $1..$N (Postgres style) or ? 
(SQLite/MySQL/MariaDB)"><title>SqlBindStyle in iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.w
 [...]
     DollarNumeric,
     QMark,
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Set the SQL parameter bind style to either $1..$N (Postgres 
style) or ? (SQLite/MySQL/MariaDB)</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.DollarNumeric" class="variant"><a href="#variant.DollarNumeric" 
class="anchor">§</a><h3 class="code-header">DollarNumeric</h3></section><div 
class="docblock"><p>DollarNumeric uses parameters of the form `$1..$N``, which 
is the Postgres style</p>
 </div><section id="variant.QMark" class="variant"><a href="#variant.QMark" 
class="anchor">§</a><h3 class="code-header">QMark</h3></section><div 
class="docblock"><p>QMark uses parameters of the form <code>?</code> which is 
the style for other dialects (SQLite/MySQL/MariaDB)</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-SqlBindStyle" class="impl"><a 
class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#79">source</a><a 
href="#impl-Debug-for-SqlBindStyle" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href [...]
+</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-SqlBindStyle" class="impl"><a 
class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#87">source</a><a 
href="#impl-Debug-for-SqlBindStyle" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href [...]
 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-StructuralPartialEq-for-SqlBindStyle" class="impl"><a class="src 
rightside" href="../src/iceberg_catalog_sql/catalog.rs.html#79">source</a><a 
href="#impl-StructuralPartialEq-for-SqlBindStyle" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html";
 title="trait core::marker::Structu [...]
+sufficient, and should not be overridden without very good 
reason.</div></details></div></details><section 
id="impl-StructuralPartialEq-for-SqlBindStyle" class="impl"><a class="src 
rightside" href="../src/iceberg_catalog_sql/catalog.rs.html#87">source</a><a 
href="#impl-StructuralPartialEq-for-SqlBindStyle" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html";
 title="trait core::marker::Structu [...]
     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_catalog_sql/struct.SqlCatalog.html 
b/api/iceberg_catalog_sql/struct.SqlCatalog.html
index c8abc826..3aeac648 100644
--- a/api/iceberg_catalog_sql/struct.SqlCatalog.html
+++ b/api/iceberg_catalog_sql/struct.SqlCatalog.html
@@ -1,88 +1,88 @@
-<!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="Sql 
catalog implementation."><title>SqlCatalog in iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e
 [...]
-</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-SqlCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#88-212">source</a><a 
href="#impl-SqlCatalog" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.SqlCatalog.html" title="struct [...]
-</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-SqlCatalog" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#215-510">source</a><a 
href="#impl-Catalog-for-SqlCatalog" class="anchor">§</a><h3 class="code-hea 
[...]
+<!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="Sql 
catalog implementation."><title>SqlCatalog in iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e
 [...]
+</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-SqlCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#96-220">source</a><a 
href="#impl-SqlCatalog" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.SqlCatalog.html" title="struct [...]
+</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-SqlCatalog" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#223-776">source</a><a 
href="#impl-Catalog-for-SqlCatalog" class="anchor">§</a><h3 class="code-hea 
[...]
     &amp;'life0 self,
     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'>List namespaces inside the catalog.</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_sql/catalog.rs.html#270-327">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>List namespaces inside the catalog.</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_sql/catalog.rs.html#278-335">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: &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;,
 ) -&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'>Create a new namespace inside the 
catalog.</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_sql/catalog.rs.html#329-364">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Create a new namespace inside the 
catalog.</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_sql/catalog.rs.html#337-372">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: &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'>Get a namespace information from the 
catalog.</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_sql/catalog.rs.html#366-401">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_t [...]
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Get a namespace information from the 
catalog.</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_sql/catalog.rs.html#374-409">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_t [...]
     &amp;'life0 self,
     namespace: &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'>Check if namespace exists in catalog.</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_sql/catalog.rs.html#403-473">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Check if namespace exists in catalog.</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_sql/catalog.rs.html#411-481">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: &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;,
 ) -&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'>Update a namespace inside the catalog. <a>Read 
more</a></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_sql/catalog.rs.html#475-477">source</a><a 
href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_namespace</a>&lt;'life0, 'life1, 'asy [...]
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Update a namespace inside the catalog. <a>Read 
more</a></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_sql/catalog.rs.html#483-514">source</a><a 
href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">drop_namespace</a>&lt;'life0, 'life1, 'asy [...]
     &amp;'life0 self,
-    _namespace: &amp;'life1 NamespaceIdent,
+    namespace: &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'>Drop a namespace from the catalog.</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_sql/catalog.rs.html#479-481">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Drop a namespace from the catalog.</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_sql/catalog.rs.html#516-553">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: &amp;'life1 NamespaceIdent,
+    namespace: &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'>List tables from namespace.</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_sql/catalog.rs.html#483-485">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>List tables from namespace.</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_sql/catalog.rs.html#555-580">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,
-    _identifier: &amp;'life1 TableIdent,
+    identifier: &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'>Check if a table exists in the 
catalog.</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_sql/catalog.rs.html#487-489">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Check if a table exists in the 
catalog.</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_sql/catalog.rs.html#582-608">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,
-    _identifier: &amp;'life1 TableIdent,
+    identifier: &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'>Drop a table from the catalog.</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_sql/catalog.rs.html#491-493">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Drop a table from the catalog.</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_sql/catalog.rs.html#610-655">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,
-    _identifier: &amp;'life1 TableIdent,
+    identifier: &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'>Load table from the catalog.</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_sql/catalog.rs.html#495-501">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Load table from the catalog.</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_sql/catalog.rs.html#657-725">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: &amp;'life1 NamespaceIdent,
-    _creation: TableCreation,
+    namespace: &amp;'life1 NamespaceIdent,
+    creation: TableCreation,
 ) -&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'>Create a new table inside the 
namespace.</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_sql/catalog.rs.html#503-505">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;(
+    'life1: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Create a new table inside the 
namespace.</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_sql/catalog.rs.html#727-768">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: &amp;'life1 TableIdent,
-    _dest: &amp;'life2 TableIdent,
+    src: &amp;'life1 TableIdent,
+    dest: &amp;'life2 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,
-    'life2: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Rename a table in the catalog.</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_sql/catalog.rs.html#507-509">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;(
+    'life2: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Rename a table in the catalog.</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_sql/catalog.rs.html#770-775">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'>Update a table to the 
catalog.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Debug-for-SqlCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#69">source</a><a 
href="#impl-Debug-for-SqlCatalog" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/fmt/t [...]
+    'life0: 'async_trait,</div></h4></section></summary><div 
class='docblock'>Update a table to the 
catalog.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Debug-for-SqlCatalog" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#77">source</a><a 
href="#impl-Debug-for-SqlCatalog" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/fmt/t [...]
     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_catalog_sql/struct.SqlCatalogConfig.html 
b/api/iceberg_catalog_sql/struct.SqlCatalogConfig.html
index 1898f41d..008a2c12 100644
--- a/api/iceberg_catalog_sql/struct.SqlCatalogConfig.html
+++ b/api/iceberg_catalog_sql/struct.SqlCatalogConfig.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A struct 
representing the SQL catalog configuration."><title>SqlCatalogConfig in 
iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="A struct 
representing the SQL catalog configuration."><title>SqlCatalogConfig in 
iceberg_catalog_sql - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd
 [...]
 <p>This struct contains various parameters that are used to configure a SQL 
catalog,
 such as the database URI, warehouse location, and file I/O settings.
 You are required to provide a <code>SqlBindStyle</code>, which determines how 
SQL statements will be bound to values in the catalog.
@@ -7,10 +7,10 @@ The options available for this parameter include:</p>
 <li><code>SqlBindStyle::DollarNumeric</code>: Binds SQL statements using 
<code>$1</code>, <code>$2</code>, etc., as placeholders. This is for PostgreSQL 
databases.</li>
 <li><code>SqlBindStyle::QuestionMark</code>: Binds SQL statements using 
<code>?</code> as a placeholder. This is for MySQL and SQLite databases.</li>
 </ul>
-</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-SqlCatalogConfig" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#58">source</a><a 
href="#impl-SqlCatalogConfig" class="anchor">§</a><h3 class="code-header">impl 
<a class="struct" href="struct.SqlCatalogConfig.html" [...]
+</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-SqlCatalogConfig" 
class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#66">source</a><a 
href="#impl-SqlCatalogConfig" class="anchor">§</a><h3 class="code-header">impl 
<a class="struct" href="struct.SqlCatalogConfig.html" [...]
 On the builder, call <code>.uri(...)</code>, <code>.name(...)</code>, 
<code>.warehouse_location(...)</code>, <code>.file_io(...)</code>, 
<code>.sql_bind_style(...)</code>, <code>.props(...)</code>(optional) to set 
the values of the fields.
 Finally, call <code>.build()</code> to create the instance of 
<code>SqlCatalogConfig</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-Debug-for-SqlCatalogConfig" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#58">source</a><a 
href="#impl-Debug-for-SqlCatalogConfig" class="anchor">§</a><h3 class="code- 
[...]
+</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-SqlCatalogConfig" class="impl"><a class="src rightside" 
href="../src/iceberg_catalog_sql/catalog.rs.html#66">source</a><a 
href="#impl-Debug-for-SqlCatalogConfig" class="anchor">§</a><h3 class="code- 
[...]
     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/src/iceberg_catalog_sql/catalog.rs.html 
b/api/src/iceberg_catalog_sql/catalog.rs.html
index ac609b51..5912f7e6 100644
--- a/api/src/iceberg_catalog_sql/catalog.rs.html
+++ b/api/src/iceberg_catalog_sql/catalog.rs.html
@@ -935,6 +935,784 @@
 <a href="#935" id="935">935</a>
 <a href="#936" id="936">936</a>
 <a href="#937" id="937">937</a>
+<a href="#938" id="938">938</a>
+<a href="#939" id="939">939</a>
+<a href="#940" id="940">940</a>
+<a href="#941" id="941">941</a>
+<a href="#942" id="942">942</a>
+<a href="#943" id="943">943</a>
+<a href="#944" id="944">944</a>
+<a href="#945" id="945">945</a>
+<a href="#946" id="946">946</a>
+<a href="#947" id="947">947</a>
+<a href="#948" id="948">948</a>
+<a href="#949" id="949">949</a>
+<a href="#950" id="950">950</a>
+<a href="#951" id="951">951</a>
+<a href="#952" id="952">952</a>
+<a href="#953" id="953">953</a>
+<a href="#954" id="954">954</a>
+<a href="#955" id="955">955</a>
+<a href="#956" id="956">956</a>
+<a href="#957" id="957">957</a>
+<a href="#958" id="958">958</a>
+<a href="#959" id="959">959</a>
+<a href="#960" id="960">960</a>
+<a href="#961" id="961">961</a>
+<a href="#962" id="962">962</a>
+<a href="#963" id="963">963</a>
+<a href="#964" id="964">964</a>
+<a href="#965" id="965">965</a>
+<a href="#966" id="966">966</a>
+<a href="#967" id="967">967</a>
+<a href="#968" id="968">968</a>
+<a href="#969" id="969">969</a>
+<a href="#970" id="970">970</a>
+<a href="#971" id="971">971</a>
+<a href="#972" id="972">972</a>
+<a href="#973" id="973">973</a>
+<a href="#974" id="974">974</a>
+<a href="#975" id="975">975</a>
+<a href="#976" id="976">976</a>
+<a href="#977" id="977">977</a>
+<a href="#978" id="978">978</a>
+<a href="#979" id="979">979</a>
+<a href="#980" id="980">980</a>
+<a href="#981" id="981">981</a>
+<a href="#982" id="982">982</a>
+<a href="#983" id="983">983</a>
+<a href="#984" id="984">984</a>
+<a href="#985" id="985">985</a>
+<a href="#986" id="986">986</a>
+<a href="#987" id="987">987</a>
+<a href="#988" id="988">988</a>
+<a href="#989" id="989">989</a>
+<a href="#990" id="990">990</a>
+<a href="#991" id="991">991</a>
+<a href="#992" id="992">992</a>
+<a href="#993" id="993">993</a>
+<a href="#994" id="994">994</a>
+<a href="#995" id="995">995</a>
+<a href="#996" id="996">996</a>
+<a href="#997" id="997">997</a>
+<a href="#998" id="998">998</a>
+<a href="#999" id="999">999</a>
+<a href="#1000" id="1000">1000</a>
+<a href="#1001" id="1001">1001</a>
+<a href="#1002" id="1002">1002</a>
+<a href="#1003" id="1003">1003</a>
+<a href="#1004" id="1004">1004</a>
+<a href="#1005" id="1005">1005</a>
+<a href="#1006" id="1006">1006</a>
+<a href="#1007" id="1007">1007</a>
+<a href="#1008" id="1008">1008</a>
+<a href="#1009" id="1009">1009</a>
+<a href="#1010" id="1010">1010</a>
+<a href="#1011" id="1011">1011</a>
+<a href="#1012" id="1012">1012</a>
+<a href="#1013" id="1013">1013</a>
+<a href="#1014" id="1014">1014</a>
+<a href="#1015" id="1015">1015</a>
+<a href="#1016" id="1016">1016</a>
+<a href="#1017" id="1017">1017</a>
+<a href="#1018" id="1018">1018</a>
+<a href="#1019" id="1019">1019</a>
+<a href="#1020" id="1020">1020</a>
+<a href="#1021" id="1021">1021</a>
+<a href="#1022" id="1022">1022</a>
+<a href="#1023" id="1023">1023</a>
+<a href="#1024" id="1024">1024</a>
+<a href="#1025" id="1025">1025</a>
+<a href="#1026" id="1026">1026</a>
+<a href="#1027" id="1027">1027</a>
+<a href="#1028" id="1028">1028</a>
+<a href="#1029" id="1029">1029</a>
+<a href="#1030" id="1030">1030</a>
+<a href="#1031" id="1031">1031</a>
+<a href="#1032" id="1032">1032</a>
+<a href="#1033" id="1033">1033</a>
+<a href="#1034" id="1034">1034</a>
+<a href="#1035" id="1035">1035</a>
+<a href="#1036" id="1036">1036</a>
+<a href="#1037" id="1037">1037</a>
+<a href="#1038" id="1038">1038</a>
+<a href="#1039" id="1039">1039</a>
+<a href="#1040" id="1040">1040</a>
+<a href="#1041" id="1041">1041</a>
+<a href="#1042" id="1042">1042</a>
+<a href="#1043" id="1043">1043</a>
+<a href="#1044" id="1044">1044</a>
+<a href="#1045" id="1045">1045</a>
+<a href="#1046" id="1046">1046</a>
+<a href="#1047" id="1047">1047</a>
+<a href="#1048" id="1048">1048</a>
+<a href="#1049" id="1049">1049</a>
+<a href="#1050" id="1050">1050</a>
+<a href="#1051" id="1051">1051</a>
+<a href="#1052" id="1052">1052</a>
+<a href="#1053" id="1053">1053</a>
+<a href="#1054" id="1054">1054</a>
+<a href="#1055" id="1055">1055</a>
+<a href="#1056" id="1056">1056</a>
+<a href="#1057" id="1057">1057</a>
+<a href="#1058" id="1058">1058</a>
+<a href="#1059" id="1059">1059</a>
+<a href="#1060" id="1060">1060</a>
+<a href="#1061" id="1061">1061</a>
+<a href="#1062" id="1062">1062</a>
+<a href="#1063" id="1063">1063</a>
+<a href="#1064" id="1064">1064</a>
+<a href="#1065" id="1065">1065</a>
+<a href="#1066" id="1066">1066</a>
+<a href="#1067" id="1067">1067</a>
+<a href="#1068" id="1068">1068</a>
+<a href="#1069" id="1069">1069</a>
+<a href="#1070" id="1070">1070</a>
+<a href="#1071" id="1071">1071</a>
+<a href="#1072" id="1072">1072</a>
+<a href="#1073" id="1073">1073</a>
+<a href="#1074" id="1074">1074</a>
+<a href="#1075" id="1075">1075</a>
+<a href="#1076" id="1076">1076</a>
+<a href="#1077" id="1077">1077</a>
+<a href="#1078" id="1078">1078</a>
+<a href="#1079" id="1079">1079</a>
+<a href="#1080" id="1080">1080</a>
+<a href="#1081" id="1081">1081</a>
+<a href="#1082" id="1082">1082</a>
+<a href="#1083" id="1083">1083</a>
+<a href="#1084" id="1084">1084</a>
+<a href="#1085" id="1085">1085</a>
+<a href="#1086" id="1086">1086</a>
+<a href="#1087" id="1087">1087</a>
+<a href="#1088" id="1088">1088</a>
+<a href="#1089" id="1089">1089</a>
+<a href="#1090" id="1090">1090</a>
+<a href="#1091" id="1091">1091</a>
+<a href="#1092" id="1092">1092</a>
+<a href="#1093" id="1093">1093</a>
+<a href="#1094" id="1094">1094</a>
+<a href="#1095" id="1095">1095</a>
+<a href="#1096" id="1096">1096</a>
+<a href="#1097" id="1097">1097</a>
+<a href="#1098" id="1098">1098</a>
+<a href="#1099" id="1099">1099</a>
+<a href="#1100" id="1100">1100</a>
+<a href="#1101" id="1101">1101</a>
+<a href="#1102" id="1102">1102</a>
+<a href="#1103" id="1103">1103</a>
+<a href="#1104" id="1104">1104</a>
+<a href="#1105" id="1105">1105</a>
+<a href="#1106" id="1106">1106</a>
+<a href="#1107" id="1107">1107</a>
+<a href="#1108" id="1108">1108</a>
+<a href="#1109" id="1109">1109</a>
+<a href="#1110" id="1110">1110</a>
+<a href="#1111" id="1111">1111</a>
+<a href="#1112" id="1112">1112</a>
+<a href="#1113" id="1113">1113</a>
+<a href="#1114" id="1114">1114</a>
+<a href="#1115" id="1115">1115</a>
+<a href="#1116" id="1116">1116</a>
+<a href="#1117" id="1117">1117</a>
+<a href="#1118" id="1118">1118</a>
+<a href="#1119" id="1119">1119</a>
+<a href="#1120" id="1120">1120</a>
+<a href="#1121" id="1121">1121</a>
+<a href="#1122" id="1122">1122</a>
+<a href="#1123" id="1123">1123</a>
+<a href="#1124" id="1124">1124</a>
+<a href="#1125" id="1125">1125</a>
+<a href="#1126" id="1126">1126</a>
+<a href="#1127" id="1127">1127</a>
+<a href="#1128" id="1128">1128</a>
+<a href="#1129" id="1129">1129</a>
+<a href="#1130" id="1130">1130</a>
+<a href="#1131" id="1131">1131</a>
+<a href="#1132" id="1132">1132</a>
+<a href="#1133" id="1133">1133</a>
+<a href="#1134" id="1134">1134</a>
+<a href="#1135" id="1135">1135</a>
+<a href="#1136" id="1136">1136</a>
+<a href="#1137" id="1137">1137</a>
+<a href="#1138" id="1138">1138</a>
+<a href="#1139" id="1139">1139</a>
+<a href="#1140" id="1140">1140</a>
+<a href="#1141" id="1141">1141</a>
+<a href="#1142" id="1142">1142</a>
+<a href="#1143" id="1143">1143</a>
+<a href="#1144" id="1144">1144</a>
+<a href="#1145" id="1145">1145</a>
+<a href="#1146" id="1146">1146</a>
+<a href="#1147" id="1147">1147</a>
+<a href="#1148" id="1148">1148</a>
+<a href="#1149" id="1149">1149</a>
+<a href="#1150" id="1150">1150</a>
+<a href="#1151" id="1151">1151</a>
+<a href="#1152" id="1152">1152</a>
+<a href="#1153" id="1153">1153</a>
+<a href="#1154" id="1154">1154</a>
+<a href="#1155" id="1155">1155</a>
+<a href="#1156" id="1156">1156</a>
+<a href="#1157" id="1157">1157</a>
+<a href="#1158" id="1158">1158</a>
+<a href="#1159" id="1159">1159</a>
+<a href="#1160" id="1160">1160</a>
+<a href="#1161" id="1161">1161</a>
+<a href="#1162" id="1162">1162</a>
+<a href="#1163" id="1163">1163</a>
+<a href="#1164" id="1164">1164</a>
+<a href="#1165" id="1165">1165</a>
+<a href="#1166" id="1166">1166</a>
+<a href="#1167" id="1167">1167</a>
+<a href="#1168" id="1168">1168</a>
+<a href="#1169" id="1169">1169</a>
+<a href="#1170" id="1170">1170</a>
+<a href="#1171" id="1171">1171</a>
+<a href="#1172" id="1172">1172</a>
+<a href="#1173" id="1173">1173</a>
+<a href="#1174" id="1174">1174</a>
+<a href="#1175" id="1175">1175</a>
+<a href="#1176" id="1176">1176</a>
+<a href="#1177" id="1177">1177</a>
+<a href="#1178" id="1178">1178</a>
+<a href="#1179" id="1179">1179</a>
+<a href="#1180" id="1180">1180</a>
+<a href="#1181" id="1181">1181</a>
+<a href="#1182" id="1182">1182</a>
+<a href="#1183" id="1183">1183</a>
+<a href="#1184" id="1184">1184</a>
+<a href="#1185" id="1185">1185</a>
+<a href="#1186" id="1186">1186</a>
+<a href="#1187" id="1187">1187</a>
+<a href="#1188" id="1188">1188</a>
+<a href="#1189" id="1189">1189</a>
+<a href="#1190" id="1190">1190</a>
+<a href="#1191" id="1191">1191</a>
+<a href="#1192" id="1192">1192</a>
+<a href="#1193" id="1193">1193</a>
+<a href="#1194" id="1194">1194</a>
+<a href="#1195" id="1195">1195</a>
+<a href="#1196" id="1196">1196</a>
+<a href="#1197" id="1197">1197</a>
+<a href="#1198" id="1198">1198</a>
+<a href="#1199" id="1199">1199</a>
+<a href="#1200" id="1200">1200</a>
+<a href="#1201" id="1201">1201</a>
+<a href="#1202" id="1202">1202</a>
+<a href="#1203" id="1203">1203</a>
+<a href="#1204" id="1204">1204</a>
+<a href="#1205" id="1205">1205</a>
+<a href="#1206" id="1206">1206</a>
+<a href="#1207" id="1207">1207</a>
+<a href="#1208" id="1208">1208</a>
+<a href="#1209" id="1209">1209</a>
+<a href="#1210" id="1210">1210</a>
+<a href="#1211" id="1211">1211</a>
+<a href="#1212" id="1212">1212</a>
+<a href="#1213" id="1213">1213</a>
+<a href="#1214" id="1214">1214</a>
+<a href="#1215" id="1215">1215</a>
+<a href="#1216" id="1216">1216</a>
+<a href="#1217" id="1217">1217</a>
+<a href="#1218" id="1218">1218</a>
+<a href="#1219" id="1219">1219</a>
+<a href="#1220" id="1220">1220</a>
+<a href="#1221" id="1221">1221</a>
+<a href="#1222" id="1222">1222</a>
+<a href="#1223" id="1223">1223</a>
+<a href="#1224" id="1224">1224</a>
+<a href="#1225" id="1225">1225</a>
+<a href="#1226" id="1226">1226</a>
+<a href="#1227" id="1227">1227</a>
+<a href="#1228" id="1228">1228</a>
+<a href="#1229" id="1229">1229</a>
+<a href="#1230" id="1230">1230</a>
+<a href="#1231" id="1231">1231</a>
+<a href="#1232" id="1232">1232</a>
+<a href="#1233" id="1233">1233</a>
+<a href="#1234" id="1234">1234</a>
+<a href="#1235" id="1235">1235</a>
+<a href="#1236" id="1236">1236</a>
+<a href="#1237" id="1237">1237</a>
+<a href="#1238" id="1238">1238</a>
+<a href="#1239" id="1239">1239</a>
+<a href="#1240" id="1240">1240</a>
+<a href="#1241" id="1241">1241</a>
+<a href="#1242" id="1242">1242</a>
+<a href="#1243" id="1243">1243</a>
+<a href="#1244" id="1244">1244</a>
+<a href="#1245" id="1245">1245</a>
+<a href="#1246" id="1246">1246</a>
+<a href="#1247" id="1247">1247</a>
+<a href="#1248" id="1248">1248</a>
+<a href="#1249" id="1249">1249</a>
+<a href="#1250" id="1250">1250</a>
+<a href="#1251" id="1251">1251</a>
+<a href="#1252" id="1252">1252</a>
+<a href="#1253" id="1253">1253</a>
+<a href="#1254" id="1254">1254</a>
+<a href="#1255" id="1255">1255</a>
+<a href="#1256" id="1256">1256</a>
+<a href="#1257" id="1257">1257</a>
+<a href="#1258" id="1258">1258</a>
+<a href="#1259" id="1259">1259</a>
+<a href="#1260" id="1260">1260</a>
+<a href="#1261" id="1261">1261</a>
+<a href="#1262" id="1262">1262</a>
+<a href="#1263" id="1263">1263</a>
+<a href="#1264" id="1264">1264</a>
+<a href="#1265" id="1265">1265</a>
+<a href="#1266" id="1266">1266</a>
+<a href="#1267" id="1267">1267</a>
+<a href="#1268" id="1268">1268</a>
+<a href="#1269" id="1269">1269</a>
+<a href="#1270" id="1270">1270</a>
+<a href="#1271" id="1271">1271</a>
+<a href="#1272" id="1272">1272</a>
+<a href="#1273" id="1273">1273</a>
+<a href="#1274" id="1274">1274</a>
+<a href="#1275" id="1275">1275</a>
+<a href="#1276" id="1276">1276</a>
+<a href="#1277" id="1277">1277</a>
+<a href="#1278" id="1278">1278</a>
+<a href="#1279" id="1279">1279</a>
+<a href="#1280" id="1280">1280</a>
+<a href="#1281" id="1281">1281</a>
+<a href="#1282" id="1282">1282</a>
+<a href="#1283" id="1283">1283</a>
+<a href="#1284" id="1284">1284</a>
+<a href="#1285" id="1285">1285</a>
+<a href="#1286" id="1286">1286</a>
+<a href="#1287" id="1287">1287</a>
+<a href="#1288" id="1288">1288</a>
+<a href="#1289" id="1289">1289</a>
+<a href="#1290" id="1290">1290</a>
+<a href="#1291" id="1291">1291</a>
+<a href="#1292" id="1292">1292</a>
+<a href="#1293" id="1293">1293</a>
+<a href="#1294" id="1294">1294</a>
+<a href="#1295" id="1295">1295</a>
+<a href="#1296" id="1296">1296</a>
+<a href="#1297" id="1297">1297</a>
+<a href="#1298" id="1298">1298</a>
+<a href="#1299" id="1299">1299</a>
+<a href="#1300" id="1300">1300</a>
+<a href="#1301" id="1301">1301</a>
+<a href="#1302" id="1302">1302</a>
+<a href="#1303" id="1303">1303</a>
+<a href="#1304" id="1304">1304</a>
+<a href="#1305" id="1305">1305</a>
+<a href="#1306" id="1306">1306</a>
+<a href="#1307" id="1307">1307</a>
+<a href="#1308" id="1308">1308</a>
+<a href="#1309" id="1309">1309</a>
+<a href="#1310" id="1310">1310</a>
+<a href="#1311" id="1311">1311</a>
+<a href="#1312" id="1312">1312</a>
+<a href="#1313" id="1313">1313</a>
+<a href="#1314" id="1314">1314</a>
+<a href="#1315" id="1315">1315</a>
+<a href="#1316" id="1316">1316</a>
+<a href="#1317" id="1317">1317</a>
+<a href="#1318" id="1318">1318</a>
+<a href="#1319" id="1319">1319</a>
+<a href="#1320" id="1320">1320</a>
+<a href="#1321" id="1321">1321</a>
+<a href="#1322" id="1322">1322</a>
+<a href="#1323" id="1323">1323</a>
+<a href="#1324" id="1324">1324</a>
+<a href="#1325" id="1325">1325</a>
+<a href="#1326" id="1326">1326</a>
+<a href="#1327" id="1327">1327</a>
+<a href="#1328" id="1328">1328</a>
+<a href="#1329" id="1329">1329</a>
+<a href="#1330" id="1330">1330</a>
+<a href="#1331" id="1331">1331</a>
+<a href="#1332" id="1332">1332</a>
+<a href="#1333" id="1333">1333</a>
+<a href="#1334" id="1334">1334</a>
+<a href="#1335" id="1335">1335</a>
+<a href="#1336" id="1336">1336</a>
+<a href="#1337" id="1337">1337</a>
+<a href="#1338" id="1338">1338</a>
+<a href="#1339" id="1339">1339</a>
+<a href="#1340" id="1340">1340</a>
+<a href="#1341" id="1341">1341</a>
+<a href="#1342" id="1342">1342</a>
+<a href="#1343" id="1343">1343</a>
+<a href="#1344" id="1344">1344</a>
+<a href="#1345" id="1345">1345</a>
+<a href="#1346" id="1346">1346</a>
+<a href="#1347" id="1347">1347</a>
+<a href="#1348" id="1348">1348</a>
+<a href="#1349" id="1349">1349</a>
+<a href="#1350" id="1350">1350</a>
+<a href="#1351" id="1351">1351</a>
+<a href="#1352" id="1352">1352</a>
+<a href="#1353" id="1353">1353</a>
+<a href="#1354" id="1354">1354</a>
+<a href="#1355" id="1355">1355</a>
+<a href="#1356" id="1356">1356</a>
+<a href="#1357" id="1357">1357</a>
+<a href="#1358" id="1358">1358</a>
+<a href="#1359" id="1359">1359</a>
+<a href="#1360" id="1360">1360</a>
+<a href="#1361" id="1361">1361</a>
+<a href="#1362" id="1362">1362</a>
+<a href="#1363" id="1363">1363</a>
+<a href="#1364" id="1364">1364</a>
+<a href="#1365" id="1365">1365</a>
+<a href="#1366" id="1366">1366</a>
+<a href="#1367" id="1367">1367</a>
+<a href="#1368" id="1368">1368</a>
+<a href="#1369" id="1369">1369</a>
+<a href="#1370" id="1370">1370</a>
+<a href="#1371" id="1371">1371</a>
+<a href="#1372" id="1372">1372</a>
+<a href="#1373" id="1373">1373</a>
+<a href="#1374" id="1374">1374</a>
+<a href="#1375" id="1375">1375</a>
+<a href="#1376" id="1376">1376</a>
+<a href="#1377" id="1377">1377</a>
+<a href="#1378" id="1378">1378</a>
+<a href="#1379" id="1379">1379</a>
+<a href="#1380" id="1380">1380</a>
+<a href="#1381" id="1381">1381</a>
+<a href="#1382" id="1382">1382</a>
+<a href="#1383" id="1383">1383</a>
+<a href="#1384" id="1384">1384</a>
+<a href="#1385" id="1385">1385</a>
+<a href="#1386" id="1386">1386</a>
+<a href="#1387" id="1387">1387</a>
+<a href="#1388" id="1388">1388</a>
+<a href="#1389" id="1389">1389</a>
+<a href="#1390" id="1390">1390</a>
+<a href="#1391" id="1391">1391</a>
+<a href="#1392" id="1392">1392</a>
+<a href="#1393" id="1393">1393</a>
+<a href="#1394" id="1394">1394</a>
+<a href="#1395" id="1395">1395</a>
+<a href="#1396" id="1396">1396</a>
+<a href="#1397" id="1397">1397</a>
+<a href="#1398" id="1398">1398</a>
+<a href="#1399" id="1399">1399</a>
+<a href="#1400" id="1400">1400</a>
+<a href="#1401" id="1401">1401</a>
+<a href="#1402" id="1402">1402</a>
+<a href="#1403" id="1403">1403</a>
+<a href="#1404" id="1404">1404</a>
+<a href="#1405" id="1405">1405</a>
+<a href="#1406" id="1406">1406</a>
+<a href="#1407" id="1407">1407</a>
+<a href="#1408" id="1408">1408</a>
+<a href="#1409" id="1409">1409</a>
+<a href="#1410" id="1410">1410</a>
+<a href="#1411" id="1411">1411</a>
+<a href="#1412" id="1412">1412</a>
+<a href="#1413" id="1413">1413</a>
+<a href="#1414" id="1414">1414</a>
+<a href="#1415" id="1415">1415</a>
+<a href="#1416" id="1416">1416</a>
+<a href="#1417" id="1417">1417</a>
+<a href="#1418" id="1418">1418</a>
+<a href="#1419" id="1419">1419</a>
+<a href="#1420" id="1420">1420</a>
+<a href="#1421" id="1421">1421</a>
+<a href="#1422" id="1422">1422</a>
+<a href="#1423" id="1423">1423</a>
+<a href="#1424" id="1424">1424</a>
+<a href="#1425" id="1425">1425</a>
+<a href="#1426" id="1426">1426</a>
+<a href="#1427" id="1427">1427</a>
+<a href="#1428" id="1428">1428</a>
+<a href="#1429" id="1429">1429</a>
+<a href="#1430" id="1430">1430</a>
+<a href="#1431" id="1431">1431</a>
+<a href="#1432" id="1432">1432</a>
+<a href="#1433" id="1433">1433</a>
+<a href="#1434" id="1434">1434</a>
+<a href="#1435" id="1435">1435</a>
+<a href="#1436" id="1436">1436</a>
+<a href="#1437" id="1437">1437</a>
+<a href="#1438" id="1438">1438</a>
+<a href="#1439" id="1439">1439</a>
+<a href="#1440" id="1440">1440</a>
+<a href="#1441" id="1441">1441</a>
+<a href="#1442" id="1442">1442</a>
+<a href="#1443" id="1443">1443</a>
+<a href="#1444" id="1444">1444</a>
+<a href="#1445" id="1445">1445</a>
+<a href="#1446" id="1446">1446</a>
+<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>
+<a href="#1683" id="1683">1683</a>
+<a href="#1684" id="1684">1684</a>
+<a href="#1685" id="1685">1685</a>
+<a href="#1686" id="1686">1686</a>
+<a href="#1687" id="1687">1687</a>
+<a href="#1688" id="1688">1688</a>
+<a href="#1689" id="1689">1689</a>
+<a href="#1690" id="1690">1690</a>
+<a href="#1691" id="1691">1691</a>
+<a href="#1692" id="1692">1692</a>
+<a href="#1693" id="1693">1693</a>
+<a href="#1694" id="1694">1694</a>
+<a href="#1695" id="1695">1695</a>
+<a href="#1696" id="1696">1696</a>
+<a href="#1697" id="1697">1697</a>
+<a href="#1698" id="1698">1698</a>
+<a href="#1699" id="1699">1699</a>
+<a href="#1700" id="1700">1700</a>
+<a href="#1701" id="1701">1701</a>
+<a href="#1702" id="1702">1702</a>
+<a href="#1703" id="1703">1703</a>
+<a href="#1704" id="1704">1704</a>
+<a href="#1705" id="1705">1705</a>
+<a href="#1706" id="1706">1706</a>
+<a href="#1707" id="1707">1707</a>
+<a href="#1708" id="1708">1708</a>
+<a href="#1709" id="1709">1709</a>
+<a href="#1710" id="1710">1710</a>
+<a href="#1711" id="1711">1711</a>
+<a href="#1712" id="1712">1712</a>
+<a href="#1713" id="1713">1713</a>
+<a href="#1714" id="1714">1714</a>
+<a href="#1715" id="1715">1715</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
@@ -957,15 +1735,20 @@
 
 <span class="kw">use </span>async_trait::async_trait;
 <span class="kw">use </span>iceberg::io::FileIO;
+<span class="kw">use </span>iceberg::spec::{TableMetadata, 
TableMetadataBuilder};
 <span class="kw">use </span>iceberg::table::Table;
 <span class="kw">use </span>iceberg::{
-    Catalog, Error, Namespace, NamespaceIdent, <span 
class="prelude-ty">Result</span>, TableCommit, TableCreation, TableIdent,
+    Catalog, Error, ErrorKind, Namespace, NamespaceIdent, <span 
class="prelude-ty">Result</span>, TableCommit, TableCreation,
+    TableIdent,
 };
 <span class="kw">use </span>sqlx::any::{install_default_drivers, 
AnyPoolOptions, AnyQueryResult, AnyRow};
 <span class="kw">use </span>sqlx::{Any, AnyPool, Row, Transaction};
 <span class="kw">use </span>typed_builder::TypedBuilder;
+<span class="kw">use </span>uuid::Uuid;
 
-<span class="kw">use </span><span 
class="kw">crate</span>::error::{from_sqlx_error, no_such_namespace_err};
+<span class="kw">use </span><span class="kw">crate</span>::error::{
+    from_sqlx_error, no_such_namespace_err, no_such_table_err, 
table_already_exists_err,
+};
 
 <span class="kw">static </span>CATALOG_TABLE_NAME: <span 
class="kw-2">&amp;</span>str = <span class="string">"iceberg_tables"</span>;
 <span class="kw">static </span>CATALOG_FIELD_CATALOG_NAME: <span 
class="kw-2">&amp;</span>str = <span class="string">"catalog_name"</span>;
@@ -974,12 +1757,15 @@
 <span class="kw">static </span>CATALOG_FIELD_METADATA_LOCATION_PROP: <span 
class="kw-2">&amp;</span>str = <span class="string">"metadata_location"</span>;
 <span class="kw">static </span>CATALOG_FIELD_PREVIOUS_METADATA_LOCATION_PROP: 
<span class="kw-2">&amp;</span>str = <span 
class="string">"previous_metadata_location"</span>;
 <span class="kw">static </span>CATALOG_FIELD_RECORD_TYPE: <span 
class="kw-2">&amp;</span>str = <span class="string">"iceberg_type"</span>;
+<span class="kw">static </span>CATALOG_FIELD_TABLE_RECORD_TYPE: <span 
class="kw-2">&amp;</span>str = <span class="string">"TABLE"</span>;
 
 <span class="kw">static </span>NAMESPACE_TABLE_NAME: <span 
class="kw-2">&amp;</span>str = <span 
class="string">"iceberg_namespace_properties"</span>;
 <span class="kw">static </span>NAMESPACE_FIELD_NAME: <span 
class="kw-2">&amp;</span>str = <span class="string">"namespace"</span>;
 <span class="kw">static </span>NAMESPACE_FIELD_PROPERTY_KEY: <span 
class="kw-2">&amp;</span>str = <span class="string">"property_key"</span>;
 <span class="kw">static </span>NAMESPACE_FIELD_PROPERTY_VALUE: <span 
class="kw-2">&amp;</span>str = <span class="string">"property_value"</span>;
 
+<span class="kw">static </span>NAMESPACE_LOCATION_PROPERTY_KEY: <span 
class="kw-2">&amp;</span>str = <span class="string">"location"</span>;
+
 <span class="kw">static </span>MAX_CONNECTIONS: u32 = <span 
class="number">10</span>; <span class="comment">// Default the SQL pool to 10 
connections if not provided
 </span><span class="kw">static </span>IDLE_TIMEOUT: u64 = <span 
class="number">10</span>; <span class="comment">// Default the maximum idle 
timeout per connection to 10s before it is closed
 </span><span class="kw">static </span>TEST_BEFORE_ACQUIRE: bool = <span 
class="bool-val">true</span>; <span class="comment">// Default the health-check 
of each connection to enabled prior to returning
@@ -1008,8 +1794,8 @@
 </span><span class="kw">pub struct </span>SqlCatalog {
     name: String,
     connection: AnyPool,
-    _warehouse_location: String,
-    _fileio: FileIO,
+    warehouse_location: String,
+    fileio: FileIO,
     sql_bind_style: SqlBindStyle,
 }
 
@@ -1079,8 +1865,8 @@
         <span class="prelude-val">Ok</span>(SqlCatalog {
             name: config.name.to_owned(),
             connection: pool,
-            _warehouse_location: config.warehouse_location,
-            _fileio: config.file_io,
+            warehouse_location: config.warehouse_location,
+            fileio: config.file_io,
             sql_bind_style: config.sql_bind_style,
         })
     }
@@ -1409,40 +2195,298 @@
         }
     }
 
-    <span class="kw">async fn </span>drop_namespace(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _namespace: <span 
class="kw-2">&amp;</span>NamespaceIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>drop_namespace(<span 
class="kw-2">&amp;</span><span class="self">self</span>, namespace: <span 
class="kw-2">&amp;</span>NamespaceIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>exists = <span 
class="self">self</span>.namespace_exists(namespace).<span 
class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">if </span>exists {
+            <span class="comment">// if there are tables in the namespace, 
don't allow drop.
+            </span><span class="kw">let </span>tables = <span 
class="self">self</span>.list_tables(namespace).<span 
class="kw">await</span><span class="question-mark">?</span>;
+            <span class="kw">if </span>!tables.is_empty() {
+                <span class="kw">return </span><span 
class="prelude-val">Err</span>(Error::new(
+                    iceberg::ErrorKind::Unexpected,
+                    <span class="macro">format!</span>(
+                        <span class="string">"Namespace {:?} is not empty. {} 
tables exist."</span>,
+                        namespace,
+                        tables.len()
+                    ),
+                ));
+            }
+
+            <span class="self">self</span>.execute(
+                <span class="kw-2">&amp;</span><span 
class="macro">format!</span>(
+                    <span class="string">"DELETE FROM {NAMESPACE_TABLE_NAME}
+                     WHERE {NAMESPACE_FIELD_NAME} = ?
+                      AND {CATALOG_FIELD_CATALOG_NAME} = ?"
+                </span>),
+                <span class="macro">vec!</span>[<span 
class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>namespace.join(<span class="string">"."</span>)), 
<span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span 
class="self">self</span>.name)],
+                <span class="prelude-val">None</span>,
+            )
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+            <span class="prelude-val">Ok</span>(())
+        } <span class="kw">else </span>{
+            no_such_namespace_err(namespace)
+        }
     }
 
-    <span class="kw">async fn </span>list_tables(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _namespace: <span 
class="kw-2">&amp;</span>NamespaceIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;Vec&lt;TableIdent&gt;&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>list_tables(<span 
class="kw-2">&amp;</span><span class="self">self</span>, namespace: <span 
class="kw-2">&amp;</span>NamespaceIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;Vec&lt;TableIdent&gt;&gt; {
+        <span class="kw">let </span>exists = <span 
class="self">self</span>.namespace_exists(namespace).<span 
class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">if </span>exists {
+            <span class="kw">let </span>rows = <span class="self">self
+                </span>.fetch_rows(
+                    <span class="kw-2">&amp;</span><span 
class="macro">format!</span>(
+                        <span class="string">"SELECT 
{CATALOG_FIELD_TABLE_NAME},
+                                {CATALOG_FIELD_TABLE_NAMESPACE}
+                         FROM {CATALOG_TABLE_NAME}
+                         WHERE {CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                          AND {CATALOG_FIELD_CATALOG_NAME} = ?
+                          AND (
+                                {CATALOG_FIELD_RECORD_TYPE} = 
'{CATALOG_FIELD_TABLE_RECORD_TYPE}' 
+                                OR {CATALOG_FIELD_RECORD_TYPE} IS NULL
+                          )"</span>,
+                    ),
+                    <span class="macro">vec!</span>[<span 
class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>namespace.join(<span class="string">"."</span>)), 
<span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span 
class="self">self</span>.name)],
+                )
+                .<span class="kw">await</span><span 
class="question-mark">?</span>;
+
+            <span class="kw">let </span><span class="kw-2">mut </span>tables = 
HashSet::&lt;TableIdent&gt;::with_capacity(rows.len());
+
+            <span class="kw">for </span>row <span class="kw">in 
</span>rows.iter() {
+                <span class="kw">let </span>tbl = row
+                    .try_get::&lt;String, <span 
class="kw">_</span>&gt;(CATALOG_FIELD_TABLE_NAME)
+                    .map_err(from_sqlx_error)<span 
class="question-mark">?</span>;
+                <span class="kw">let </span>ns_strs = row
+                    .try_get::&lt;String, <span 
class="kw">_</span>&gt;(CATALOG_FIELD_TABLE_NAMESPACE)
+                    .map_err(from_sqlx_error)<span 
class="question-mark">?</span>;
+                <span class="kw">let </span>ns = 
NamespaceIdent::from_strs(ns_strs.split(<span class="string">"."</span>))<span 
class="question-mark">?</span>;
+                tables.insert(TableIdent::new(ns, tbl));
+            }
+
+            <span 
class="prelude-val">Ok</span>(tables.into_iter().collect::&lt;Vec&lt;TableIdent&gt;&gt;())
+        } <span class="kw">else </span>{
+            no_such_namespace_err(namespace)
+        }
     }
 
-    <span class="kw">async fn </span>table_exists(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;bool&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>table_exists(<span 
class="kw-2">&amp;</span><span class="self">self</span>, identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;bool&gt; {
+        <span class="kw">let </span>namespace = 
identifier.namespace().join(<span class="string">"."</span>);
+        <span class="kw">let </span>table_name = identifier.name();
+        <span class="kw">let </span>table_counts = <span class="self">self
+            </span>.fetch_rows(
+                <span class="kw-2">&amp;</span><span 
class="macro">format!</span>(
+                    <span class="string">"SELECT 1
+                     FROM {CATALOG_TABLE_NAME}
+                     WHERE {CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                      AND {CATALOG_FIELD_CATALOG_NAME} = ?
+                      AND {CATALOG_FIELD_TABLE_NAME} = ?
+                      AND (
+                        {CATALOG_FIELD_RECORD_TYPE} = 
'{CATALOG_FIELD_TABLE_RECORD_TYPE}' 
+                        OR {CATALOG_FIELD_RECORD_TYPE} IS NULL
+                      )"
+                </span>),
+                <span class="macro">vec!</span>[<span 
class="prelude-val">Some</span>(<span class="kw-2">&amp;</span>namespace), 
<span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span 
class="self">self</span>.name), <span 
class="prelude-val">Some</span>(table_name)],
+            )
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">if </span>!table_counts.is_empty() {
+            <span class="prelude-val">Ok</span>(<span 
class="bool-val">true</span>)
+        } <span class="kw">else </span>{
+            <span class="prelude-val">Ok</span>(<span 
class="bool-val">false</span>)
+        }
     }
 
-    <span class="kw">async fn </span>drop_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>drop_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">if </span>!<span 
class="self">self</span>.table_exists(identifier).<span 
class="kw">await</span><span class="question-mark">? </span>{
+            <span class="kw">return </span>no_such_table_err(identifier);
+        }
+
+        <span class="self">self</span>.execute(
+            <span class="kw-2">&amp;</span><span class="macro">format!</span>(
+                <span class="string">"DELETE FROM {CATALOG_TABLE_NAME}
+                 WHERE {CATALOG_FIELD_CATALOG_NAME} = ?
+                  AND {CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                  AND {CATALOG_FIELD_TABLE_NAME} = ?
+                  AND (
+                    {CATALOG_FIELD_RECORD_TYPE} = 
'{CATALOG_FIELD_TABLE_RECORD_TYPE}' 
+                    OR {CATALOG_FIELD_RECORD_TYPE} IS NULL
+                  )"
+            </span>),
+            <span class="macro">vec!</span>[
+                <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span><span class="self">self</span>.name),
+                <span class="prelude-val">Some</span>(identifier.name()),
+                <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>identifier.namespace().join(<span 
class="string">"."</span>)),
+            ],
+            <span class="prelude-val">None</span>,
+        )
+        .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(())
     }
 
-    <span class="kw">async fn </span>load_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;Table&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>load_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, identifier: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;Table&gt; {
+        <span class="kw">if </span>!<span 
class="self">self</span>.table_exists(identifier).<span 
class="kw">await</span><span class="question-mark">? </span>{
+            <span class="kw">return </span>no_such_table_err(identifier);
+        }
+
+        <span class="kw">let </span>rows = <span class="self">self
+            </span>.fetch_rows(
+                <span class="kw-2">&amp;</span><span 
class="macro">format!</span>(
+                    <span class="string">"SELECT 
{CATALOG_FIELD_METADATA_LOCATION_PROP}
+                     FROM {CATALOG_TABLE_NAME}
+                     WHERE {CATALOG_FIELD_CATALOG_NAME} = ?
+                      AND {CATALOG_FIELD_TABLE_NAME} = ?
+                      AND {CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                      AND (
+                        {CATALOG_FIELD_RECORD_TYPE} = 
'{CATALOG_FIELD_TABLE_RECORD_TYPE}' 
+                        OR {CATALOG_FIELD_RECORD_TYPE} IS NULL
+                      )"
+                </span>),
+                <span class="macro">vec!</span>[
+                    <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span><span class="self">self</span>.name),
+                    <span class="prelude-val">Some</span>(identifier.name()),
+                    <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>identifier.namespace().join(<span 
class="string">"."</span>)),
+                ],
+            )
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="kw">if </span>rows.is_empty() {
+            <span class="kw">return </span>no_such_table_err(identifier);
+        }
+
+        <span class="kw">let </span>row = <span 
class="kw-2">&amp;</span>rows[<span class="number">0</span>];
+        <span class="kw">let </span>tbl_metadata_location = row
+            .try_get::&lt;String, <span 
class="kw">_</span>&gt;(CATALOG_FIELD_METADATA_LOCATION_PROP)
+            .map_err(from_sqlx_error)<span class="question-mark">?</span>;
+
+        <span class="kw">let </span>file = <span 
class="self">self</span>.fileio.new_input(<span 
class="kw-2">&amp;</span>tbl_metadata_location)<span 
class="question-mark">?</span>;
+        <span class="kw">let </span>metadata_content = file.read().<span 
class="kw">await</span><span class="question-mark">?</span>;
+        <span class="kw">let </span>metadata = 
serde_json::from_slice::&lt;TableMetadata&gt;(<span 
class="kw-2">&amp;</span>metadata_content)<span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(Table::builder()
+            .file_io(<span class="self">self</span>.fileio.clone())
+            .identifier(identifier.clone())
+            .metadata_location(tbl_metadata_location)
+            .metadata(metadata)
+            .build()<span class="question-mark">?</span>)
     }
 
     <span class="kw">async fn </span>create_table(
         <span class="kw-2">&amp;</span><span class="self">self</span>,
-        _namespace: <span class="kw-2">&amp;</span>NamespaceIdent,
-        _creation: TableCreation,
+        namespace: <span class="kw-2">&amp;</span>NamespaceIdent,
+        creation: TableCreation,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Table&gt; {
-        <span class="macro">todo!</span>()
+        <span class="kw">if </span>!<span 
class="self">self</span>.namespace_exists(namespace).<span 
class="kw">await</span><span class="question-mark">? </span>{
+            <span class="kw">return </span>no_such_namespace_err(namespace);
+        }
+
+        <span class="kw">let </span>tbl_name = creation.name.clone();
+        <span class="kw">let </span>tbl_ident = 
TableIdent::new(namespace.clone(), tbl_name.clone());
+
+        <span class="kw">if </span><span 
class="self">self</span>.table_exists(<span 
class="kw-2">&amp;</span>tbl_ident).<span class="kw">await</span><span 
class="question-mark">? </span>{
+            <span class="kw">return </span>table_already_exists_err(<span 
class="kw-2">&amp;</span>tbl_ident);
+        }
+
+        <span class="kw">let </span>(tbl_creation, location) = <span 
class="kw">match </span>creation.location.clone() {
+            <span class="prelude-val">Some</span>(location) =&gt; (creation, 
location),
+            <span class="prelude-val">None </span>=&gt; {
+                <span class="comment">// fall back to namespace-specific 
location
+                // and then to warehouse location
+                </span><span class="kw">let </span>nsp_properties = <span 
class="self">self</span>.get_namespace(namespace).<span 
class="kw">await</span><span 
class="question-mark">?</span>.properties().clone();
+                <span class="kw">let </span>nsp_location = <span 
class="kw">match </span>nsp_properties.get(NAMESPACE_LOCATION_PROPERTY_KEY) {
+                    <span class="prelude-val">Some</span>(location) =&gt; 
location.clone(),
+                    <span class="prelude-val">None </span>=&gt; {
+                        <span class="macro">format!</span>(
+                            <span class="string">"{}/{}"</span>,
+                            <span 
class="self">self</span>.warehouse_location.clone(),
+                            namespace.join(<span class="string">"/"</span>)
+                        )
+                    }
+                };
+
+                <span class="kw">let </span>tbl_location = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, nsp_location, 
tbl_ident.name());
+
+                (
+                    TableCreation {
+                        location: <span 
class="prelude-val">Some</span>(tbl_location.clone()),
+                        ..creation
+                    },
+                    tbl_location,
+                )
+            }
+        };
+
+        <span class="kw">let </span>tbl_metadata = 
TableMetadataBuilder::from_table_creation(tbl_creation)<span 
class="question-mark">?</span>.build()<span class="question-mark">?</span>;
+        <span class="kw">let </span>tbl_metadata_location = <span 
class="macro">format!</span>(
+            <span class="string">"{}/metadata/0-{}.metadata.json"</span>,
+            location.clone(),
+            Uuid::new_v4()
+        );
+
+        <span class="kw">let </span>file = <span 
class="self">self</span>.fileio.new_output(<span 
class="kw-2">&amp;</span>tbl_metadata_location)<span 
class="question-mark">?</span>;
+        file.write(serde_json::to_vec(<span 
class="kw-2">&amp;</span>tbl_metadata)<span 
class="question-mark">?</span>.into())
+            .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="self">self</span>.execute(<span 
class="kw-2">&amp;</span><span class="macro">format!</span>(
+            <span class="string">"INSERT INTO {CATALOG_TABLE_NAME}
+             ({CATALOG_FIELD_CATALOG_NAME}, {CATALOG_FIELD_TABLE_NAMESPACE}, 
{CATALOG_FIELD_TABLE_NAME}, {CATALOG_FIELD_METADATA_LOCATION_PROP}, 
{CATALOG_FIELD_RECORD_TYPE})
+             VALUES (?, ?, ?, ?, ?)
+            "</span>), <span class="macro">vec!</span>[<span 
class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span 
class="self">self</span>.name), <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>namespace.join(<span class="string">"."</span>)), 
<span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>tbl_name.clone()), <span 
class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>tbl_metadata_location), <span class="prelude-val">Some 
[...]
+
+        <span class="prelude-val">Ok</span>(Table::builder()
+            .file_io(<span class="self">self</span>.fileio.clone())
+            .metadata_location(tbl_metadata_location)
+            .identifier(tbl_ident)
+            .metadata(tbl_metadata)
+            .build()<span class="question-mark">?</span>)
     }
 
-    <span class="kw">async fn </span>rename_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _src: <span 
class="kw-2">&amp;</span>TableIdent, _dest: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="macro">todo!</span>()
+    <span class="kw">async fn </span>rename_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, src: <span 
class="kw-2">&amp;</span>TableIdent, dest: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">if </span>src == dest {
+            <span class="kw">return </span><span 
class="prelude-val">Ok</span>(());
+        }
+
+        <span class="kw">if </span>!<span 
class="self">self</span>.table_exists(src).<span class="kw">await</span><span 
class="question-mark">? </span>{
+            <span class="kw">return </span>no_such_table_err(src);
+        }
+
+        <span class="kw">if </span>!<span 
class="self">self</span>.namespace_exists(dest.namespace()).<span 
class="kw">await</span><span class="question-mark">? </span>{
+            <span class="kw">return 
</span>no_such_namespace_err(dest.namespace());
+        }
+
+        <span class="kw">if </span><span 
class="self">self</span>.table_exists(dest).<span class="kw">await</span><span 
class="question-mark">? </span>{
+            <span class="kw">return </span>table_already_exists_err(dest);
+        }
+
+        <span class="self">self</span>.execute(
+            <span class="kw-2">&amp;</span><span class="macro">format!</span>(
+                <span class="string">"UPDATE {CATALOG_TABLE_NAME}
+                 SET {CATALOG_FIELD_TABLE_NAME} = ?, 
{CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                 WHERE {CATALOG_FIELD_CATALOG_NAME} = ?
+                  AND {CATALOG_FIELD_TABLE_NAME} = ?
+                  AND {CATALOG_FIELD_TABLE_NAMESPACE} = ?
+                  AND (
+                    {CATALOG_FIELD_RECORD_TYPE} = 
'{CATALOG_FIELD_TABLE_RECORD_TYPE}'
+                    OR {CATALOG_FIELD_RECORD_TYPE} IS NULL
+                )"
+            </span>),
+            <span class="macro">vec!</span>[
+                <span class="prelude-val">Some</span>(dest.name()),
+                <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>dest.namespace().join(<span 
class="string">"."</span>)),
+                <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span><span class="self">self</span>.name),
+                <span class="prelude-val">Some</span>(src.name()),
+                <span class="prelude-val">Some</span>(<span 
class="kw-2">&amp;</span>src.namespace().join(<span class="string">"."</span>)),
+            ],
+            <span class="prelude-val">None</span>,
+        )
+        .<span class="kw">await</span><span class="question-mark">?</span>;
+
+        <span class="prelude-val">Ok</span>(())
     }
 
     <span class="kw">async fn </span>update_table(<span 
class="kw-2">&amp;</span><span class="self">self</span>, _commit: TableCommit) 
-&gt; <span class="prelude-ty">Result</span>&lt;Table&gt; {
-        <span class="macro">todo!</span>()
+        <span class="prelude-val">Err</span>(Error::new(
+            ErrorKind::FeatureUnsupported,
+            <span class="string">"Updating a table is not supported 
yet"</span>,
+        ))
     }
 }
 
@@ -1452,12 +2496,19 @@
     <span class="kw">use </span>std::hash::Hash;
 
     <span class="kw">use </span>iceberg::io::FileIOBuilder;
-    <span class="kw">use </span>iceberg::{Catalog, Namespace, NamespaceIdent};
+    <span class="kw">use </span>iceberg::spec::{NestedField, PartitionSpec, 
PrimitiveType, Schema, SortOrder, Type};
+    <span class="kw">use </span>iceberg::table::Table;
+    <span class="kw">use </span>iceberg::{Catalog, Namespace, NamespaceIdent, 
TableCreation, TableIdent};
+    <span class="kw">use </span>itertools::Itertools;
+    <span class="kw">use </span>regex::Regex;
     <span class="kw">use </span>sqlx::migrate::MigrateDatabase;
     <span class="kw">use </span>tempfile::TempDir;
 
+    <span class="kw">use </span><span 
class="kw">crate</span>::catalog::NAMESPACE_LOCATION_PROPERTY_KEY;
     <span class="kw">use crate</span>::{SqlBindStyle, SqlCatalog, 
SqlCatalogConfig};
 
+    <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>temp_path() -&gt; String {
         <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
         temp_dir.path().to_str().unwrap().to_string()
@@ -1499,6 +2550,83 @@
         }
     }
 
+    <span class="kw">fn </span>simple_table_schema() -&gt; Schema {
+        Schema::builder()
+            .with_fields(<span class="macro">vec!</span>[NestedField::required(
+                <span class="number">1</span>,
+                <span class="string">"foo"</span>,
+                Type::Primitive(PrimitiveType::Int),
+            )
+            .into()])
+            .build()
+            .unwrap()
+    }
+
+    <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>= catalog
+            .create_table(
+                <span class="kw-2">&amp;</span>table_ident.namespace,
+                TableCreation::builder()
+                    .name(table_ident.name().into())
+                    .schema(simple_table_schema())
+                    .location(temp_path())
+                    .build(),
+            )
+            .<span class="kw">await
+            </span>.unwrap();
+    }
+
+    <span class="kw">async fn </span>create_tables&lt;C: Catalog&gt;(catalog: 
<span class="kw-2">&amp;</span>C, table_idents: Vec&lt;<span 
class="kw-2">&amp;</span>TableIdent&gt;) {
+        <span class="kw">for </span>table_ident <span class="kw">in 
</span>table_idents {
+            create_table(catalog, table_ident).<span class="kw">await</span>;
+        }
+    }
+
+    <span class="kw">fn </span>assert_table_eq(table: <span 
class="kw-2">&amp;</span>Table, expected_table_ident: <span 
class="kw-2">&amp;</span>TableIdent, expected_schema: <span 
class="kw-2">&amp;</span>Schema) {
+        <span class="macro">assert_eq!</span>(table.identifier(), 
expected_table_ident);
+
+        <span class="kw">let </span>metadata = table.metadata();
+
+        <span 
class="macro">assert_eq!</span>(metadata.current_schema().as_ref(), 
expected_schema);
+
+        <span class="kw">let </span>expected_partition_spec = 
PartitionSpec::builder(expected_schema)
+            .with_spec_id(<span class="number">0</span>)
+            .build()
+            .unwrap();
+
+        <span class="macro">assert_eq!</span>(
+            metadata
+                .partition_specs_iter()
+                .map(|p| p.as_ref())
+                .collect_vec(),
+            <span class="macro">vec!</span>[<span 
class="kw-2">&amp;</span>expected_partition_spec]
+        );
+
+        <span class="kw">let </span>expected_sorted_order = 
SortOrder::builder()
+            .with_order_id(<span class="number">0</span>)
+            .with_fields(<span class="macro">vec!</span>[])
+            .build(expected_schema)
+            .unwrap();
+
+        <span class="macro">assert_eq!</span>(
+            metadata
+                .sort_orders_iter()
+                .map(|s| s.as_ref())
+                .collect_vec(),
+            <span class="macro">vec!</span>[<span 
class="kw-2">&amp;</span>expected_sorted_order]
+        );
+
+        <span class="macro">assert_eq!</span>(metadata.properties(), <span 
class="kw-2">&amp;</span>HashMap::new());
+
+        <span class="macro">assert!</span>(!table.readonly());
+    }
+
+    <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_initialized() {
         <span class="kw">let </span>warehouse_loc = temp_path();
@@ -1747,7 +2875,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn </span>test_drop_namespace() {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1760,7 +2887,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn </span>test_drop_nested_namespace() {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1779,7 +2905,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn 
</span>test_drop_deeply_nested_namespace() {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1812,7 +2937,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn 
</span>test_drop_namespace_throws_error_if_namespace_doesnt_exist() {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1832,7 +2956,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn 
</span>test_drop_namespace_throws_error_if_nested_namespace_doesnt_exist() {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1854,7 +2977,6 @@
     }
 
     <span class="attr">#[tokio::test]
-    #[ignore = <span class="string">"drop_namespace not implemented"</span>]
     </span><span class="kw">async fn 
</span>test_dropping_a_namespace_does_not_drop_namespaces_nested_under_that_one()
 {
         <span class="kw">let </span>warehouse_loc = temp_path();
         <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
@@ -1871,5 +2993,439 @@
             .<span class="kw">await
             </span>.unwrap());
     }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_list_tables_returns_empty_vector() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</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="macro">assert_eq!</span>(catalog.list_tables(<span 
class="kw-2">&amp;</span>namespace_ident).<span 
class="kw">await</span>.unwrap(), <span class="macro">vec!</span>[]);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_list_tables_throws_error_if_namespace_doesnt_exist() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+
+        <span class="kw">let </span>non_existent_namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</span>.into());
+
+        <span class="macro">assert_eq!</span>(
+            catalog
+                .list_tables(<span 
class="kw-2">&amp;</span>non_existent_namespace_ident)
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(
+                <span class="string">"Unexpected =&gt; No such namespace: 
{:?}"</span>,
+                non_existent_namespace_ident
+            ),
+        );
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn </span>test_create_table_with_location() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc.clone()).<span class="kw">await</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">"abc"</span>;
+        <span class="kw">let </span>location = warehouse_loc.clone();
+        <span class="kw">let </span>table_creation = TableCreation::builder()
+            .name(table_name.into())
+            .location(location.clone())
+            .schema(simple_table_schema())
+            .build();
+
+        <span class="kw">let </span>expected_table_ident = 
TableIdent::new(namespace_ident.clone(), table_name.into());
+
+        assert_table_eq(
+            <span class="kw-2">&amp;</span>catalog
+                .create_table(<span class="kw-2">&amp;</span>namespace_ident, 
table_creation)
+                .<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="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());
+
+        <span class="macro">assert!</span>(table
+            .metadata_location()
+            .unwrap()
+            .to_string()
+            .starts_with(<span class="kw-2">&amp;</span>location))
+    }
+
+    <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>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+
+        <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(
+            NAMESPACE_LOCATION_PROPERTY_KEY.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>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+
+        <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(
+            NAMESPACE_LOCATION_PROPERTY_KEY.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(
+            NAMESPACE_LOCATION_PROPERTY_KEY.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>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc.clone()).<span class="kw">await</span>;
+
+        <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_loc, 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>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc.clone()).<span class="kw">await</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>nested_namespace_ident = 
NamespaceIdent::from_strs(<span class="macro">vec!</span>[<span 
class="string">"a"</span>, <span class="string">"b"</span>]).unwrap();
+        create_namespace(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>nested_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(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_loc, 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_with_same_name_already_exists() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc.clone()).<span class="kw">await</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>table_ident = 
TableIdent::new(namespace_ident.clone(), table_name.into());
+        create_table(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>table_ident).<span class="kw">await</span>;
+
+        <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="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())
+                        .location(location)
+                        .build()
+                )
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(<span 
class="string">"Unexpected =&gt; Table {:?} already exists."</span>, <span 
class="kw-2">&amp;</span>table_ident)
+        );
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_in_same_namespace() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</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>src_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        <span class="kw">let </span>dst_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl2"</span>.into());
+        create_table(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>src_table_ident).<span class="kw">await</span>;
+
+        catalog
+            .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="macro">assert_eq!</span>(catalog.list_tables(<span 
class="kw-2">&amp;</span>namespace_ident).<span 
class="kw">await</span>.unwrap(), <span class="macro">vec!</span>[
+            dst_table_ident
+        ],);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_across_namespaces() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>src_namespace_ident = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        <span class="kw">let </span>dst_namespace_ident = 
NamespaceIdent::new(<span class="string">"b"</span>.into());
+        create_namespaces(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span><span class="macro">vec!</span>[<span 
class="kw-2">&amp;</span>src_namespace_ident, <span 
class="kw-2">&amp;</span>dst_namespace_ident]).<span class="kw">await</span>;
+        <span class="kw">let </span>src_table_ident = 
TableIdent::new(src_namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        <span class="kw">let </span>dst_table_ident = 
TableIdent::new(dst_namespace_ident.clone(), <span 
class="string">"tbl2"</span>.into());
+        create_table(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>src_table_ident).<span class="kw">await</span>;
+
+        catalog
+            .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="macro">assert_eq!</span>(
+            catalog.list_tables(<span 
class="kw-2">&amp;</span>src_namespace_ident).<span 
class="kw">await</span>.unwrap(),
+            <span class="macro">vec!</span>[],
+        );
+
+        <span class="macro">assert_eq!</span>(
+            catalog.list_tables(<span 
class="kw-2">&amp;</span>dst_namespace_ident).<span 
class="kw">await</span>.unwrap(),
+            <span class="macro">vec!</span>[dst_table_ident],
+        );
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_src_table_is_same_as_dst_table() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</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_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl"</span>.into());
+        create_table(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>table_ident).<span class="kw">await</span>;
+
+        catalog
+            .rename_table(<span class="kw-2">&amp;</span>table_ident, <span 
class="kw-2">&amp;</span>table_ident)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="macro">assert_eq!</span>(catalog.list_tables(<span 
class="kw-2">&amp;</span>namespace_ident).<span 
class="kw">await</span>.unwrap(), <span class="macro">vec!</span>[
+            table_ident
+        ],);
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_across_nested_namespaces() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>namespace_ident_a = 
NamespaceIdent::new(<span class="string">"a"</span>.into());
+        <span class="kw">let </span>namespace_ident_a_b = 
NamespaceIdent::from_strs(<span class="macro">vec!</span>[<span 
class="string">"a"</span>, <span class="string">"b"</span>]).unwrap();
+        <span class="kw">let </span>namespace_ident_a_b_c = 
NamespaceIdent::from_strs(<span class="macro">vec!</span>[<span 
class="string">"a"</span>, <span class="string">"b"</span>, <span 
class="string">"c"</span>]).unwrap();
+        create_namespaces(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span><span class="macro">vec!</span>[
+            <span class="kw-2">&amp;</span>namespace_ident_a,
+            <span class="kw-2">&amp;</span>namespace_ident_a_b,
+            <span class="kw-2">&amp;</span>namespace_ident_a_b_c,
+        ])
+        .<span class="kw">await</span>;
+
+        <span class="kw">let </span>src_table_ident = 
TableIdent::new(namespace_ident_a_b_c.clone(), <span 
class="string">"tbl1"</span>.into());
+        create_tables(<span class="kw-2">&amp;</span>catalog, <span 
class="macro">vec!</span>[<span 
class="kw-2">&amp;</span>src_table_ident]).<span class="kw">await</span>;
+
+        <span class="kw">let </span>dst_table_ident = 
TableIdent::new(namespace_ident_a_b.clone(), <span 
class="string">"tbl1"</span>.into());
+        catalog
+            .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+            .<span class="kw">await
+            </span>.unwrap();
+
+        <span class="macro">assert!</span>(!catalog.table_exists(<span 
class="kw-2">&amp;</span>src_table_ident).<span 
class="kw">await</span>.unwrap());
+
+        <span class="macro">assert!</span>(catalog.table_exists(<span 
class="kw-2">&amp;</span>dst_table_ident).<span 
class="kw">await</span>.unwrap());
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_throws_error_if_dst_namespace_doesnt_exist() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>src_namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</span>.into());
+        <span class="kw">let </span>src_table_ident = 
TableIdent::new(src_namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        create_namespace(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>src_namespace_ident).<span class="kw">await</span>;
+        create_table(<span class="kw-2">&amp;</span>catalog, <span 
class="kw-2">&amp;</span>src_table_ident).<span class="kw">await</span>;
+
+        <span class="kw">let </span>non_existent_dst_namespace_ident = 
NamespaceIdent::new(<span class="string">"n2"</span>.into());
+        <span class="kw">let </span>dst_table_ident =
+            TableIdent::new(non_existent_dst_namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        <span class="macro">assert_eq!</span>(
+            catalog
+                .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(
+                <span class="string">"Unexpected =&gt; No such namespace: 
{:?}"</span>,
+                non_existent_dst_namespace_ident
+            ),
+        );
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_throws_error_if_src_table_doesnt_exist() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</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>src_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        <span class="kw">let </span>dst_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl2"</span>.into());
+
+        <span class="macro">assert_eq!</span>(
+            catalog
+                .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(<span 
class="string">"Unexpected =&gt; No such table: {:?}"</span>, src_table_ident),
+        );
+    }
+
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn 
</span>test_rename_table_throws_error_if_dst_table_already_exists() {
+        <span class="kw">let </span>warehouse_loc = temp_path();
+        <span class="kw">let </span>catalog = 
new_sql_catalog(warehouse_loc).<span class="kw">await</span>;
+        <span class="kw">let </span>namespace_ident = 
NamespaceIdent::new(<span class="string">"n1"</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>src_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl1"</span>.into());
+        <span class="kw">let </span>dst_table_ident = 
TableIdent::new(namespace_ident.clone(), <span 
class="string">"tbl2"</span>.into());
+        create_tables(<span class="kw-2">&amp;</span>catalog, <span 
class="macro">vec!</span>[<span class="kw-2">&amp;</span>src_table_ident, <span 
class="kw-2">&amp;</span>dst_table_ident]).<span class="kw">await</span>;
+
+        <span class="macro">assert_eq!</span>(
+            catalog
+                .rename_table(<span class="kw-2">&amp;</span>src_table_ident, 
<span class="kw-2">&amp;</span>dst_table_ident)
+                .<span class="kw">await
+                </span>.unwrap_err()
+                .to_string(),
+            <span class="macro">format!</span>(<span 
class="string">"Unexpected =&gt; Table {:?} already exists."</span>, <span 
class="kw-2">&amp;</span>dst_table_ident),
+        );
+    }
 }
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg_catalog_sql/error.rs.html 
b/api/src/iceberg_catalog_sql/error.rs.html
index 93814b9b..2d52b190 100644
--- a/api/src/iceberg_catalog_sql/error.rs.html
+++ b/api/src/iceberg_catalog_sql/error.rs.html
@@ -32,6 +32,20 @@
 <a href="#32" id="32">32</a>
 <a href="#33" id="33">33</a>
 <a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</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
@@ -49,7 +63,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-</span><span class="kw">use </span>iceberg::{Error, ErrorKind, NamespaceIdent, 
<span class="prelude-ty">Result</span>};
+</span><span class="kw">use </span>iceberg::{Error, ErrorKind, NamespaceIdent, 
<span class="prelude-ty">Result</span>, TableIdent};
 
 <span class="doccomment">/// Format an sqlx error into iceberg error.
 </span><span class="kw">pub fn </span>from_sqlx_error(error: sqlx::Error) 
-&gt; Error {
@@ -66,4 +80,18 @@
         <span class="macro">format!</span>(<span class="string">"No such 
namespace: {:?}"</span>, namespace),
     ))
 }
+
+<span class="kw">pub fn </span>no_such_table_err&lt;T&gt;(table_ident: <span 
class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;T&gt; {
+    <span class="prelude-val">Err</span>(Error::new(
+        ErrorKind::Unexpected,
+        <span class="macro">format!</span>(<span class="string">"No such 
table: {:?}"</span>, table_ident),
+    ))
+}
+
+<span class="kw">pub fn </span>table_already_exists_err&lt;T&gt;(table_ident: 
<span class="kw-2">&amp;</span>TableIdent) -&gt; <span 
class="prelude-ty">Result</span>&lt;T&gt; {
+    <span class="prelude-val">Err</span>(Error::new(
+        ErrorKind::Unexpected,
+        <span class="macro">format!</span>(<span class="string">"Table {:?} 
already exists."</span>, table_ident),
+    ))
+}
 </code></pre></div></section></main></body></html>
\ No newline at end of file

Reply via email to