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 3c55c4ff deploy: e93dd04e1ba661c783b05b5dced424c624be8af5
3c55c4ff is described below

commit 3c55c4fff8e710a52ded3d78055017e07d58f120
Author: Xuanwo <[email protected]>
AuthorDate: Mon Jun 30 12:57:24 2025 +0000

    deploy: e93dd04e1ba661c783b05b5dced424c624be8af5
---
 .../file_writer/location_generator/index.html      |   2 +-
 .../struct.DefaultFileNameGenerator.html           |   6 +-
 .../struct.DefaultLocationGenerator.html           |   4 +-
 .../trait.FileNameGenerator.html                   |   6 +-
 .../trait.LocationGenerator.html                   |   2 +-
 .../writer/file_writer/location_generator.rs.html  | 337 ++++++++++-----------
 6 files changed, 173 insertions(+), 184 deletions(-)

diff --git a/api/iceberg/writer/file_writer/location_generator/index.html 
b/api/iceberg/writer/file_writer/location_generator/index.html
index 923c45c3..a5b5f506 100644
--- a/api/iceberg/writer/file_writer/location_generator/index.html
+++ b/api/iceberg/writer/file_writer/location_generator/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="This 
module contains the location generator and file name generator for generating 
path of data file."><title>iceberg::writer::file_writer::location_generator - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b
 [...]
+<!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="This 
module contains the location generator and file name generator for generating 
path of data file."><title>iceberg::writer::file_writer::location_generator - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b
 [...]
 </div></details><h2 id="structs" class="section-header">Structs<a 
href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a 
class="struct" href="struct.DefaultFileNameGenerator.html" title="struct 
iceberg::writer::file_writer::location_generator::DefaultFileNameGenerator">Default<wbr>File<wbr>Name<wbr>Generator</a></dt><dd><code>DefaultFileNameGenerator</code>
 used to generate file name for data file. The file name can be
 passed to <code>LocationGenerator</code> to generate the location of the file.
 The file name format is 
“{prefix}-{file_count}[-{suffix}].{file_format}”.</dd><dt><a class="struct" 
href="struct.DefaultLocationGenerator.html" title="struct 
iceberg::writer::file_writer::location_generator::DefaultLocationGenerator">Default<wbr>Location<wbr>Generator</a></dt><dd><code>DefaultLocationGenerator</code>
 used to generate the data dir location of data file.
diff --git 
a/api/iceberg/writer/file_writer/location_generator/struct.DefaultFileNameGenerator.html
 
b/api/iceberg/writer/file_writer/location_generator/struct.DefaultFileNameGenerator.html
index c5ce1bb2..95cfefdb 100644
--- 
a/api/iceberg/writer/file_writer/location_generator/struct.DefaultFileNameGenerator.html
+++ 
b/api/iceberg/writer/file_writer/location_generator/struct.DefaultFileNameGenerator.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="`DefaultFileNameGenerator` used to generate file name for data file. 
The file name can be passed to `LocationGenerator` to generate the location of 
the file. The file name format is 
“{prefix}-{file_count}[-{suffix}].{file_format}”."><title>DefaultFileNameGenerator
 in iceberg::writer::fil [...]
+<!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="`DefaultFileNameGenerator` used to generate file name for data file. 
The file name can be passed to `LocationGenerator` to generate the location of 
the file. The file name format is 
“{prefix}-{file_count}[-{suffix}].{file_format}”."><title>DefaultFileNameGenerator
 in iceberg::writer::fil [...]
 passed to <code>LocationGenerator</code> to generate the location of the file.
 The file name format is “{prefix}-{file_count}[-{suffix}].{file_format}”.</p>
-</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-DefaultFileNameGenerator" 
class="impl"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#98-114">Source</a><a
 href="#impl-DefaultFileNameGenerator" class="anchor">§</a><h3 
class="code-header">impl <a cla [...]
+</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-DefaultFileNameGenerator" 
class="impl"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#85-101">Source</a><a
 href="#impl-DefaultFileNameGenerator" class="anchor">§</a><h3 
class="code-header">impl <a cla [...]
     prefix: <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>,
     suffix: <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"; 
title="enum core::option::Option">Option</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>&gt;,
     format: <a class="enum" href="../../../spec/enum.DataFileFormat.html" 
title="enum iceberg::spec::DataFileFormat">DataFileFormat</a>,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new 
<code>FileNameGenerator</code>.</p>
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-DefaultFileNameGenerator" class="impl"><a class="src 
rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#90">Source</a><a
 href="#impl-Clone-for-DefaultFileNameGene [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-DefaultFileNameGenerator" class="impl"><a class="src 
rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#77">Source</a><a
 href="#impl-Clone-for-DefaultFileNameGene [...]
     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#139";>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/any/trait.Any.html"; title="trait 
core::any::Any">Any</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.as_any" class="method trait-impl"><a 
href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html"; title="trait 
core::any::Any">Any</a> + 'static)</h4 [...]
     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#211";>Source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
diff --git 
a/api/iceberg/writer/file_writer/location_generator/struct.DefaultLocationGenerator.html
 
b/api/iceberg/writer/file_writer/location_generator/struct.DefaultLocationGenerator.html
index 9306c1b5..50ae6edb 100644
--- 
a/api/iceberg/writer/file_writer/location_generator/struct.DefaultLocationGenerator.html
+++ 
b/api/iceberg/writer/file_writer/location_generator/struct.DefaultLocationGenerator.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" 
content="`DefaultLocationGenerator` used to generate the data dir location of 
data file. The location is generated based on the table location and the data 
location in table properties."><title>DefaultLocationGenerator in 
iceberg::writer::file_writer::location_generator - Rust</title><script>if(w 
[...]
 The location is generated based on the table location and the data location in 
table properties.</p>
-</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-DefaultLocationGenerator" 
class="impl"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#45-73">Source</a><a
 href="#impl-DefaultLocationGenerator" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
-</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-DefaultLocationGenerator" class="impl"><a class="src 
rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#38">Source</a><a
 href="#impl-Clone-for-DefaultLocationGene [...]
+</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-DefaultLocationGenerator" 
class="impl"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#45-60">Source</a><a
 href="#impl-DefaultLocationGenerator" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Clone-for-DefaultLocationGenerator" class="impl"><a class="src 
rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#38">Source</a><a
 href="#impl-Clone-for-DefaultLocationGene [...]
 e.g
 For file name “part-00000.parquet”, the generated location maybe 
“/table/data/part-00000.parquet”</div></details></div></details></div><h2 
id="synthetic-implementations" class="section-header">Auto Trait 
Implementations<a href="#synthetic-implementations" 
class="anchor">§</a></h2><div id="synthetic-implementations-list"><section 
id="impl-Freeze-for-DefaultLocationGenerator" class="impl"><a 
href="#impl-Freeze-for-DefaultLocationGenerator" class="anchor">§</a><h3 
class="code-header">impl < [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139";>Source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
diff --git 
a/api/iceberg/writer/file_writer/location_generator/trait.FileNameGenerator.html
 
b/api/iceberg/writer/file_writer/location_generator/trait.FileNameGenerator.html
index 729228bf..22fb835c 100644
--- 
a/api/iceberg/writer/file_writer/location_generator/trait.FileNameGenerator.html
+++ 
b/api/iceberg/writer/file_writer/location_generator/trait.FileNameGenerator.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" 
content="`FileNameGeneratorTrait` used to generate file name for data file. The 
file name can be passed to `LocationGenerator` to generate the location of the 
file."><title>FileNameGenerator in 
iceberg::writer::file_writer::location_generator - 
Rust</title><script>if(window.location.protocol!=="f [...]
+<!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="`FileNameGeneratorTrait` used to generate file name for data file. The 
file name can be passed to `LocationGenerator` to generate the location of the 
file."><title>FileNameGenerator in 
iceberg::writer::file_writer::location_generator - 
Rust</title><script>if(window.location.protocol!=="f [...]
     <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html"; 
title="trait core::clone::Clone">Clone</a>
     + <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html"; 
title="trait core::marker::Send">Send</a>
     + 'static {
     // Required method
     fn <a href="#tymethod.generate_file_name" 
class="fn">generate_file_name</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>;
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p><code>FileNameGeneratorTrait</code> used to generate file 
name for data file. The file name can be passed to 
<code>LocationGenerator</code> to generate the location of the file.</p>
-</div></details><h2 id="required-methods" class="section-header">Required 
Methods<a href="#required-methods" class="anchor">§</a></h2><div 
class="methods"><details class="toggle method-toggle" open><summary><section 
id="tymethod.generate_file_name" class="method"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#84">Source</a><h4
 class="code-header">fn <a href="#tymethod.generate_file_name" 
class="fn">generate_file_name</a>(&amp;self) -& [...]
-</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn 
Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div 
class="dyn-compatibility-info"><p>This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#dyn-compatibility";>dyn
 compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was 
called "object safety", so this trait is not object safe.</i></p></div><h2 
id="implementors" class="section-header">I [...]
\ No newline at end of file
+</div></details><h2 id="required-methods" class="section-header">Required 
Methods<a href="#required-methods" class="anchor">§</a></h2><div 
class="methods"><details class="toggle method-toggle" open><summary><section 
id="tymethod.generate_file_name" class="method"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#71">Source</a><h4
 class="code-header">fn <a href="#tymethod.generate_file_name" 
class="fn">generate_file_name</a>(&amp;self) -& [...]
+</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn 
Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div 
class="dyn-compatibility-info"><p>This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#dyn-compatibility";>dyn
 compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was 
called "object safety", so this trait is not object safe.</i></p></div><h2 
id="implementors" class="section-header">I [...]
\ No newline at end of file
diff --git 
a/api/iceberg/writer/file_writer/location_generator/trait.LocationGenerator.html
 
b/api/iceberg/writer/file_writer/location_generator/trait.LocationGenerator.html
index a447e089..8ffa3430 100644
--- 
a/api/iceberg/writer/file_writer/location_generator/trait.LocationGenerator.html
+++ 
b/api/iceberg/writer/file_writer/location_generator/trait.LocationGenerator.html
@@ -8,4 +8,4 @@
 </div></details><h2 id="required-methods" class="section-header">Required 
Methods<a href="#required-methods" class="anchor">§</a></h2><div 
class="methods"><details class="toggle method-toggle" open><summary><section 
id="tymethod.generate_location" class="method"><a class="src rightside" 
href="../../../../src/iceberg/writer/file_writer/location_generator.rs.html#31">Source</a><h4
 class="code-header">fn <a href="#tymethod.generate_location" 
class="fn">generate_location</a>(&amp;self, file_ [...]
 e.g
 For file name “part-00000.parquet”, the generated location maybe 
“/table/data/part-00000.parquet”</p>
-</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn 
Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div 
class="dyn-compatibility-info"><p>This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#dyn-compatibility";>dyn
 compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was 
called "object safety", so this trait is not object safe.</i></p></div><h2 
id="implementors" class="section-header">I [...]
\ No newline at end of file
+</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn 
Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div 
class="dyn-compatibility-info"><p>This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#dyn-compatibility";>dyn
 compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was 
called "object safety", so this trait is not object safe.</i></p></div><h2 
id="implementors" class="section-header">I [...]
\ No newline at end of file
diff --git a/api/src/iceberg/writer/file_writer/location_generator.rs.html 
b/api/src/iceberg/writer/file_writer/location_generator.rs.html
index d02e8652..9619cf14 100644
--- a/api/src/iceberg/writer/file_writer/location_generator.rs.html
+++ b/api/src/iceberg/writer/file_writer/location_generator.rs.html
@@ -20,8 +20,8 @@
 <a href=#20 id=20 data-nosnippet>20</a></span><span class="kw">use 
</span>std::sync::Arc;
 <a href=#21 id=21 data-nosnippet>21</a><span class="kw">use 
</span>std::sync::atomic::AtomicU64;
 <a href=#22 id=22 data-nosnippet>22</a>
-<a href=#23 id=23 data-nosnippet>23</a><span class="kw">use </span><span 
class="kw">crate</span>::spec::{DataFileFormat, TableMetadata};
-<a href=#24 id=24 data-nosnippet>24</a><span class="kw">use 
crate</span>::{Error, ErrorKind, <span class="prelude-ty">Result</span>};
+<a href=#23 id=23 data-nosnippet>23</a><span class="kw">use </span><span 
class="kw">crate</span>::Result;
+<a href=#24 id=24 data-nosnippet>24</a><span class="kw">use </span><span 
class="kw">crate</span>::spec::{DataFileFormat, TableMetadata};
 <a href=#25 id=25 data-nosnippet>25</a>
 <a href=#26 id=26 data-nosnippet>26</a><span class="doccomment">/// 
`LocationGenerator` used to generate the location of data file.
 <a href=#27 id=27 data-nosnippet>27</a></span><span class="kw">pub trait 
</span>LocationGenerator: Clone + Send + <span class="lifetime">'static </span>{
@@ -46,159 +46,159 @@
 <a href=#46 id=46 data-nosnippet>46</a>    <span class="doccomment">/// Create 
a new `DefaultLocationGenerator`.
 <a href=#47 id=47 data-nosnippet>47</a>    </span><span class="kw">pub fn 
</span>new(table_metadata: TableMetadata) -&gt; <span 
class="prelude-ty">Result</span>&lt;<span class="self">Self</span>&gt; {
 <a href=#48 id=48 data-nosnippet>48</a>        <span class="kw">let 
</span>table_location = table_metadata.location();
-<a href=#49 id=49 data-nosnippet>49</a>        <span class="kw">let 
</span>rel_dir_path = {
-<a href=#50 id=50 data-nosnippet>50</a>            <span class="kw">let 
</span>prop = table_metadata.properties();
-<a href=#51 id=51 data-nosnippet>51</a>            <span class="kw">let 
</span>data_location = prop
-<a href=#52 id=52 data-nosnippet>52</a>                
.get(WRITE_DATA_LOCATION)
-<a href=#53 id=53 data-nosnippet>53</a>                
.or(prop.get(WRITE_FOLDER_STORAGE_LOCATION));
-<a href=#54 id=54 data-nosnippet>54</a>            <span class="kw">if let 
</span><span class="prelude-val">Some</span>(data_location) = data_location {
-<a href=#55 id=55 data-nosnippet>55</a>                
data_location.strip_prefix(table_location).ok_or_else(|| {
-<a href=#56 id=56 data-nosnippet>56</a>                    Error::new(
-<a href=#57 id=57 data-nosnippet>57</a>                        
ErrorKind::DataInvalid,
-<a href=#58 id=58 data-nosnippet>58</a>                        <span 
class="macro">format!</span>(
-<a href=#59 id=59 data-nosnippet>59</a>                            <span 
class="string">"data location {} is not a subpath of table location {}"</span>,
-<a href=#60 id=60 data-nosnippet>60</a>                            
data_location, table_location
-<a href=#61 id=61 data-nosnippet>61</a>                        ),
-<a href=#62 id=62 data-nosnippet>62</a>                    )
-<a href=#63 id=63 data-nosnippet>63</a>                })<span 
class="question-mark">?
-<a href=#64 id=64 data-nosnippet>64</a>            </span>} <span 
class="kw">else </span>{
-<a href=#65 id=65 data-nosnippet>65</a>                DEFAULT_DATA_DIR
-<a href=#66 id=66 data-nosnippet>66</a>            }
-<a href=#67 id=67 data-nosnippet>67</a>        };
-<a href=#68 id=68 data-nosnippet>68</a>
-<a href=#69 id=69 data-nosnippet>69</a>        <span 
class="prelude-val">Ok</span>(<span class="self">Self </span>{
-<a href=#70 id=70 data-nosnippet>70</a>            dir_path: <span 
class="macro">format!</span>(<span class="string">"{}{}"</span>, 
table_location, rel_dir_path),
-<a href=#71 id=71 data-nosnippet>71</a>        })
-<a href=#72 id=72 data-nosnippet>72</a>    }
-<a href=#73 id=73 data-nosnippet>73</a>}
-<a href=#74 id=74 data-nosnippet>74</a>
-<a href=#75 id=75 data-nosnippet>75</a><span class="kw">impl 
</span>LocationGenerator <span class="kw">for </span>DefaultLocationGenerator {
-<a href=#76 id=76 data-nosnippet>76</a>    <span class="kw">fn 
</span>generate_location(<span class="kw-2">&amp;</span><span 
class="self">self</span>, file_name: <span class="kw-2">&amp;</span>str) -&gt; 
String {
-<a href=#77 id=77 data-nosnippet>77</a>        <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, <span 
class="self">self</span>.dir_path, file_name)
-<a href=#78 id=78 data-nosnippet>78</a>    }
-<a href=#79 id=79 data-nosnippet>79</a>}
-<a href=#80 id=80 data-nosnippet>80</a>
-<a href=#81 id=81 data-nosnippet>81</a><span class="doccomment">/// 
`FileNameGeneratorTrait` used to generate file name for data file. The file 
name can be passed to `LocationGenerator` to generate the location of the file.
-<a href=#82 id=82 data-nosnippet>82</a></span><span class="kw">pub trait 
</span>FileNameGenerator: Clone + Send + <span class="lifetime">'static </span>{
-<a href=#83 id=83 data-nosnippet>83</a>    <span class="doccomment">/// 
Generate a file name.
-<a href=#84 id=84 data-nosnippet>84</a>    </span><span class="kw">fn 
</span>generate_file_name(<span class="kw-2">&amp;</span><span 
class="self">self</span>) -&gt; String;
-<a href=#85 id=85 data-nosnippet>85</a>}
-<a href=#86 id=86 data-nosnippet>86</a>
-<a href=#87 id=87 data-nosnippet>87</a><span class="doccomment">/// 
`DefaultFileNameGenerator` used to generate file name for data file. The file 
name can be
-<a href=#88 id=88 data-nosnippet>88</a>/// passed to `LocationGenerator` to 
generate the location of the file.
-<a href=#89 id=89 data-nosnippet>89</a>/// The file name format is 
"{prefix}-{file_count}[-{suffix}].{file_format}".
-<a href=#90 id=90 data-nosnippet>90</a></span><span 
class="attr">#[derive(Clone, Debug)]
-<a href=#91 id=91 data-nosnippet>91</a></span><span class="kw">pub struct 
</span>DefaultFileNameGenerator {
-<a href=#92 id=92 data-nosnippet>92</a>    prefix: String,
-<a href=#93 id=93 data-nosnippet>93</a>    suffix: String,
-<a href=#94 id=94 data-nosnippet>94</a>    format: String,
-<a href=#95 id=95 data-nosnippet>95</a>    file_count: Arc&lt;AtomicU64&gt;,
-<a href=#96 id=96 data-nosnippet>96</a>}
-<a href=#97 id=97 data-nosnippet>97</a>
-<a href=#98 id=98 data-nosnippet>98</a><span class="kw">impl 
</span>DefaultFileNameGenerator {
-<a href=#99 id=99 data-nosnippet>99</a>    <span class="doccomment">/// Create 
a new `FileNameGenerator`.
-<a href=#100 id=100 data-nosnippet>100</a>    </span><span class="kw">pub fn 
</span>new(prefix: String, suffix: <span 
class="prelude-ty">Option</span>&lt;String&gt;, format: DataFileFormat) -&gt; 
<span class="self">Self </span>{
-<a href=#101 id=101 data-nosnippet>101</a>        <span class="kw">let 
</span>suffix = <span class="kw">if let </span><span 
class="prelude-val">Some</span>(suffix) = suffix {
-<a href=#102 id=102 data-nosnippet>102</a>            <span 
class="macro">format!</span>(<span class="string">"-{}"</span>, suffix)
-<a href=#103 id=103 data-nosnippet>103</a>        } <span class="kw">else 
</span>{
-<a href=#104 id=104 data-nosnippet>104</a>            <span 
class="string">""</span>.to_string()
-<a href=#105 id=105 data-nosnippet>105</a>        };
-<a href=#106 id=106 data-nosnippet>106</a>
-<a href=#107 id=107 data-nosnippet>107</a>        <span class="self">Self 
</span>{
-<a href=#108 id=108 data-nosnippet>108</a>            prefix,
-<a href=#109 id=109 data-nosnippet>109</a>            suffix,
-<a href=#110 id=110 data-nosnippet>110</a>            format: 
format.to_string(),
-<a href=#111 id=111 data-nosnippet>111</a>            file_count: 
Arc::new(AtomicU64::new(<span class="number">0</span>)),
-<a href=#112 id=112 data-nosnippet>112</a>        }
-<a href=#113 id=113 data-nosnippet>113</a>    }
-<a href=#114 id=114 data-nosnippet>114</a>}
-<a href=#115 id=115 data-nosnippet>115</a>
-<a href=#116 id=116 data-nosnippet>116</a><span class="kw">impl 
</span>FileNameGenerator <span class="kw">for </span>DefaultFileNameGenerator {
-<a href=#117 id=117 data-nosnippet>117</a>    <span class="kw">fn 
</span>generate_file_name(<span class="kw-2">&amp;</span><span 
class="self">self</span>) -&gt; String {
-<a href=#118 id=118 data-nosnippet>118</a>        <span class="kw">let 
</span>file_id = <span class="self">self
-<a href=#119 id=119 data-nosnippet>119</a>            </span>.file_count
-<a href=#120 id=120 data-nosnippet>120</a>            .fetch_add(<span 
class="number">1</span>, std::sync::atomic::Ordering::Relaxed);
-<a href=#121 id=121 data-nosnippet>121</a>        <span 
class="macro">format!</span>(
-<a href=#122 id=122 data-nosnippet>122</a>            <span 
class="string">"{}-{:05}{}.{}"</span>,
-<a href=#123 id=123 data-nosnippet>123</a>            <span 
class="self">self</span>.prefix, file_id, <span 
class="self">self</span>.suffix, <span class="self">self</span>.format
-<a href=#124 id=124 data-nosnippet>124</a>        )
-<a href=#125 id=125 data-nosnippet>125</a>    }
-<a href=#126 id=126 data-nosnippet>126</a>}
-<a href=#127 id=127 data-nosnippet>127</a>
-<a href=#128 id=128 data-nosnippet>128</a><span class="attr">#[cfg(test)]
-<a href=#129 id=129 data-nosnippet>129</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">mod 
</span>test {
-<a href=#130 id=130 data-nosnippet>130</a>    <span class="kw">use 
</span>std::collections::HashMap;
+<a href=#49 id=49 data-nosnippet>49</a>        <span class="kw">let 
</span>prop = table_metadata.properties();
+<a href=#50 id=50 data-nosnippet>50</a>        <span class="kw">let 
</span>data_location = prop
+<a href=#51 id=51 data-nosnippet>51</a>            .get(WRITE_DATA_LOCATION)
+<a href=#52 id=52 data-nosnippet>52</a>            
.or(prop.get(WRITE_FOLDER_STORAGE_LOCATION));
+<a href=#53 id=53 data-nosnippet>53</a>        <span class="kw">let 
</span>dir_path = <span class="kw">if let </span><span 
class="prelude-val">Some</span>(data_location) = data_location {
+<a href=#54 id=54 data-nosnippet>54</a>            data_location.clone()
+<a href=#55 id=55 data-nosnippet>55</a>        } <span class="kw">else </span>{
+<a href=#56 id=56 data-nosnippet>56</a>            <span 
class="macro">format!</span>(<span class="string">"{}{}"</span>, 
table_location, DEFAULT_DATA_DIR)
+<a href=#57 id=57 data-nosnippet>57</a>        };
+<a href=#58 id=58 data-nosnippet>58</a>        <span 
class="prelude-val">Ok</span>(<span class="self">Self </span>{ dir_path })
+<a href=#59 id=59 data-nosnippet>59</a>    }
+<a href=#60 id=60 data-nosnippet>60</a>}
+<a href=#61 id=61 data-nosnippet>61</a>
+<a href=#62 id=62 data-nosnippet>62</a><span class="kw">impl 
</span>LocationGenerator <span class="kw">for </span>DefaultLocationGenerator {
+<a href=#63 id=63 data-nosnippet>63</a>    <span class="kw">fn 
</span>generate_location(<span class="kw-2">&amp;</span><span 
class="self">self</span>, file_name: <span class="kw-2">&amp;</span>str) -&gt; 
String {
+<a href=#64 id=64 data-nosnippet>64</a>        <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, <span 
class="self">self</span>.dir_path, file_name)
+<a href=#65 id=65 data-nosnippet>65</a>    }
+<a href=#66 id=66 data-nosnippet>66</a>}
+<a href=#67 id=67 data-nosnippet>67</a>
+<a href=#68 id=68 data-nosnippet>68</a><span class="doccomment">/// 
`FileNameGeneratorTrait` used to generate file name for data file. The file 
name can be passed to `LocationGenerator` to generate the location of the file.
+<a href=#69 id=69 data-nosnippet>69</a></span><span class="kw">pub trait 
</span>FileNameGenerator: Clone + Send + <span class="lifetime">'static </span>{
+<a href=#70 id=70 data-nosnippet>70</a>    <span class="doccomment">/// 
Generate a file name.
+<a href=#71 id=71 data-nosnippet>71</a>    </span><span class="kw">fn 
</span>generate_file_name(<span class="kw-2">&amp;</span><span 
class="self">self</span>) -&gt; String;
+<a href=#72 id=72 data-nosnippet>72</a>}
+<a href=#73 id=73 data-nosnippet>73</a>
+<a href=#74 id=74 data-nosnippet>74</a><span class="doccomment">/// 
`DefaultFileNameGenerator` used to generate file name for data file. The file 
name can be
+<a href=#75 id=75 data-nosnippet>75</a>/// passed to `LocationGenerator` to 
generate the location of the file.
+<a href=#76 id=76 data-nosnippet>76</a>/// The file name format is 
"{prefix}-{file_count}[-{suffix}].{file_format}".
+<a href=#77 id=77 data-nosnippet>77</a></span><span 
class="attr">#[derive(Clone, Debug)]
+<a href=#78 id=78 data-nosnippet>78</a></span><span class="kw">pub struct 
</span>DefaultFileNameGenerator {
+<a href=#79 id=79 data-nosnippet>79</a>    prefix: String,
+<a href=#80 id=80 data-nosnippet>80</a>    suffix: String,
+<a href=#81 id=81 data-nosnippet>81</a>    format: String,
+<a href=#82 id=82 data-nosnippet>82</a>    file_count: Arc&lt;AtomicU64&gt;,
+<a href=#83 id=83 data-nosnippet>83</a>}
+<a href=#84 id=84 data-nosnippet>84</a>
+<a href=#85 id=85 data-nosnippet>85</a><span class="kw">impl 
</span>DefaultFileNameGenerator {
+<a href=#86 id=86 data-nosnippet>86</a>    <span class="doccomment">/// Create 
a new `FileNameGenerator`.
+<a href=#87 id=87 data-nosnippet>87</a>    </span><span class="kw">pub fn 
</span>new(prefix: String, suffix: <span 
class="prelude-ty">Option</span>&lt;String&gt;, format: DataFileFormat) -&gt; 
<span class="self">Self </span>{
+<a href=#88 id=88 data-nosnippet>88</a>        <span class="kw">let 
</span>suffix = <span class="kw">if let </span><span 
class="prelude-val">Some</span>(suffix) = suffix {
+<a href=#89 id=89 data-nosnippet>89</a>            <span 
class="macro">format!</span>(<span class="string">"-{}"</span>, suffix)
+<a href=#90 id=90 data-nosnippet>90</a>        } <span class="kw">else </span>{
+<a href=#91 id=91 data-nosnippet>91</a>            <span 
class="string">""</span>.to_string()
+<a href=#92 id=92 data-nosnippet>92</a>        };
+<a href=#93 id=93 data-nosnippet>93</a>
+<a href=#94 id=94 data-nosnippet>94</a>        <span class="self">Self </span>{
+<a href=#95 id=95 data-nosnippet>95</a>            prefix,
+<a href=#96 id=96 data-nosnippet>96</a>            suffix,
+<a href=#97 id=97 data-nosnippet>97</a>            format: format.to_string(),
+<a href=#98 id=98 data-nosnippet>98</a>            file_count: 
Arc::new(AtomicU64::new(<span class="number">0</span>)),
+<a href=#99 id=99 data-nosnippet>99</a>        }
+<a href=#100 id=100 data-nosnippet>100</a>    }
+<a href=#101 id=101 data-nosnippet>101</a>}
+<a href=#102 id=102 data-nosnippet>102</a>
+<a href=#103 id=103 data-nosnippet>103</a><span class="kw">impl 
</span>FileNameGenerator <span class="kw">for </span>DefaultFileNameGenerator {
+<a href=#104 id=104 data-nosnippet>104</a>    <span class="kw">fn 
</span>generate_file_name(<span class="kw-2">&amp;</span><span 
class="self">self</span>) -&gt; String {
+<a href=#105 id=105 data-nosnippet>105</a>        <span class="kw">let 
</span>file_id = <span class="self">self
+<a href=#106 id=106 data-nosnippet>106</a>            </span>.file_count
+<a href=#107 id=107 data-nosnippet>107</a>            .fetch_add(<span 
class="number">1</span>, std::sync::atomic::Ordering::Relaxed);
+<a href=#108 id=108 data-nosnippet>108</a>        <span 
class="macro">format!</span>(
+<a href=#109 id=109 data-nosnippet>109</a>            <span 
class="string">"{}-{:05}{}.{}"</span>,
+<a href=#110 id=110 data-nosnippet>110</a>            <span 
class="self">self</span>.prefix, file_id, <span 
class="self">self</span>.suffix, <span class="self">self</span>.format
+<a href=#111 id=111 data-nosnippet>111</a>        )
+<a href=#112 id=112 data-nosnippet>112</a>    }
+<a href=#113 id=113 data-nosnippet>113</a>}
+<a href=#114 id=114 data-nosnippet>114</a>
+<a href=#115 id=115 data-nosnippet>115</a><span class="attr">#[cfg(test)]
+<a href=#116 id=116 data-nosnippet>116</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">mod 
</span>test {
+<a href=#117 id=117 data-nosnippet>117</a>    <span class="kw">use 
</span>std::collections::HashMap;
+<a href=#118 id=118 data-nosnippet>118</a>
+<a href=#119 id=119 data-nosnippet>119</a>    <span class="kw">use 
</span>uuid::Uuid;
+<a href=#120 id=120 data-nosnippet>120</a>
+<a href=#121 id=121 data-nosnippet>121</a>    <span class="kw">use 
</span><span class="kw">super</span>::LocationGenerator;
+<a href=#122 id=122 data-nosnippet>122</a>    <span class="kw">use 
</span><span class="kw">crate</span>::spec::{FormatVersion, PartitionSpec, 
StructType, TableMetadata};
+<a href=#123 id=123 data-nosnippet>123</a>    <span class="kw">use 
</span><span class="kw">crate</span>::writer::file_writer::location_generator::{
+<a href=#124 id=124 data-nosnippet>124</a>        FileNameGenerator, 
WRITE_DATA_LOCATION, WRITE_FOLDER_STORAGE_LOCATION,
+<a href=#125 id=125 data-nosnippet>125</a>    };
+<a href=#126 id=126 data-nosnippet>126</a>
+<a href=#127 id=127 data-nosnippet>127</a>    <span 
class="attr">#[derive(Clone)]
+<a href=#128 id=128 data-nosnippet>128</a>    </span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct 
</span>MockLocationGenerator {
+<a href=#129 id=129 data-nosnippet>129</a>        root: String,
+<a href=#130 id=130 data-nosnippet>130</a>    }
 <a href=#131 id=131 data-nosnippet>131</a>
-<a href=#132 id=132 data-nosnippet>132</a>    <span class="kw">use 
</span>uuid::Uuid;
-<a href=#133 id=133 data-nosnippet>133</a>
-<a href=#134 id=134 data-nosnippet>134</a>    <span class="kw">use 
</span><span class="kw">super</span>::LocationGenerator;
-<a href=#135 id=135 data-nosnippet>135</a>    <span class="kw">use 
</span><span class="kw">crate</span>::spec::{FormatVersion, PartitionSpec, 
StructType, TableMetadata};
-<a href=#136 id=136 data-nosnippet>136</a>    <span class="kw">use 
</span><span class="kw">crate</span>::writer::file_writer::location_generator::{
-<a href=#137 id=137 data-nosnippet>137</a>        FileNameGenerator, 
WRITE_DATA_LOCATION, WRITE_FOLDER_STORAGE_LOCATION,
-<a href=#138 id=138 data-nosnippet>138</a>    };
-<a href=#139 id=139 data-nosnippet>139</a>
-<a href=#140 id=140 data-nosnippet>140</a>    <span 
class="attr">#[derive(Clone)]
-<a href=#141 id=141 data-nosnippet>141</a>    </span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct 
</span>MockLocationGenerator {
-<a href=#142 id=142 data-nosnippet>142</a>        root: String,
-<a href=#143 id=143 data-nosnippet>143</a>    }
-<a href=#144 id=144 data-nosnippet>144</a>
-<a href=#145 id=145 data-nosnippet>145</a>    <span class="kw">impl 
</span>MockLocationGenerator {
-<a href=#146 id=146 data-nosnippet>146</a>        <span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn 
</span>new(root: String) -&gt; <span class="self">Self </span>{
-<a href=#147 id=147 data-nosnippet>147</a>            <span class="self">Self 
</span>{ root }
-<a href=#148 id=148 data-nosnippet>148</a>        }
-<a href=#149 id=149 data-nosnippet>149</a>    }
-<a href=#150 id=150 data-nosnippet>150</a>
-<a href=#151 id=151 data-nosnippet>151</a>    <span class="kw">impl 
</span>LocationGenerator <span class="kw">for </span>MockLocationGenerator {
-<a href=#152 id=152 data-nosnippet>152</a>        <span class="kw">fn 
</span>generate_location(<span class="kw-2">&amp;</span><span 
class="self">self</span>, file_name: <span class="kw-2">&amp;</span>str) -&gt; 
String {
-<a href=#153 id=153 data-nosnippet>153</a>            <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, <span 
class="self">self</span>.root, file_name)
-<a href=#154 id=154 data-nosnippet>154</a>        }
-<a href=#155 id=155 data-nosnippet>155</a>    }
-<a href=#156 id=156 data-nosnippet>156</a>
-<a href=#157 id=157 data-nosnippet>157</a>    <span class="attr">#[test]
-<a href=#158 id=158 data-nosnippet>158</a>    </span><span class="kw">fn 
</span>test_default_location_generate() {
-<a href=#159 id=159 data-nosnippet>159</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>table_metadata = TableMetadata {
-<a href=#160 id=160 data-nosnippet>160</a>            format_version: 
FormatVersion::V2,
-<a href=#161 id=161 data-nosnippet>161</a>            table_uuid: 
Uuid::parse_str(<span 
class="string">"fb072c92-a02b-11e9-ae9c-1bb7bc9eca94"</span>).unwrap(),
-<a href=#162 id=162 data-nosnippet>162</a>            location: <span 
class="string">"s3://data.db/table"</span>.to_string(),
-<a href=#163 id=163 data-nosnippet>163</a>            last_updated_ms: <span 
class="number">1515100955770</span>,
-<a href=#164 id=164 data-nosnippet>164</a>            last_column_id: <span 
class="number">1</span>,
-<a href=#165 id=165 data-nosnippet>165</a>            schemas: HashMap::new(),
-<a href=#166 id=166 data-nosnippet>166</a>            current_schema_id: <span 
class="number">1</span>,
-<a href=#167 id=167 data-nosnippet>167</a>            partition_specs: 
HashMap::new(),
-<a href=#168 id=168 data-nosnippet>168</a>            default_spec: 
PartitionSpec::unpartition_spec().into(),
-<a href=#169 id=169 data-nosnippet>169</a>            default_partition_type: 
StructType::new(<span class="macro">vec!</span>[]),
-<a href=#170 id=170 data-nosnippet>170</a>            last_partition_id: <span 
class="number">1000</span>,
-<a href=#171 id=171 data-nosnippet>171</a>            default_sort_order_id: 
<span class="number">0</span>,
-<a href=#172 id=172 data-nosnippet>172</a>            sort_orders: 
HashMap::from_iter(<span class="macro">vec!</span>[]),
-<a href=#173 id=173 data-nosnippet>173</a>            snapshots: 
HashMap::default(),
-<a href=#174 id=174 data-nosnippet>174</a>            current_snapshot_id: 
<span class="prelude-val">None</span>,
-<a href=#175 id=175 data-nosnippet>175</a>            last_sequence_number: 
<span class="number">1</span>,
-<a href=#176 id=176 data-nosnippet>176</a>            properties: 
HashMap::new(),
-<a href=#177 id=177 data-nosnippet>177</a>            snapshot_log: Vec::new(),
-<a href=#178 id=178 data-nosnippet>178</a>            metadata_log: <span 
class="macro">vec!</span>[],
-<a href=#179 id=179 data-nosnippet>179</a>            refs: HashMap::new(),
-<a href=#180 id=180 data-nosnippet>180</a>            statistics: 
HashMap::new(),
-<a href=#181 id=181 data-nosnippet>181</a>            partition_statistics: 
HashMap::new(),
-<a href=#182 id=182 data-nosnippet>182</a>            encryption_keys: 
HashMap::new(),
-<a href=#183 id=183 data-nosnippet>183</a>        };
+<a href=#132 id=132 data-nosnippet>132</a>    <span class="kw">impl 
</span>MockLocationGenerator {
+<a href=#133 id=133 data-nosnippet>133</a>        <span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn 
</span>new(root: String) -&gt; <span class="self">Self </span>{
+<a href=#134 id=134 data-nosnippet>134</a>            <span class="self">Self 
</span>{ root }
+<a href=#135 id=135 data-nosnippet>135</a>        }
+<a href=#136 id=136 data-nosnippet>136</a>    }
+<a href=#137 id=137 data-nosnippet>137</a>
+<a href=#138 id=138 data-nosnippet>138</a>    <span class="kw">impl 
</span>LocationGenerator <span class="kw">for </span>MockLocationGenerator {
+<a href=#139 id=139 data-nosnippet>139</a>        <span class="kw">fn 
</span>generate_location(<span class="kw-2">&amp;</span><span 
class="self">self</span>, file_name: <span class="kw-2">&amp;</span>str) -&gt; 
String {
+<a href=#140 id=140 data-nosnippet>140</a>            <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, <span 
class="self">self</span>.root, file_name)
+<a href=#141 id=141 data-nosnippet>141</a>        }
+<a href=#142 id=142 data-nosnippet>142</a>    }
+<a href=#143 id=143 data-nosnippet>143</a>
+<a href=#144 id=144 data-nosnippet>144</a>    <span class="attr">#[test]
+<a href=#145 id=145 data-nosnippet>145</a>    </span><span class="kw">fn 
</span>test_default_location_generate() {
+<a href=#146 id=146 data-nosnippet>146</a>        <span class="kw">let 
</span><span class="kw-2">mut </span>table_metadata = TableMetadata {
+<a href=#147 id=147 data-nosnippet>147</a>            format_version: 
FormatVersion::V2,
+<a href=#148 id=148 data-nosnippet>148</a>            table_uuid: 
Uuid::parse_str(<span 
class="string">"fb072c92-a02b-11e9-ae9c-1bb7bc9eca94"</span>).unwrap(),
+<a href=#149 id=149 data-nosnippet>149</a>            location: <span 
class="string">"s3://data.db/table"</span>.to_string(),
+<a href=#150 id=150 data-nosnippet>150</a>            last_updated_ms: <span 
class="number">1515100955770</span>,
+<a href=#151 id=151 data-nosnippet>151</a>            last_column_id: <span 
class="number">1</span>,
+<a href=#152 id=152 data-nosnippet>152</a>            schemas: HashMap::new(),
+<a href=#153 id=153 data-nosnippet>153</a>            current_schema_id: <span 
class="number">1</span>,
+<a href=#154 id=154 data-nosnippet>154</a>            partition_specs: 
HashMap::new(),
+<a href=#155 id=155 data-nosnippet>155</a>            default_spec: 
PartitionSpec::unpartition_spec().into(),
+<a href=#156 id=156 data-nosnippet>156</a>            default_partition_type: 
StructType::new(<span class="macro">vec!</span>[]),
+<a href=#157 id=157 data-nosnippet>157</a>            last_partition_id: <span 
class="number">1000</span>,
+<a href=#158 id=158 data-nosnippet>158</a>            default_sort_order_id: 
<span class="number">0</span>,
+<a href=#159 id=159 data-nosnippet>159</a>            sort_orders: 
HashMap::from_iter(<span class="macro">vec!</span>[]),
+<a href=#160 id=160 data-nosnippet>160</a>            snapshots: 
HashMap::default(),
+<a href=#161 id=161 data-nosnippet>161</a>            current_snapshot_id: 
<span class="prelude-val">None</span>,
+<a href=#162 id=162 data-nosnippet>162</a>            last_sequence_number: 
<span class="number">1</span>,
+<a href=#163 id=163 data-nosnippet>163</a>            properties: 
HashMap::new(),
+<a href=#164 id=164 data-nosnippet>164</a>            snapshot_log: Vec::new(),
+<a href=#165 id=165 data-nosnippet>165</a>            metadata_log: <span 
class="macro">vec!</span>[],
+<a href=#166 id=166 data-nosnippet>166</a>            refs: HashMap::new(),
+<a href=#167 id=167 data-nosnippet>167</a>            statistics: 
HashMap::new(),
+<a href=#168 id=168 data-nosnippet>168</a>            partition_statistics: 
HashMap::new(),
+<a href=#169 id=169 data-nosnippet>169</a>            encryption_keys: 
HashMap::new(),
+<a href=#170 id=170 data-nosnippet>170</a>        };
+<a href=#171 id=171 data-nosnippet>171</a>
+<a href=#172 id=172 data-nosnippet>172</a>        <span class="kw">let 
</span>file_name_genertaor = <span 
class="kw">super</span>::DefaultFileNameGenerator::new(
+<a href=#173 id=173 data-nosnippet>173</a>            <span 
class="string">"part"</span>.to_string(),
+<a href=#174 id=174 data-nosnippet>174</a>            <span 
class="prelude-val">Some</span>(<span class="string">"test"</span>.to_string()),
+<a href=#175 id=175 data-nosnippet>175</a>            <span 
class="kw">crate</span>::spec::DataFileFormat::Parquet,
+<a href=#176 id=176 data-nosnippet>176</a>        );
+<a href=#177 id=177 data-nosnippet>177</a>
+<a href=#178 id=178 data-nosnippet>178</a>        <span class="comment">// 
test default data location
+<a href=#179 id=179 data-nosnippet>179</a>        </span><span class="kw">let 
</span>location_generator =
+<a href=#180 id=180 data-nosnippet>180</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
+<a href=#181 id=181 data-nosnippet>181</a>        <span class="kw">let 
</span>location =
+<a href=#182 id=182 data-nosnippet>182</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
+<a href=#183 id=183 data-nosnippet>183</a>        <span 
class="macro">assert_eq!</span>(location, <span 
class="string">"s3://data.db/table/data/part-00000-test.parquet"</span>);
 <a href=#184 id=184 data-nosnippet>184</a>
-<a href=#185 id=185 data-nosnippet>185</a>        <span class="kw">let 
</span>file_name_genertaor = <span 
class="kw">super</span>::DefaultFileNameGenerator::new(
-<a href=#186 id=186 data-nosnippet>186</a>            <span 
class="string">"part"</span>.to_string(),
-<a href=#187 id=187 data-nosnippet>187</a>            <span 
class="prelude-val">Some</span>(<span class="string">"test"</span>.to_string()),
-<a href=#188 id=188 data-nosnippet>188</a>            <span 
class="kw">crate</span>::spec::DataFileFormat::Parquet,
+<a href=#185 id=185 data-nosnippet>185</a>        <span class="comment">// 
test custom data location
+<a href=#186 id=186 data-nosnippet>186</a>        
</span>table_metadata.properties.insert(
+<a href=#187 id=187 data-nosnippet>187</a>            
WRITE_FOLDER_STORAGE_LOCATION.to_string(),
+<a href=#188 id=188 data-nosnippet>188</a>            <span 
class="string">"s3://data.db/table/data_1"</span>.to_string(),
 <a href=#189 id=189 data-nosnippet>189</a>        );
-<a href=#190 id=190 data-nosnippet>190</a>
-<a href=#191 id=191 data-nosnippet>191</a>        <span class="comment">// 
test default data location
-<a href=#192 id=192 data-nosnippet>192</a>        </span><span class="kw">let 
</span>location_generator =
-<a href=#193 id=193 data-nosnippet>193</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
-<a href=#194 id=194 data-nosnippet>194</a>        <span class="kw">let 
</span>location =
-<a href=#195 id=195 data-nosnippet>195</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
-<a href=#196 id=196 data-nosnippet>196</a>        <span 
class="macro">assert_eq!</span>(location, <span 
class="string">"s3://data.db/table/data/part-00000-test.parquet"</span>);
-<a href=#197 id=197 data-nosnippet>197</a>
-<a href=#198 id=198 data-nosnippet>198</a>        <span class="comment">// 
test custom data location
-<a href=#199 id=199 data-nosnippet>199</a>        
</span>table_metadata.properties.insert(
-<a href=#200 id=200 data-nosnippet>200</a>            
WRITE_FOLDER_STORAGE_LOCATION.to_string(),
-<a href=#201 id=201 data-nosnippet>201</a>            <span 
class="string">"s3://data.db/table/data_1"</span>.to_string(),
+<a href=#190 id=190 data-nosnippet>190</a>        <span class="kw">let 
</span>location_generator =
+<a href=#191 id=191 data-nosnippet>191</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
+<a href=#192 id=192 data-nosnippet>192</a>        <span class="kw">let 
</span>location =
+<a href=#193 id=193 data-nosnippet>193</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
+<a href=#194 id=194 data-nosnippet>194</a>        <span 
class="macro">assert_eq!</span>(
+<a href=#195 id=195 data-nosnippet>195</a>            location,
+<a href=#196 id=196 data-nosnippet>196</a>            <span 
class="string">"s3://data.db/table/data_1/part-00001-test.parquet"
+<a href=#197 id=197 data-nosnippet>197</a>        </span>);
+<a href=#198 id=198 data-nosnippet>198</a>
+<a href=#199 id=199 data-nosnippet>199</a>        
table_metadata.properties.insert(
+<a href=#200 id=200 data-nosnippet>200</a>            
WRITE_DATA_LOCATION.to_string(),
+<a href=#201 id=201 data-nosnippet>201</a>            <span 
class="string">"s3://data.db/table/data_2"</span>.to_string(),
 <a href=#202 id=202 data-nosnippet>202</a>        );
 <a href=#203 id=203 data-nosnippet>203</a>        <span class="kw">let 
</span>location_generator =
 <a href=#204 id=204 data-nosnippet>204</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
@@ -206,29 +206,18 @@
 <a href=#206 id=206 data-nosnippet>206</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
 <a href=#207 id=207 data-nosnippet>207</a>        <span 
class="macro">assert_eq!</span>(
 <a href=#208 id=208 data-nosnippet>208</a>            location,
-<a href=#209 id=209 data-nosnippet>209</a>            <span 
class="string">"s3://data.db/table/data_1/part-00001-test.parquet"
+<a href=#209 id=209 data-nosnippet>209</a>            <span 
class="string">"s3://data.db/table/data_2/part-00002-test.parquet"
 <a href=#210 id=210 data-nosnippet>210</a>        </span>);
 <a href=#211 id=211 data-nosnippet>211</a>
 <a href=#212 id=212 data-nosnippet>212</a>        
table_metadata.properties.insert(
 <a href=#213 id=213 data-nosnippet>213</a>            
WRITE_DATA_LOCATION.to_string(),
-<a href=#214 id=214 data-nosnippet>214</a>            <span 
class="string">"s3://data.db/table/data_2"</span>.to_string(),
-<a href=#215 id=215 data-nosnippet>215</a>        );
-<a href=#216 id=216 data-nosnippet>216</a>        <span class="kw">let 
</span>location_generator =
-<a href=#217 id=217 data-nosnippet>217</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
-<a href=#218 id=218 data-nosnippet>218</a>        <span class="kw">let 
</span>location =
-<a href=#219 id=219 data-nosnippet>219</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
-<a href=#220 id=220 data-nosnippet>220</a>        <span 
class="macro">assert_eq!</span>(
-<a href=#221 id=221 data-nosnippet>221</a>            location,
-<a href=#222 id=222 data-nosnippet>222</a>            <span 
class="string">"s3://data.db/table/data_2/part-00002-test.parquet"
-<a href=#223 id=223 data-nosnippet>223</a>        </span>);
-<a href=#224 id=224 data-nosnippet>224</a>
-<a href=#225 id=225 data-nosnippet>225</a>        <span class="comment">// 
test invalid data location
-<a href=#226 id=226 data-nosnippet>226</a>        
</span>table_metadata.properties.insert(
-<a href=#227 id=227 data-nosnippet>227</a>            
WRITE_DATA_LOCATION.to_string(),
-<a href=#228 id=228 data-nosnippet>228</a>            <span class="comment">// 
invalid table location
-<a href=#229 id=229 data-nosnippet>229</a>            </span><span 
class="string">"s3://data.db/data_3"</span>.to_string(),
-<a href=#230 id=230 data-nosnippet>230</a>        );
-<a href=#231 id=231 data-nosnippet>231</a>        <span class="kw">let 
</span>location_generator = <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone());
-<a href=#232 id=232 data-nosnippet>232</a>        <span 
class="macro">assert!</span>(location_generator.is_err());
-<a href=#233 id=233 data-nosnippet>233</a>    }
-<a href=#234 id=234 
data-nosnippet>234</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file
+<a href=#214 id=214 data-nosnippet>214</a>            <span class="comment">// 
invalid table location
+<a href=#215 id=215 data-nosnippet>215</a>            </span><span 
class="string">"s3://data.db/data_3"</span>.to_string(),
+<a href=#216 id=216 data-nosnippet>216</a>        );
+<a href=#217 id=217 data-nosnippet>217</a>        <span class="kw">let 
</span>location_generator =
+<a href=#218 id=218 data-nosnippet>218</a>            <span 
class="kw">super</span>::DefaultLocationGenerator::new(table_metadata.clone()).unwrap();
+<a href=#219 id=219 data-nosnippet>219</a>        <span class="kw">let 
</span>location =
+<a href=#220 id=220 data-nosnippet>220</a>            
location_generator.generate_location(<span 
class="kw-2">&amp;</span>file_name_genertaor.generate_file_name());
+<a href=#221 id=221 data-nosnippet>221</a>        <span 
class="macro">assert_eq!</span>(location, <span 
class="string">"s3://data.db/data_3/part-00003-test.parquet"</span>);
+<a href=#222 id=222 data-nosnippet>222</a>    }
+<a href=#223 id=223 
data-nosnippet>223</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file

Reply via email to