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

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 2c438a67ffa deploy: 883c13ae2177f9b029452df5cc9d9c119fa989d3
2c438a67ffa is described below

commit 2c438a67ffadbf620aaed361647554797a157bd4
Author: tustvold <[email protected]>
AuthorDate: Mon Apr 15 12:00:49 2024 +0000

    deploy: 883c13ae2177f9b029452df5cc9d9c119fa989d3
---
 arrow/array/trait.RecordBatchReader.html        |  12 +-
 arrow/array/trait.RecordBatchWriter.html        |   6 +-
 arrow/datatypes/struct.Field.html               |   4 +-
 arrow/index.html                                |   6 +-
 arrow/record_batch/trait.RecordBatchReader.html |  12 +-
 arrow/record_batch/trait.RecordBatchWriter.html |   6 +-
 parquet/arrow/arrow_reader/index.html           |   2 +-
 src/parquet/arrow/arrow_reader/mod.rs.html      | 248 +++++++++++++++++++++++-
 8 files changed, 270 insertions(+), 26 deletions(-)

diff --git a/arrow/array/trait.RecordBatchReader.html 
b/arrow/array/trait.RecordBatchReader.html
index 635ab05a3d9..d8a2376e5c9 100644
--- a/arrow/array/trait.RecordBatchReader.html
+++ b/arrow/array/trait.RecordBatchReader.html
@@ -11,10 +11,10 @@
 reader should have the same schema as returned from this method.</p>
 </div></details></div><h2 id="provided-methods" 
class="section-header">Provided Methods<a href="#provided-methods" 
class="anchor">§</a></h2><div class="methods"><details class="toggle 
method-toggle" open><summary><section id="method.next_batch" class="method"><h4 
class="code-header">fn <a href="#method.next_batch" 
class="fn">next_batch</a>(&amp;mut self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a [...]
 </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-IntoPyArrow-for-Box%3Cdyn+RecordBatchReader+%2B+Send%3E" 
class="impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#448-462">source</a><a 
href="#impl-IntoPyArrow-for-Box%3Cdyn+RecordBatchReader+%2B+Send%3E"  [...]
-</div><div class="impl-items"><section id="method.into_pyarrow" class="method 
trait-impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#451-461">source</a><a 
href="#method.into_pyarrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="../pyarrow/trait.IntoPyArrow.html#tymethod.into_pyarrow" 
class="fn">into_pyarrow</a>(self, py: Python&lt;'_&gt;) -&gt; 
PyResult&lt;PyObject&gt;</h4></section></div></details></div><h2 
id="foreign-impls" class="section-header">Impleme [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Seek.html"; title="trait 
std::io::Seek">Seek</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/reader.rs.html#1119">source</a><a 
href="#method.schema" class="anchor">§</a><h4 class=" [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-1" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/reader.rs.html#1351">source</a><a 
href="#method.schema-1" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a>(&amp;self) - [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-2" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/reader/mod.rs.html#349">source</a><a 
href="#method.schema-2" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a [...]
-    R: <a class="trait" href="../record_batch/trait.RecordBatchReader.html" 
title="trait arrow::record_batch::RecordBatchReader">RecordBatchReader</a> + 
?<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"><section id="method.schema-3" class="method trait-impl"><a 
href="#method.schema-3" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</ [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-4" class="method trait-impl"><a 
href="#method.schema-4" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a [...]
+</div><div class="impl-items"><section id="method.into_pyarrow" class="method 
trait-impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#451-461">source</a><a 
href="#method.into_pyarrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="../pyarrow/trait.IntoPyArrow.html#tymethod.into_pyarrow" 
class="fn">into_pyarrow</a>(self, py: Python&lt;'_&gt;) -&gt; 
PyResult&lt;PyObject&gt;</h4></section></div></details></div><h2 
id="foreign-impls" class="section-header">Impleme [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/reader/mod.rs.html#349">source</a><a 
href="#method.schema" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a>(&a [...]
+    R: <a class="trait" href="../record_batch/trait.RecordBatchReader.html" 
title="trait arrow::record_batch::RecordBatchReader">RecordBatchReader</a> + 
?<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"><section id="method.schema-1" class="method trait-impl"><a 
href="#method.schema-1" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</ [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-2" class="method trait-impl"><a 
href="#method.schema-2" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Seek.html"; title="trait 
std::io::Seek">Seek</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-3" class="method trait-impl"><a 
href="#method.schema-3" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" hr [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-4" class="method trait-impl"><a 
href="#method.schema-4" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a class="s [...]
     I: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a 
class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="struct" 
href="../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>, <a class="enum" 
href="../error/ [...]
\ No newline at end of file
diff --git a/arrow/array/trait.RecordBatchWriter.html 
b/arrow/array/trait.RecordBatchWriter.html
index 6877e63e3ba..b7f045e815d 100644
--- a/arrow/array/trait.RecordBatchWriter.html
+++ b/arrow/array/trait.RecordBatchWriter.html
@@ -5,9 +5,9 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Trait for types that can write 
<code>RecordBatch</code>’s.</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.write" class="method"><h4 class="code-header">fn <a 
href="#tymethod.write" class="fn">write</a>(&amp;mut self, batch: &amp;<a 
class="struct" href="../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt; <a c [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.close" class="method"><h4 class="code-header">fn <a 
href="#tymethod.close" class="fn">close</a>(self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.unit.html";>()</a>, <a 
class="enum" href="../error/enum.ArrowError.html" title="enum a [...]
-</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section 
id="impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="impl"><a class="src 
rightside" href="../../src/arrow_ipc/writer.rs.html#898">source</a><a 
href="#impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;W&gt; <a class="trait" href= [...]
-    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/writer.rs.html#899">source</a><a href="#method.write" 
class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&amp;mut self, bat [...]
-    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-1" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/writer.rs.html#1044">source</a><a 
href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&amp;mut self [...]
+</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section 
id="impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="impl"><a 
href="#impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;W&gt; <a class="trait" 
href="../record_batch/trait.RecordBatchWriter.html" title="trait 
arrow::record_batch:: [...]
+    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write" class="method trait-impl"><a 
href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt [...]
+    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-1" class="method trait-impl"><a 
href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>)  [...]
     W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-2" class="method trait-impl"><a 
href="#method.write-2" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>)  [...]
     W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,
     F: <a class="trait" href="../../arrow_json/writer/trait.JsonFormat.html" 
title="trait 
arrow_json::writer::JsonFormat">JsonFormat</a>,</div></h3></section></summary><div
 class="impl-items"><section id="method.write-3" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/writer.rs.html#819">source</a><a 
href="#method.write-3" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&am [...]
\ No newline at end of file
diff --git a/arrow/datatypes/struct.Field.html 
b/arrow/datatypes/struct.Field.html
index 8a78c0f2276..b7ca1f7cbe0 100644
--- a/arrow/datatypes/struct.Field.html
+++ b/arrow/datatypes/struct.Field.html
@@ -158,8 +158,8 @@
     __deserializer: __D
 ) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="struct" 
href="struct.Field.html" title="struct arrow::datatypes::Field">Field</a>, 
&lt;__D as <a class="trait" 
href="https://docs.rs/serde/1.0.197/serde/de/trait.Deserializer.html"; 
title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;&gt;::<a 
class="associatedtype" 
href="https://docs.rs/serde/1.0.197/serde/de/trait.Deserialize [...]
     __D: <a class="trait" 
href="https://docs.rs/serde/1.0.197/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div
 class='docblock'>Deserialize this value from the given Serde deserializer. <a 
href="https://docs.rs/serde/1.0.197/serde/de/trait.Deserialize.html#tymethod.deserialize";>Read
 more</a></div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Displ [...]
-    T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a 
class="struct" href="struct.Field.html" title="struct 
arrow::datatypes::Field">Field</a>&gt;,</div></h4></section></summary><div 
class='docblock'>Extends a collection with the contents of an iterator. <a 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html#tymet
 [...]
-</div><div class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.from" class="method trait-impl"><a class="src 
rightside" href="../../src/arrow_ipc/convert.rs.html#87">source</a><a 
href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from";
 class="fn">from</a>(field: <a class="struct" 
href="../../arrow_ipc/gen/Schema/struct.Field.html" title="struct arrow_ipc 
[...]
+    T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a 
class="struct" href="struct.Field.html" title="struct 
arrow::datatypes::Field">Field</a>&gt;,</div></h4></section></summary><div 
class='docblock'>Extends a collection with the contents of an iterator. <a 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.Extend.html#tymet
 [...]
+</div><div class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.from" class="method trait-impl"><a 
href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from";
 class="fn">from</a>(field: Field&lt;'_&gt;) -&gt; <a class="struct" 
href="struct.Field.html" title="struct 
arrow::datatypes::Field">Field</a></h4></section></summary><div 
class='docblock'>Converts to t [...]
     T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a 
class="struct" href="struct.Field.html" title="struct 
arrow::datatypes::Field">Field</a>&gt;,</div></h4></section></summary><div 
class='docblock'>Creates a value from an iterator. <a 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter";>
 [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,</div></h4></section></summary><div 
class='docblock'>Feeds this value into the given <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher"><code>Hasher</code></a>. <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash";>Read
 more</a></div></details><details class="toggle meth [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,
diff --git a/arrow/index.html b/arrow/index.html
index 3b3c7b8bbc0..2f35de5ffee 100644
--- a/arrow/index.html
+++ b/arrow/index.html
@@ -146,7 +146,7 @@ and a corresponding list of <a 
href="array/type.ArrayRef.html" title="type arrow
 <ul>
 <li>JSON: <a href="../arrow_json/reader/struct.Reader.html" title="struct 
arrow_json::reader::Reader"><code>Reader</code></a> and <a 
href="../arrow_json/writer/struct.Writer.html" title="struct 
arrow_json::writer::Writer"><code>Writer</code></a></li>
 <li>CSV: <a href="csv::reader::Reader"><code>Reader</code></a> and <a 
href="csv::writer::Writer"><code>Writer</code></a></li>
-<li>IPC: <a href="../arrow_ipc/reader/struct.StreamReader.html" title="struct 
arrow_ipc::reader::StreamReader"><code>Reader</code></a> and <a 
href="../arrow_ipc/writer/struct.FileWriter.html" title="struct 
arrow_ipc::writer::FileWriter"><code>Writer</code></a></li>
+<li>IPC: <a href="ipc::reader::StreamReader"><code>Reader</code></a> and <a 
href="ipc::writer::FileWriter"><code>Writer</code></a></li>
 </ul>
 <p>Parquet is published as a <a 
href="https://crates.io/crates/parquet";>separate crate</a></p>
 <h2 id="serde-compatibility"><a class="doc-anchor" 
href="#serde-compatibility">§</a>Serde Compatibility</h2>
@@ -196,7 +196,7 @@ the sub-crates they need.</p>
 <li>[<code>arrow-cast</code>][arrow_cast] - cast kernels for arrow arrays</li>
 <li>[<code>arrow-csv</code>][arrow_csv] - read/write CSV to arrow format</li>
 <li>[<code>arrow-data</code>][arrow_data] - the underlying data of arrow 
arrays</li>
-<li><a href="../arrow_ipc/index.html" title="mod 
arrow_ipc"><code>arrow-ipc</code></a> - read/write IPC to arrow format</li>
+<li>[<code>arrow-ipc</code>][arrow_ipc] - read/write IPC to arrow format</li>
 <li><a href="../arrow_json/index.html" title="mod 
arrow_json"><code>arrow-json</code></a> - read/write JSON to arrow format</li>
 <li>[<code>arrow-ord</code>][arrow_ord] - ordering kernels for arrow 
arrays</li>
 <li>[<code>arrow-row</code>][arrow_row] - comparable row format</li>
@@ -221,7 +221,7 @@ arrow’s use of unsafe, see <a 
href="https://github.com/apache/arrow-rs/tree/ma
 more sophisticated query processing workloads, consider checking out <a 
href="https://github.com/apache/arrow-datafusion";>DataFusion</a>. This
 orchestrates the primitives exported by this crate into an embeddable query 
engine, with
 SQL and DataFrame frontends, and heavily influences this crate’s roadmap.</p>
-</div></details><h2 id="reexports" class="section-header">Re-exports<a 
href="#reexports" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name" id="reexport.csv"><code>pub use arrow_csv as 
csv;</code></div></li><li><div class="item-name" id="reexport.ipc"><code>pub 
use <a class="mod" href="../arrow_ipc/index.html" title="mod 
arrow_ipc">arrow_ipc</a> as ipc;</code></div></li><li><div class="item-name" 
id="reexport.json"><code>pub use <a class="mod" href="../arrow_json/ [...]
+</div></details><h2 id="reexports" class="section-header">Re-exports<a 
href="#reexports" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name" id="reexport.csv"><code>pub use arrow_csv as 
csv;</code></div></li><li><div class="item-name" id="reexport.ipc"><code>pub 
use arrow_ipc as ipc;</code></div></li><li><div class="item-name" 
id="reexport.json"><code>pub use <a class="mod" href="../arrow_json/index.html" 
title="mod arrow_json">arrow_json</a> as json;</code></div>< [...]
 <a href="https://arrow.apache.org/docs/format/CDataInterface.html";>C Data 
Interface</a>
 and <a href="https://docs.rs/pyo3/latest/pyo3/";>pyo3</a>.
 For underlying implementation, see the <a href="ffi/index.html" title="mod 
arrow::ffi">ffi</a> module.</div></li><li><div class="item-name"><a class="mod" 
href="record_batch/index.html" title="mod 
arrow::record_batch">record_batch</a></div></li><li><div class="item-name"><a 
class="mod" href="temporal_conversions/index.html" title="mod 
arrow::temporal_conversions">temporal_conversions</a></div><div class="desc 
docblock-short">Conversion methods for dates and times.</div></li><li><div clas 
[...]
diff --git a/arrow/record_batch/trait.RecordBatchReader.html 
b/arrow/record_batch/trait.RecordBatchReader.html
index b21b347eaff..9e2df918d4f 100644
--- a/arrow/record_batch/trait.RecordBatchReader.html
+++ b/arrow/record_batch/trait.RecordBatchReader.html
@@ -11,10 +11,10 @@
 reader should have the same schema as returned from this method.</p>
 </div></details></div><h2 id="provided-methods" 
class="section-header">Provided Methods<a href="#provided-methods" 
class="anchor">§</a></h2><div class="methods"><details class="toggle 
method-toggle" open><summary><section id="method.next_batch" class="method"><h4 
class="code-header">fn <a href="#method.next_batch" 
class="fn">next_batch</a>(&amp;mut self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a [...]
 </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-IntoPyArrow-for-Box%3Cdyn+RecordBatchReader+%2B+Send%3E" 
class="impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#448-462">source</a><a 
href="#impl-IntoPyArrow-for-Box%3Cdyn+RecordBatchReader+%2B+Send%3E"  [...]
-</div><div class="impl-items"><section id="method.into_pyarrow" class="method 
trait-impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#451-461">source</a><a 
href="#method.into_pyarrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="../pyarrow/trait.IntoPyArrow.html#tymethod.into_pyarrow" 
class="fn">into_pyarrow</a>(self, py: Python&lt;'_&gt;) -&gt; 
PyResult&lt;PyObject&gt;</h4></section></div></details></div><h2 
id="foreign-impls" class="section-header">Impleme [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Seek.html"; title="trait 
std::io::Seek">Seek</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/reader.rs.html#1119">source</a><a 
href="#method.schema" class="anchor">§</a><h4 class=" [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-1" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/reader.rs.html#1351">source</a><a 
href="#method.schema-1" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a>(&amp;self) - [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-2" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/reader/mod.rs.html#349">source</a><a 
href="#method.schema-2" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a [...]
-    R: <a class="trait" href="trait.RecordBatchReader.html" title="trait 
arrow::record_batch::RecordBatchReader">RecordBatchReader</a> + ?<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"><section id="method.schema-3" class="method trait-impl"><a 
href="#method.schema-3" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -& [...]
-    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-4" class="method trait-impl"><a 
href="#method.schema-4" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a [...]
+</div><div class="impl-items"><section id="method.into_pyarrow" class="method 
trait-impl"><a class="src rightside" 
href="../../src/arrow/pyarrow.rs.html#451-461">source</a><a 
href="#method.into_pyarrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="../pyarrow/trait.IntoPyArrow.html#tymethod.into_pyarrow" 
class="fn">into_pyarrow</a>(self, py: Python&lt;'_&gt;) -&gt; 
PyResult&lt;PyObject&gt;</h4></section></div></details></div><h2 
id="foreign-impls" class="section-header">Impleme [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/reader/mod.rs.html#349">source</a><a 
href="#method.schema" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.reader.html#tymethod.schema" 
class="fn">schema</a>(&a [...]
+    R: <a class="trait" href="trait.RecordBatchReader.html" title="trait 
arrow::record_batch::RecordBatchReader">RecordBatchReader</a> + ?<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"><section id="method.schema-1" class="method trait-impl"><a 
href="#method.schema-1" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -& [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html"; title="trait 
std::io::BufRead">BufRead</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-2" class="method trait-impl"><a 
href="#method.schema-2" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Seek.html"; title="trait 
std::io::Seek">Seek</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-3" class="method trait-impl"><a 
href="#method.schema-3" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" hr [...]
+    R: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html"; title="trait 
std::io::Read">Read</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.schema-4" class="method trait-impl"><a 
href="#method.schema-4" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">schema</a>(&amp;self) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a class="s [...]
     I: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html";
 title="trait 
core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a 
class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="struct" 
href="struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>, <a class="enum" 
href="../error/enum.ArrowError. [...]
\ No newline at end of file
diff --git a/arrow/record_batch/trait.RecordBatchWriter.html 
b/arrow/record_batch/trait.RecordBatchWriter.html
index c28a22abd88..c64932ae89c 100644
--- a/arrow/record_batch/trait.RecordBatchWriter.html
+++ b/arrow/record_batch/trait.RecordBatchWriter.html
@@ -5,9 +5,9 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Trait for types that can write 
<code>RecordBatch</code>’s.</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.write" class="method"><h4 class="code-header">fn <a 
href="#tymethod.write" class="fn">write</a>(&amp;mut self, batch: &amp;<a 
class="struct" href="struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt; <a class="enum" href 
[...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.close" class="method"><h4 class="code-header">fn <a 
href="#tymethod.close" class="fn">close</a>(self) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.unit.html";>()</a>, <a 
class="enum" href="../error/enum.ArrowError.html" title="enum a [...]
-</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section 
id="impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="impl"><a class="src 
rightside" href="../../src/arrow_ipc/writer.rs.html#898">source</a><a 
href="#impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;W&gt; <a class="trait" href= [...]
-    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/writer.rs.html#899">source</a><a href="#method.write" 
class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&amp;mut self, bat [...]
-    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-1" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_ipc/writer.rs.html#1044">source</a><a 
href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_ipc/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&amp;mut self [...]
+</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section 
id="impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="impl"><a 
href="#impl-RecordBatchWriter-for-FileWriter%3CW%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;W&gt; <a class="trait" 
href="trait.RecordBatchWriter.html" title="trait 
arrow::record_batch::RecordBatchWrite [...]
+    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write" class="method trait-impl"><a 
href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt; <a class="enum [...]
+    W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-1" class="method trait-impl"><a 
href="#method.write-1" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt; <a class=" [...]
     W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,</div></h3></section></summary><div 
class="impl-items"><section id="method.write-2" class="method trait-impl"><a 
href="#method.write-2" class="anchor">§</a><h4 class="code-header">fn <a 
class="fn">write</a>(&amp;mut self, batch: &amp;<a class="struct" 
href="struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a>) -&gt; <a class=" [...]
     W: <a class="trait" 
href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html"; title="trait 
std::io::Write">Write</a>,
     F: <a class="trait" href="../../arrow_json/writer/trait.JsonFormat.html" 
title="trait 
arrow_json::writer::JsonFormat">JsonFormat</a>,</div></h3></section></summary><div
 class="impl-items"><section id="method.write-3" class="method trait-impl"><a 
class="src rightside" 
href="../../src/arrow_json/writer.rs.html#819">source</a><a 
href="#method.write-3" class="anchor">§</a><h4 class="code-header">fn <a 
href="../../arrow_json/foreigntype.writer.html#tymethod.write" 
class="fn">write</a>(&am [...]
\ No newline at end of file
diff --git a/parquet/arrow/arrow_reader/index.html 
b/parquet/arrow/arrow_reader/index.html
index db214776716..f3d69b765e5 100644
--- a/parquet/arrow/arrow_reader/index.html
+++ b/parquet/arrow/arrow_reader/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="Contains 
reader which reads parquet data into arrow 
`RecordBatch`"><title>parquet::arrow::arrow_reader - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843f
 [...]
+<!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="Contains 
reader which reads parquet data into arrow 
`RecordBatch`"><title>parquet::arrow::arrow_reader - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843f
 [...]
 </div></details><h2 id="modules" class="section-header">Modules<a 
href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name"><a class="mod" href="filter/index.html" title="mod 
parquet::arrow::arrow_reader::filter">filter</a><span title="Restricted 
Visibility">&nbsp;🔒</span> </div></li><li><div class="item-name"><a class="mod" 
href="selection/index.html" title="mod 
parquet::arrow::arrow_reader::selection">selection</a><span title="Restricted 
Visibility">&nb [...]
 to be used directly, instead you should use the specialization for the type of 
reader
 you wish to use</div></li><li><div class="item-name"><a class="struct" 
href="struct.ArrowReaderMetadata.html" title="struct 
parquet::arrow::arrow_reader::ArrowReaderMetadata">ArrowReaderMetadata</a></div><div
 class="desc docblock-short">The cheaply clone-able metadata necessary to 
construct a <a href="struct.ArrowReaderBuilder.html" title="struct 
parquet::arrow::arrow_reader::ArrowReaderBuilder"><code>ArrowReaderBuilder</code></a></div></li><li><div
 class="item-name"><a class="struct" hr [...]
diff --git a/src/parquet/arrow/arrow_reader/mod.rs.html 
b/src/parquet/arrow/arrow_reader/mod.rs.html
index 547427071df..69765d84a7c 100644
--- a/src/parquet/arrow/arrow_reader/mod.rs.html
+++ b/src/parquet/arrow/arrow_reader/mod.rs.html
@@ -3113,6 +3113,128 @@
 <a href="#3113" id="3113">3113</a>
 <a href="#3114" id="3114">3114</a>
 <a href="#3115" id="3115">3115</a>
+<a href="#3116" id="3116">3116</a>
+<a href="#3117" id="3117">3117</a>
+<a href="#3118" id="3118">3118</a>
+<a href="#3119" id="3119">3119</a>
+<a href="#3120" id="3120">3120</a>
+<a href="#3121" id="3121">3121</a>
+<a href="#3122" id="3122">3122</a>
+<a href="#3123" id="3123">3123</a>
+<a href="#3124" id="3124">3124</a>
+<a href="#3125" id="3125">3125</a>
+<a href="#3126" id="3126">3126</a>
+<a href="#3127" id="3127">3127</a>
+<a href="#3128" id="3128">3128</a>
+<a href="#3129" id="3129">3129</a>
+<a href="#3130" id="3130">3130</a>
+<a href="#3131" id="3131">3131</a>
+<a href="#3132" id="3132">3132</a>
+<a href="#3133" id="3133">3133</a>
+<a href="#3134" id="3134">3134</a>
+<a href="#3135" id="3135">3135</a>
+<a href="#3136" id="3136">3136</a>
+<a href="#3137" id="3137">3137</a>
+<a href="#3138" id="3138">3138</a>
+<a href="#3139" id="3139">3139</a>
+<a href="#3140" id="3140">3140</a>
+<a href="#3141" id="3141">3141</a>
+<a href="#3142" id="3142">3142</a>
+<a href="#3143" id="3143">3143</a>
+<a href="#3144" id="3144">3144</a>
+<a href="#3145" id="3145">3145</a>
+<a href="#3146" id="3146">3146</a>
+<a href="#3147" id="3147">3147</a>
+<a href="#3148" id="3148">3148</a>
+<a href="#3149" id="3149">3149</a>
+<a href="#3150" id="3150">3150</a>
+<a href="#3151" id="3151">3151</a>
+<a href="#3152" id="3152">3152</a>
+<a href="#3153" id="3153">3153</a>
+<a href="#3154" id="3154">3154</a>
+<a href="#3155" id="3155">3155</a>
+<a href="#3156" id="3156">3156</a>
+<a href="#3157" id="3157">3157</a>
+<a href="#3158" id="3158">3158</a>
+<a href="#3159" id="3159">3159</a>
+<a href="#3160" id="3160">3160</a>
+<a href="#3161" id="3161">3161</a>
+<a href="#3162" id="3162">3162</a>
+<a href="#3163" id="3163">3163</a>
+<a href="#3164" id="3164">3164</a>
+<a href="#3165" id="3165">3165</a>
+<a href="#3166" id="3166">3166</a>
+<a href="#3167" id="3167">3167</a>
+<a href="#3168" id="3168">3168</a>
+<a href="#3169" id="3169">3169</a>
+<a href="#3170" id="3170">3170</a>
+<a href="#3171" id="3171">3171</a>
+<a href="#3172" id="3172">3172</a>
+<a href="#3173" id="3173">3173</a>
+<a href="#3174" id="3174">3174</a>
+<a href="#3175" id="3175">3175</a>
+<a href="#3176" id="3176">3176</a>
+<a href="#3177" id="3177">3177</a>
+<a href="#3178" id="3178">3178</a>
+<a href="#3179" id="3179">3179</a>
+<a href="#3180" id="3180">3180</a>
+<a href="#3181" id="3181">3181</a>
+<a href="#3182" id="3182">3182</a>
+<a href="#3183" id="3183">3183</a>
+<a href="#3184" id="3184">3184</a>
+<a href="#3185" id="3185">3185</a>
+<a href="#3186" id="3186">3186</a>
+<a href="#3187" id="3187">3187</a>
+<a href="#3188" id="3188">3188</a>
+<a href="#3189" id="3189">3189</a>
+<a href="#3190" id="3190">3190</a>
+<a href="#3191" id="3191">3191</a>
+<a href="#3192" id="3192">3192</a>
+<a href="#3193" id="3193">3193</a>
+<a href="#3194" id="3194">3194</a>
+<a href="#3195" id="3195">3195</a>
+<a href="#3196" id="3196">3196</a>
+<a href="#3197" id="3197">3197</a>
+<a href="#3198" id="3198">3198</a>
+<a href="#3199" id="3199">3199</a>
+<a href="#3200" id="3200">3200</a>
+<a href="#3201" id="3201">3201</a>
+<a href="#3202" id="3202">3202</a>
+<a href="#3203" id="3203">3203</a>
+<a href="#3204" id="3204">3204</a>
+<a href="#3205" id="3205">3205</a>
+<a href="#3206" id="3206">3206</a>
+<a href="#3207" id="3207">3207</a>
+<a href="#3208" id="3208">3208</a>
+<a href="#3209" id="3209">3209</a>
+<a href="#3210" id="3210">3210</a>
+<a href="#3211" id="3211">3211</a>
+<a href="#3212" id="3212">3212</a>
+<a href="#3213" id="3213">3213</a>
+<a href="#3214" id="3214">3214</a>
+<a href="#3215" id="3215">3215</a>
+<a href="#3216" id="3216">3216</a>
+<a href="#3217" id="3217">3217</a>
+<a href="#3218" id="3218">3218</a>
+<a href="#3219" id="3219">3219</a>
+<a href="#3220" id="3220">3220</a>
+<a href="#3221" id="3221">3221</a>
+<a href="#3222" id="3222">3222</a>
+<a href="#3223" id="3223">3223</a>
+<a href="#3224" id="3224">3224</a>
+<a href="#3225" id="3225">3225</a>
+<a href="#3226" id="3226">3226</a>
+<a href="#3227" id="3227">3227</a>
+<a href="#3228" id="3228">3228</a>
+<a href="#3229" id="3229">3229</a>
+<a href="#3230" id="3230">3230</a>
+<a href="#3231" id="3231">3231</a>
+<a href="#3232" id="3232">3232</a>
+<a href="#3233" id="3233">3233</a>
+<a href="#3234" id="3234">3234</a>
+<a href="#3235" id="3235">3235</a>
+<a href="#3236" id="3236">3236</a>
+<a href="#3237" id="3237">3237</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the 
Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -3867,11 +3989,11 @@
     <span class="kw">use </span>arrow_array::<span class="kw-2">*</span>;
     <span class="kw">use </span>arrow_buffer::{i256, ArrowNativeType, Buffer};
     <span class="kw">use </span>arrow_data::ArrayDataBuilder;
-    <span class="kw">use </span>arrow_schema::{DataType <span class="kw">as 
</span>ArrowDataType, Field, Fields, Schema};
+    <span class="kw">use </span>arrow_schema::{ArrowError, DataType <span 
class="kw">as </span>ArrowDataType, Field, Fields, Schema};
     <span class="kw">use </span>arrow_select::concat::concat_batches;
 
     <span class="kw">use </span><span 
class="kw">crate</span>::arrow::arrow_reader::{
-        ArrowPredicateFn, ArrowReaderOptions, ParquetRecordBatchReader,
+        ArrowPredicateFn, ArrowReaderBuilder, ArrowReaderOptions, 
ParquetRecordBatchReader,
         ParquetRecordBatchReaderBuilder, RowFilter, RowSelection, RowSelector,
     };
     <span class="kw">use </span><span 
class="kw">crate</span>::arrow::schema::add_encoded_arrow_schema_to_metadata;
@@ -5284,6 +5406,128 @@
         );
     }
 
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_invalid_utf8_string_array() {
+        test_invalid_utf8_string_array_inner::&lt;i32&gt;();
+    }
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_invalid_utf8_large_string_array() {
+        test_invalid_utf8_string_array_inner::&lt;i64&gt;();
+    }
+    <span class="kw">fn </span>test_invalid_utf8_string_array_inner&lt;O: 
OffsetSizeTrait&gt;() {
+        <span class="kw">let </span>cases = [
+            (
+                invalid_utf8_first_char::&lt;O&gt;(),
+                <span class="string">"Parquet argument error: Parquet error: 
encountered non UTF-8 data"</span>,
+            ),
+            (
+                invalid_utf8_later_char::&lt;O&gt;(),
+                <span class="string">"Parquet argument error: Parquet error: 
encountered non UTF-8 data: invalid utf-8 sequence of 1 bytes from index 
6"</span>,
+            ),
+        ];
+        <span class="kw">for </span>(array, expected_error) <span 
class="kw">in </span>cases {
+            <span class="comment">// data is not valid utf8 we can not 
construct a correct StringArray
+            // safely, so purposely create an invalid StringArray
+            </span><span class="kw">let </span>array = <span class="kw">unsafe 
</span>{
+                GenericStringArray::&lt;O&gt;::new_unchecked(
+                    array.offsets().clone(),
+                    array.values().clone(),
+                    array.nulls().cloned(),
+                )
+            };
+            <span class="kw">let </span>data_type = array.data_type().clone();
+            <span class="kw">let </span>data = 
write_to_parquet(Arc::new(array));
+            <span class="kw">let </span>err = 
read_from_parquet(data).unwrap_err();
+            <span class="macro">assert_eq!</span>(err.to_string(), 
expected_error, <span class="string">"data type: {data_type:?}"</span>)
+        }
+    }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_invalid_utf8_string_view_array() {
+        <span class="kw">let </span>cases = [
+            (
+                invalid_utf8_first_char::&lt;i32&gt;(),
+                <span class="string">"Parquet argument error: Parquet error: 
encountered non UTF-8 data"</span>,
+            ),
+            (
+                invalid_utf8_later_char::&lt;i32&gt;(),
+                <span class="string">"Parquet argument error: Parquet error: 
encountered non UTF-8 data: invalid utf-8 sequence of 1 bytes from index 
6"</span>,
+            ),
+        ];
+        <span class="kw">for </span>(array, expected_error) <span 
class="kw">in </span>cases {
+            <span class="comment">// cast not yet implemented for BinaryView
+            // https://github.com/apache/arrow-rs/issues/5508
+            // so copy directly
+            </span><span class="kw">let </span><span class="kw-2">mut 
</span>builder = BinaryViewBuilder::with_capacity(<span 
class="number">100</span>);
+            <span class="kw">for </span>v <span class="kw">in 
</span>array.iter() {
+                <span class="kw">if let </span><span 
class="prelude-val">Some</span>(v) = v {
+                    builder.append_value(v);
+                } <span class="kw">else </span>{
+                    builder.append_null();
+                }
+            }
+            <span class="kw">let </span>array = builder.finish();
+
+            <span class="comment">// data is not valid utf8 we can not 
construct a correct StringArray
+            // safely, so purposely create an invalid StringArray
+            </span><span class="kw">let </span>array = <span class="kw">unsafe 
</span>{
+                StringViewArray::new_unchecked(
+                    array.views().clone(),
+                    array.data_buffers().to_vec(),
+                    array.nulls().cloned(),
+                )
+            };
+            <span class="kw">let </span>data_type = array.data_type().clone();
+            <span class="kw">let </span>data = 
write_to_parquet(Arc::new(array));
+            <span class="kw">let </span>err = 
read_from_parquet(data).unwrap_err();
+            <span class="macro">assert_eq!</span>(err.to_string(), 
expected_error, <span class="string">"data type: {data_type:?}"</span>)
+        }
+    }
+
+    <span class="doccomment">/// returns a BinaryArray with invalid UTF8 data 
in the first character
+    </span><span class="kw">fn </span>invalid_utf8_first_char&lt;O: 
OffsetSizeTrait&gt;() -&gt; GenericBinaryArray&lt;O&gt; {
+        <span class="comment">// invalid sequence in the first character
+        // 
https://stackoverflow.com/questions/1301402/example-invalid-utf8-string
+        </span><span class="kw">let </span>valid: <span 
class="kw-2">&amp;</span>[u8] = <span class="string">b"   "</span>;
+        <span class="kw">let </span>invalid: <span 
class="kw-2">&amp;</span>[u8] = <span class="kw-2">&amp;</span>[<span 
class="number">0xa0</span>, <span class="number">0xa1</span>, <span 
class="number">0x20</span>, <span class="number">0x20</span>];
+        GenericBinaryArray::&lt;O&gt;::from_iter(<span 
class="macro">vec!</span>[<span class="prelude-val">None</span>, <span 
class="prelude-val">Some</span>(valid), <span class="prelude-val">None</span>, 
<span class="prelude-val">Some</span>(invalid)])
+    }
+
+    <span class="doccomment">/// returns a BinaryArray with invalid UTF8 data 
in a character other than
+    /// the first (this is checked in a special codepath)
+    </span><span class="kw">fn </span>invalid_utf8_later_char&lt;O: 
OffsetSizeTrait&gt;() -&gt; GenericBinaryArray&lt;O&gt; {
+        <span class="comment">// invalid sequence in NOT the first character
+        // 
https://stackoverflow.com/questions/1301402/example-invalid-utf8-string
+        </span><span class="kw">let </span>valid: <span 
class="kw-2">&amp;</span>[u8] = <span class="string">b"   "</span>;
+        <span class="kw">let </span>invalid: <span 
class="kw-2">&amp;</span>[u8] = <span class="kw-2">&amp;</span>[<span 
class="number">0x20</span>, <span class="number">0x20</span>, <span 
class="number">0x20</span>, <span class="number">0xa0</span>, <span 
class="number">0xa1</span>, <span class="number">0x20</span>, <span 
class="number">0x20</span>];
+        GenericBinaryArray::&lt;O&gt;::from_iter(<span 
class="macro">vec!</span>[<span class="prelude-val">None</span>, <span 
class="prelude-val">Some</span>(valid), <span class="prelude-val">None</span>, 
<span class="prelude-val">Some</span>(invalid)])
+    }
+
+    <span class="comment">// writes the array into a single column parquet file
+    </span><span class="kw">fn </span>write_to_parquet(array: ArrayRef) -&gt; 
Vec&lt;u8&gt; {
+        <span class="kw">let </span>batch = RecordBatch::try_from_iter(<span 
class="macro">vec!</span>[(<span class="string">"c"</span>, array)]).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>data = <span 
class="macro">vec!</span>[];
+        <span class="kw">let </span>schema = batch.schema();
+        <span class="kw">let </span>props = <span 
class="prelude-val">None</span>;
+        {
+            <span class="kw">let </span><span class="kw-2">mut </span>writer = 
ArrowWriter::try_new(<span class="kw-2">&amp;mut </span>data, schema, 
props).unwrap();
+            writer.write(<span class="kw-2">&amp;</span>batch).unwrap();
+            writer.flush().unwrap();
+            writer.close().unwrap();
+        };
+        data
+    }
+
+    <span class="doccomment">/// read the parquet file into a record batch
+    </span><span class="kw">fn </span>read_from_parquet(data: Vec&lt;u8&gt;) 
-&gt; <span class="prelude-ty">Result</span>&lt;Vec&lt;RecordBatch&gt;, 
ArrowError&gt; {
+        <span class="kw">let </span>reader = 
ArrowReaderBuilder::try_new(bytes::Bytes::from(data))
+            .unwrap()
+            .build()
+            .unwrap();
+
+        reader.collect()
+    }
+
     <span class="attr">#[test]
     </span><span class="kw">fn </span>test_dictionary_preservation() {
         <span class="kw">let </span>fields = <span 
class="macro">vec!</span>[Arc::new(

Reply via email to