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><<a class="struct"
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"
title="struct alloc::string::String">String</a>>,
format: <a class="enum" href="../../../spec/enum.DataFileFormat.html"
title="enum iceberg::spec::DataFileFormat">DataFileFormat</a>,
) -> 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>(&self) -> &(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>(&self) -> <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>(&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>(&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>(&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) -> <span
class="prelude-ty">Result</span><<span class="self">Self</span>> {
<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">&</span><span
class="self">self</span>, file_name: <span class="kw-2">&</span>str) ->
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">&</span><span
class="self">self</span>) -> 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<AtomicU64>,
-<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><String>, format: DataFileFormat) ->
<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">&</span><span
class="self">self</span>) -> 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">&</span><span
class="self">self</span>, file_name: <span class="kw-2">&</span>str) ->
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">&</span><span
class="self">self</span>) -> 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<AtomicU64>,
+<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><String>, format: DataFileFormat) ->
<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">&</span><span
class="self">self</span>) -> 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) -> <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">&</span><span
class="self">self</span>, file_name: <span class="kw-2">&</span>str) ->
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) -> <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">&</span><span
class="self">self</span>, file_name: <span class="kw-2">&</span>str) ->
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">&</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">&</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">&</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">&</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">&</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">&</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