You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by gi...@apache.org on 2023/11/28 11:21:39 UTC

(arrow-rs) branch asf-site updated: deploy: 34a816d4fc2a9e0e097b1c41df788612dd5c8e61

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 8ec5903c40 deploy: 34a816d4fc2a9e0e097b1c41df788612dd5c8e61
8ec5903c40 is described below

commit 8ec5903c4055edcd1fe6021452f2b261c63bc4b5
Author: tustvold <tu...@users.noreply.github.com>
AuthorDate: Tue Nov 28 11:21:33 2023 +0000

    deploy: 34a816d4fc2a9e0e097b1c41df788612dd5c8e61
---
 help.html                                          |   2 +-
 index.html                                         |   2 +-
 parquet/column/writer/fn.compare_greater.html      |   2 +-
 .../fn.compare_greater_byte_array_decimals.html    |   2 +-
 parquet/column/writer/fn.fallback_encoding.html    |   2 +-
 .../column/writer/fn.has_dictionary_support.html   |   2 +-
 parquet/column/writer/fn.increment.html            |   2 +-
 parquet/column/writer/fn.increment_utf8.html       |   2 +-
 parquet/column/writer/fn.is_nan.html               |   2 +-
 parquet/column/writer/fn.truncate_utf8.html        |   2 +-
 parquet/column/writer/fn.update_max.html           |   2 +-
 parquet/column/writer/fn.update_min.html           |   2 +-
 parquet/column/writer/fn.update_stat.html          |   2 +-
 parquet/column/writer/index.html                   |   2 +-
 .../column/writer/struct.GenericColumnWriter.html  |  57 +--
 .../column/writer/trait.EncodingWriteSupport.html  |   4 +-
 parquet/column/writer/type.ColumnWriterImpl.html   |  10 +-
 parquet/file/metadata/index.html                   |   2 +-
 .../file/metadata/struct.ColumnIndexBuilder.html   |  10 +-
 .../file/metadata/struct.OffsetIndexBuilder.html   |   6 +-
 search-index.js                                    |   2 +-
 settings.html                                      |   2 +-
 src/parquet/column/writer/mod.rs.html              | 432 +++++++++++++++++++--
 src/parquet/file/metadata.rs.html                  |  12 +-
 .../column/writer/struct.GenericColumnWriter.js    |   2 +-
 25 files changed, 485 insertions(+), 82 deletions(-)

diff --git a/help.html b/help.html
index ecbca0edd6..143757f09c 100644
--- a/help.html
+++ b/help.html
@@ -1 +1 @@
-<!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="Documentation for Rustdoc"><title>Help</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843f [...]
\ No newline at end of file
+<!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="Documentation for Rustdoc"><title>Help</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843f [...]
\ No newline at end of file
diff --git a/index.html b/index.html
index 3f73df8ad0..c03d999568 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!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="List of crates"><title>Index of crates</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843f [...]
\ No newline at end of file
+<!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="List of crates"><title>Index of crates</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843f [...]
\ No newline at end of file
diff --git a/parquet/column/writer/fn.compare_greater.html b/parquet/column/writer/fn.compare_greater.html
index b31e2f5d67..355c95c005 100644
--- a/parquet/column/writer/fn.compare_greater.html
+++ b/parquet/column/writer/fn.compare_greater.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="Evaluate `a &gt; b` according to underlying logical type."><title>compare_greater in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
+<!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="Evaluate `a &gt; b` according to underlying logical type."><title>compare_greater in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font [...]
     descr: &amp;<a class="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::schema::types::ColumnDescriptor">ColumnDescriptor</a>,
     a: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a>,
     b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a>
diff --git a/parquet/column/writer/fn.compare_greater_byte_array_decimals.html b/parquet/column/writer/fn.compare_greater_byte_array_decimals.html
index 43b7498c92..5d6061f45e 100644
--- a/parquet/column/writer/fn.compare_greater_byte_array_decimals.html
+++ b/parquet/column/writer/fn.compare_greater_byte_array_decimals.html
@@ -1,2 +1,2 @@
-<!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="Signed comparison of bytes arrays"><title>compare_greater_byte_array_decimals in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" ty [...]
+<!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="Signed comparison of bytes arrays"><title>compare_greater_byte_array_decimals in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" ty [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.fallback_encoding.html b/parquet/column/writer/fn.fallback_encoding.html
index 34a42231c7..81b39af846 100644
--- a/parquet/column/writer/fn.fallback_encoding.html
+++ b/parquet/column/writer/fn.fallback_encoding.html
@@ -1,2 +1,2 @@
-<!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="Returns encoding for a column when no other encoding is provided in writer properties."><title>fallback_encoding in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff [...]
+<!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="Returns encoding for a column when no other encoding is provided in writer properties."><title>fallback_encoding in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.has_dictionary_support.html b/parquet/column/writer/fn.has_dictionary_support.html
index c23ca0b1dc..ddade991f4 100644
--- a/parquet/column/writer/fn.has_dictionary_support.html
+++ b/parquet/column/writer/fn.has_dictionary_support.html
@@ -1,2 +1,2 @@
-<!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="Returns true if dictionary is supported for column writer, false otherwise."><title>has_dictionary_support in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><li [...]
+<!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="Returns true if dictionary is supported for column writer, false otherwise."><title>has_dictionary_support in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><li [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.increment.html b/parquet/column/writer/fn.increment.html
index c8b6bf5ad6..1c48ddc216 100644
--- a/parquet/column/writer/fn.increment.html
+++ b/parquet/column/writer/fn.increment.html
@@ -1,3 +1,3 @@
-<!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="Try and increment the bytes from right to left."><title>increment in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/wof [...]
+<!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="Try and increment the bytes from right to left."><title>increment in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/wof [...]
 <p>Returns <code>None</code> if all bytes are set to <code>u8::MAX</code>.</p>
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.increment_utf8.html b/parquet/column/writer/fn.increment_utf8.html
index 5bab74606e..93ae7a81cf 100644
--- a/parquet/column/writer/fn.increment_utf8.html
+++ b/parquet/column/writer/fn.increment_utf8.html
@@ -1,3 +1,3 @@
-<!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="Try and increment the the string’s bytes from right to left, returning when the result is a valid UTF8 string. Returns `None` when it can’t increment any byte."><title>increment_utf8 in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href [...]
+<!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="Try and increment the the string’s bytes from right to left, returning when the result is a valid UTF8 string. Returns `None` when it can’t increment any byte."><title>increment_utf8 in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href [...]
 is a valid UTF8 string. Returns <code>None</code> when it can’t increment any byte.</p>
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.is_nan.html b/parquet/column/writer/fn.is_nan.html
index 7cd6454aef..eedb49e7da 100644
--- a/parquet/column/writer/fn.is_nan.html
+++ b/parquet/column/writer/fn.is_nan.html
@@ -1 +1 @@
-<!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="API documentation for the Rust `is_nan` fn in crate `parquet`."><title>is_nan in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" ty [...]
\ No newline at end of file
+<!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="API documentation for the Rust `is_nan` fn in crate `parquet`."><title>is_nan in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" ty [...]
\ No newline at end of file
diff --git a/parquet/column/writer/fn.truncate_utf8.html b/parquet/column/writer/fn.truncate_utf8.html
index 0e220b26e9..2b748cebbc 100644
--- a/parquet/column/writer/fn.truncate_utf8.html
+++ b/parquet/column/writer/fn.truncate_utf8.html
@@ -1,3 +1,3 @@
-<!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="Truncate a UTF8 slice to the longest prefix that is still a valid UTF8 string, while being less than `length` bytes and non-empty"><title>truncate_utf8 in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceS [...]
+<!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="Truncate a UTF8 slice to the longest prefix that is still a valid UTF8 string, while being less than `length` bytes and non-empty"><title>truncate_utf8 in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceS [...]
 while being less than <code>length</code> bytes and non-empty</p>
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/column/writer/fn.update_max.html b/parquet/column/writer/fn.update_max.html
index b523b0d969..f923388a7e 100644
--- a/parquet/column/writer/fn.update_max.html
+++ b/parquet/column/writer/fn.update_max.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="API documentation for the Rust `update_max` fn in crate `parquet`."><title>update_max in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as=" [...]
+<!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="API documentation for the Rust `update_max` fn in crate `parquet`."><title>update_max in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as=" [...]
     descr: &amp;<a class="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::schema::types::ColumnDescriptor">ColumnDescriptor</a>,
     val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a>,
     max: &amp;mut <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;T&gt;
diff --git a/parquet/column/writer/fn.update_min.html b/parquet/column/writer/fn.update_min.html
index b4e7d4bdfb..8531916fc8 100644
--- a/parquet/column/writer/fn.update_min.html
+++ b/parquet/column/writer/fn.update_min.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="API documentation for the Rust `update_min` fn in crate `parquet`."><title>update_min in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as=" [...]
+<!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="API documentation for the Rust `update_min` fn in crate `parquet`."><title>update_min in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as=" [...]
     descr: &amp;<a class="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::schema::types::ColumnDescriptor">ColumnDescriptor</a>,
     val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a>,
     min: &amp;mut <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;T&gt;
diff --git a/parquet/column/writer/fn.update_stat.html b/parquet/column/writer/fn.update_stat.html
index 06237cc488..520b87f6d0 100644
--- a/parquet/column/writer/fn.update_stat.html
+++ b/parquet/column/writer/fn.update_stat.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="Perform a conditional update of `cur`, skipping any NaN values"><title>update_stat in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
+<!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="Perform a conditional update of `cur`, skipping any NaN values"><title>update_stat in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="fon [...]
     descr: &amp;<a class="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::schema::types::ColumnDescriptor">ColumnDescriptor</a>,
     val: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;T</a>,
     cur: &amp;mut <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;T&gt;,
diff --git a/parquet/column/writer/index.html b/parquet/column/writer/index.html
index 2290cbf0e6..1d2582575b 100644
--- a/parquet/column/writer/index.html
+++ b/parquet/column/writer/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 column writer API."><title>parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../st [...]
+<!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 column writer API."><title>parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../st [...]
 </div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><ul class="item-table"><li><div class="item-name"><a class="mod" href="encoder/index.html" title="mod parquet::column::writer::encoder">encoder</a><span title="Restricted Visibility">&nbsp;🔒</span> </div></li></ul><h2 id="macros" class="small-section-header"><a href="#macros">Macros</a></h2><ul class="item-table"><li><div class="item-name"><a class="macro" href="macro.downcast_writer.html" ti [...]
 supports dictionary encoding.</div></li></ul><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2><ul class="item-table"><li><div class="item-name"><a class="fn" href="fn.compare_greater.html" title="fn parquet::column::writer::compare_greater">compare_greater</a><span title="Restricted Visibility">&nbsp;🔒</span> </div><div class="desc docblock-short">Evaluate <code>a &gt; b</code> according to underlying logical type.</div></li><li><div class="item-name [...]
 non-generic type to a generic column writer type <code>ColumnWriterImpl</code>.</div></li><li><div class="item-name"><a class="fn" href="fn.get_typed_column_writer_mut.html" title="fn parquet::column::writer::get_typed_column_writer_mut">get_typed_column_writer_mut</a></div><div class="desc docblock-short">Similar to <code>get_typed_column_writer</code> but returns a reference.</div></li><li><div class="item-name"><a class="fn" href="fn.get_typed_column_writer_ref.html" title="fn parquet [...]
diff --git a/parquet/column/writer/struct.GenericColumnWriter.html b/parquet/column/writer/struct.GenericColumnWriter.html
index 6fb8ee7891..3038c4060b 100644
--- a/parquet/column/writer/struct.GenericColumnWriter.html
+++ b/parquet/column/writer/struct.GenericColumnWriter.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="API documentation for the Rust `GenericColumnWriter` struct in crate `parquet`."><title>GenericColumnWriter in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><l [...]
+<!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="API documentation for the Rust `GenericColumnWriter` struct in crate `parquet`."><title>GenericColumnWriter in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><l [...]
     descr: <a class="type" href="../../schema/types/type.ColumnDescPtr.html" title="type parquet::schema::types::ColumnDescPtr">ColumnDescPtr</a>,
     props: <a class="type" href="../../file/properties/type.WriterPropertiesPtr.html" title="type parquet::file::properties::WriterPropertiesPtr">WriterPropertiesPtr</a>,
     statistics_enabled: <a class="enum" href="../../file/properties/enum.EnabledStatistics.html" title="enum parquet::file::properties::EnabledStatistics">EnabledStatistics</a>,
@@ -14,13 +14,17 @@
     data_pages: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/collections/vec_deque/struct.VecDeque.html" title="struct alloc::collections::vec_deque::VecDeque">VecDeque</a>&lt;<a class="struct" href="../page/struct.CompressedPage.html" title="struct parquet::column::page::CompressedPage">CompressedPage</a>&gt;,
     column_index_builder: <a class="struct" href="../../file/metadata/struct.ColumnIndexBuilder.html" title="struct parquet::file::metadata::ColumnIndexBuilder">ColumnIndexBuilder</a>,
     offset_index_builder: <a class="struct" href="../../file/metadata/struct.OffsetIndexBuilder.html" title="struct parquet::file::metadata::OffsetIndexBuilder">OffsetIndexBuilder</a>,
+    data_page_boundary_ascending: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
+    data_page_boundary_descending: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
+    last_non_null_data_page_min_max: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;(E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.T" title="type parquet::column::writer::encoder::ColumnValueEncoder::T">T</a>, E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.T" title="type parquet::column::writer::encoder::ColumnValueEncod [...]
 </details>}</code></pre><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.descr" class="structfield small-section-header"><a href="#structfield.descr" class="anchor field">§</a><code>descr: <a class="type" href="../../schema/types/type.ColumnDescPtr.html" title="type parquet::schema::types::ColumnDescPtr">ColumnDescPtr</a></code></span><span id="structfield.props" class="structfield small-section-header"><a href="#s [...]
 but we use a BTreeSet so that the output is deterministic</p>
-</div><span id="structfield.def_levels_sink" class="structfield small-section-header"><a href="#structfield.def_levels_sink" class="anchor field">§</a><code>def_levels_sink: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>&gt;</code></span><span id="structfield.rep_levels_sink" class="structfield small-section-header">< [...]
+</div><span id="structfield.def_levels_sink" class="structfield small-section-header"><a href="#structfield.def_levels_sink" class="anchor field">§</a><code>def_levels_sink: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>&gt;</code></span><span id="structfield.rep_levels_sink" class="structfield small-section-header">< [...]
+</div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-GenericColumnWriter%3C'a,+E%3E" class="impl"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#240-1068">source</a><a href="#impl-GenericColumnWriter%3C'a,+E%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a, E: <a class= [...]
     descr: <a class="type" href="../../schema/types/type.ColumnDescPtr.html" title="type parquet::schema::types::ColumnDescPtr">ColumnDescPtr</a>,
     props: <a class="type" href="../../file/properties/type.WriterPropertiesPtr.html" title="type parquet::file::properties::WriterPropertiesPtr">WriterPropertiesPtr</a>,
     page_writer: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="../page/trait.PageWriter.html" title="trait parquet::column::page::PageWriter">PageWriter</a> + 'a&gt;
-) -&gt; Self</h4></section><section id="method.write_batch_internal" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#286-376">source</a><h4 class="code-header">pub(crate) fn <a href="#method.write_batch_internal" class="fn">write_batch_internal</a>(
+) -&gt; Self</h4></section><section id="method.write_batch_internal" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#296-386">source</a><h4 class="code-header">pub(crate) fn <a href="#method.write_batch_internal" class="fn">write_batch_internal</a>(
     &amp;mut self,
     values: &amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.Values" title="type parquet::column::writer::encoder::ColumnValueEncoder::Values">Values</a>,
     value_indices: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>]&gt;,
@@ -29,7 +33,7 @@ but we use a BTreeSet so that the output is deterministic</p>
     min: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.T" title="type parquet::column::writer::encoder::ColumnValueEncoder::T">T</a>&gt;,
     max: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.T" title="type parquet::column::writer::encoder::ColumnValueEncoder::T">T</a>&gt;,
     distinct_count: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;
-) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</h4></section><details class="toggle method-toggle" open><summary><section id="method.write_batch" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#390-397">source</a><h4 class="code-header">pub fn <a href="#method.write_batch" class=" [...]
+) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</h4></section><details class="toggle method-toggle" open><summary><section id="method.write_batch" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#400-407">source</a><h4 class="code-header">pub fn <a href="#method.write_batch" class=" [...]
     &amp;mut self,
     values: &amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.Values" title="type parquet::column::writer::encoder::ColumnValueEncoder::Values">Values</a>,
     def_levels: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>]&gt;,
@@ -43,7 +47,7 @@ actual written values may be smaller than provided values.</p>
 of the values buffer is returned.</p>
 <p>Definition and/or repetition levels can be omitted, if values are
 non-nullable and/or non-repeated.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_batch_with_statistics" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#406-424">source</a><h4 class="code-header">pub fn <a href="#method.write_batch_with_statistics" class="fn">write_batch_with_statistics</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_batch_with_statistics" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#416-434">source</a><h4 class="code-header">pub fn <a href="#method.write_batch_with_statistics" class="fn">write_batch_with_statistics</a>(
     &amp;mut self,
     values: &amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.Values" title="type parquet::column::writer::encoder::ColumnValueEncoder::Values">Values</a>,
     def_levels: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>]&gt;,
@@ -57,19 +61,19 @@ chunk-level statistics</p>
 for these statistics to take effect. If <a href="../../file/properties/enum.EnabledStatistics.html#variant.None" title="variant parquet::file::properties::EnabledStatistics::None"><code>EnabledStatistics::None</code></a> they will be ignored,
 and if <a href="../../file/properties/enum.EnabledStatistics.html#variant.Page" title="variant parquet::file::properties::EnabledStatistics::Page"><code>EnabledStatistics::Page</code></a> the chunk statistics will instead be computed from the
 computed page statistics</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get_total_bytes_written" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#431-433">source</a><h4 class="code-header">pub fn <a href="#method.get_total_bytes_written" class="fn">get_total_bytes_written</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get_total_bytes_written" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#441-443">source</a><h4 class="code-header">pub fn <a href="#method.get_total_bytes_written" class="fn">get_total_bytes_written</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock" [...]
 This value is also returned when column writer is closed.</p>
 <p>Note: this value does not include any buffered data that has not
 yet been flushed to a page.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get_estimated_total_bytes" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#440-444">source</a><h4 class="code-header">pub(crate) fn <a href="#method.get_estimated_total_bytes" class="fn">get_estimated_total_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div cla [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get_estimated_total_bytes" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#450-454">source</a><h4 class="code-header">pub(crate) fn <a href="#method.get_estimated_total_bytes" class="fn">get_estimated_total_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div cla [...]
 <p>Unlike <a href="struct.GenericColumnWriter.html#method.get_total_bytes_written" title="method parquet::column::writer::GenericColumnWriter::get_total_bytes_written"><code>Self::get_total_bytes_written</code></a> this includes an estimate
 of any data that has not yet been flushed to a page</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get_total_rows_written" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#448-450">source</a><h4 class="code-header">pub fn <a href="#method.get_total_rows_written" class="fn">get_total_rows_written</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get_total_rows_written" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#458-460">source</a><h4 class="code-header">pub fn <a href="#method.get_total_rows_written" class="fn">get_total_rows_written</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p [...]
 This value is also returned when column writer is closed.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get_descriptor" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#453-455">source</a><h4 class="code-header">pub fn <a href="#method.get_descriptor" class="fn">get_descriptor</a>(&amp;self) -&gt; &amp;<a class="type" href="../../schema/types/type.ColumnDescPtr.html" title="type parquet::schema::types::ColumnDescPtr">ColumnDescPtr</a></h4></section></summary>< [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#459-484">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="struct" href="struct.ColumnCloseResult.html" title="struct parquet::column::writer: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get_descriptor" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#463-465">source</a><h4 class="code-header">pub fn <a href="#method.get_descriptor" class="fn">get_descriptor</a>(&amp;self) -&gt; &amp;<a class="type" href="../../schema/types/type.ColumnDescPtr.html" title="type parquet::schema::types::ColumnDescPtr">ColumnDescPtr</a></h4></section></summary>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#469-506">source</a><h4 class="code-header">pub fn <a href="#method.close" class="fn">close</a>(self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="struct" href="struct.ColumnCloseResult.html" title="struct parquet::column::writer: [...]
 Returns total bytes written, total rows written and column chunk metadata.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_mini_batch" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#489-571">source</a><h4 class="code-header">fn <a href="#method.write_mini_batch" class="fn">write_mini_batch</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_mini_batch" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#511-593">source</a><h4 class="code-header">fn <a href="#method.write_mini_batch" class="fn">write_mini_batch</a>(
     &amp;mut self,
     values: &amp;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.Values" title="type parquet::column::writer::encoder::ColumnValueEncoder::Values">Values</a>,
     values_offset: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>,
@@ -80,37 +84,40 @@ Returns total bytes written, total rows written and column chunk metadata.</p>
 ) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</h4></section></summary><div class="docblock"><p>Writes mini batch of values, definition and repetition levels.
 This allows fine-grained processing of values and maintaining a reasonable
 page size.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.should_dict_fallback" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#578-583">source</a><h4 class="code-header">fn <a href="#method.should_dict_fallback" class="fn">should_dict_fallback</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.should_dict_fallback" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#600-605">source</a><h4 class="code-header">fn <a href="#method.should_dict_fallback" class="fn">should_dict_fallback</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns [...]
 <p>We can only fall back if dictionary encoder is set and we have exceeded dictionary
 size.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.should_add_data_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#587-598">source</a><h4 class="code-header">fn <a href="#method.should_add_data_page" class="fn">should_add_data_page</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.dict_fallback" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#602-610">source</a><h4 class="code-header">fn <a href="#method.dict_fallback" class="fn">dict_fallback</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.should_add_data_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#609-620">source</a><h4 class="code-header">fn <a href="#method.should_add_data_page" class="fn">should_add_data_page</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.dict_fallback" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#624-632">source</a><h4 class="code-header">fn <a href="#method.dict_fallback" class="fn">dict_fallback</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std [...]
 Prepares and writes dictionary and all data pages into page writer.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.update_column_offset_index" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#613-667">source</a><h4 class="code-header">fn <a href="#method.update_column_offset_index" class="fn">update_column_offset_index</a>(&amp;mut self, page_statistics: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option [...]
-</div></details><section id="method.truncate_min_value" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#669-678">source</a><h4 class="code-header">fn <a href="#method.truncate_min_value" class="fn">truncate_min_value</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.update_column_offset_index" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#635-713">source</a><h4 class="code-header">fn <a href="#method.update_column_offset_index" class="fn">update_column_offset_index</a>(
+    &amp;mut self,
+    page_statistics: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="struct" href="../../file/statistics/struct.ValueStatistics.html" title="struct parquet::file::statistics::ValueStatistics">ValueStatistics</a>&lt;E::<a class="associatedtype" href="encoder/trait.ColumnValueEncoder.html#associatedtype.T" title="type parquet::column::writer::encoder::ColumnValueEncoder::T">T</a>&gt;&gt;
+)</h4></section></summary><div class="docblock"><p>Update the column index and offset index when adding the data page</p>
+</div></details><section id="method.truncate_min_value" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#715-724">source</a><h4 class="code-header">fn <a href="#method.truncate_min_value" class="fn">truncate_min_value</a>(
     &amp;self,
     truncation_length: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;,
     data: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]
-) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>)</h4></section><section id="method.truncate_max_value" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#680-689">source</ [...]
+) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>)</h4></section><section id="method.truncate_max_value" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#726-735">source</ [...]
     &amp;self,
     truncation_length: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;,
     data: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]
-) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>)</h4></section><details class="toggle method-toggle" open><summary><section id="method.add_data_page" class="method"><a class="src rightside" href="../../../src/parq [...]
+) -&gt; (<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>)</h4></section><details class="toggle method-toggle" open><summary><section id="method.add_data_page" class="method"><a class="src rightside" href="../../../src/parq [...]
 Data page is either buffered in case of dictionary encoding or written directly.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.flush_data_pages" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#829-840">source</a><h4 class="code-header">fn <a href="#method.flush_data_pages" class="fn">flush_data_pages</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/ni [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.flush_data_pages" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#876-887">source</a><h4 class="code-header">fn <a href="#method.flush_data_pages" class="fn">flush_data_pages</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/ni [...]
 dictionary encoding into underlying sink.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_column_metadata" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#843-932">source</a><h4 class="code-header">fn <a href="#method.write_column_metadata" class="fn">write_column_metadata</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="struct" href="../../file/metad [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.encode_levels_v1" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#936-940">source</a><h4 class="code-header">fn <a href="#method.encode_levels_v1" class="fn">encode_levels_v1</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_column_metadata" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#890-979">source</a><h4 class="code-header">fn <a href="#method.write_column_metadata" class="fn">write_column_metadata</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="struct" href="../../file/metad [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.encode_levels_v1" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#983-987">source</a><h4 class="code-header">fn <a href="#method.encode_levels_v1" class="fn">encode_levels_v1</a>(
     &amp;self,
     encoding: <a class="enum" href="../../basic/enum.Encoding.html" title="enum parquet::basic::Encoding">Encoding</a>,
     levels: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>],
     max_level: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt; <a href="#" class="tooltip" data-notable-ty="Vec&lt;u8&gt;">ⓘ</a></h4></section></summary><div class="docblock"><p>Encodes definition or repetition levels for Data Page v1.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.encode_levels_v2" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#945-949">source</a><h4 class="code-header">fn <a href="#method.encode_levels_v2" class="fn">encode_levels_v2</a>(&amp;self, levels: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>], max_level: <a class="primitive" href="https://doc.rust-lang. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.encode_levels_v2" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#992-996">source</a><h4 class="code-header">fn <a href="#method.encode_levels_v2" class="fn">encode_levels_v2</a>(&amp;self, levels: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>], max_level: <a class="primitive" href="https://doc.rust-lang. [...]
 Encoding is always RLE.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_data_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#953-962">source</a><h4 class="code-header">fn <a href="#method.write_data_page" class="fn">write_data_page</a>(&amp;mut self, page: <a class="struct" href="../page/struct.CompressedPage.html" title="struct parquet::column::page::CompressedPage">CompressedPage</a>) -&gt; <a class="type" href=". [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write_dictionary_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#966-995">source</a><h4 class="code-header">fn <a href="#method.write_dictionary_page" class="fn">write_dictionary_page</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc.r [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.update_metrics_for_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#999-1020">source</a><h4 class="code-header">fn <a href="#method.update_metrics_for_page" class="fn">update_metrics_for_page</a>(&amp;mut self, page_spec: <a class="struct" href="../page/struct.PageWriteSpec.html" title="struct parquet::column::page::PageWriteSpec">PageWriteSpec</a>)</h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_data_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#1000-1009">source</a><h4 class="code-header">fn <a href="#method.write_data_page" class="fn">write_data_page</a>(&amp;mut self, page: <a class="struct" href="../page/struct.CompressedPage.html" title="struct parquet::column::page::CompressedPage">CompressedPage</a>) -&gt; <a class="type" href= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_dictionary_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#1013-1042">source</a><h4 class="code-header">fn <a href="#method.write_dictionary_page" class="fn">write_dictionary_page</a>(&amp;mut self) -&gt; <a class="type" href="../../errors/type.Result.html" title="type parquet::errors::Result">Result</a>&lt;<a class="primitive" href="https://doc [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.update_metrics_for_page" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#1046-1067">source</a><h4 class="code-header">fn <a href="#method.update_metrics_for_page" class="fn">update_metrics_for_page</a>(&amp;mut self, page_spec: <a class="struct" href="../page/struct.PageWriteSpec.html" title="struct parquet::column::page::PageWriteSpec">PageWriteSpec</a>)</ [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-GenericColumnWriter%3C'a,+E%3E" class="impl"><a href="#impl-RefUnwindSafe-for-GenericColumnWriter%3C'a,+E%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a, E&gt; !<a class="trait" href="https://doc.rust-lang.org/nig [...]
     E: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</span></h3></section><section id="impl-Sync-for-GenericColumnWriter%3C'a,+E%3E" class="impl"><a href="#impl-Sync-for-GenericColumnWriter%3C'a,+E%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a, E&gt; !<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="st [...]
     E: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,
diff --git a/parquet/column/writer/trait.EncodingWriteSupport.html b/parquet/column/writer/trait.EncodingWriteSupport.html
index 95fa4721fb..d150c3fc07 100644
--- a/parquet/column/writer/trait.EncodingWriteSupport.html
+++ b/parquet/column/writer/trait.EncodingWriteSupport.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="Trait to define default encoding for types, including whether or not the type supports dictionary encoding."><title>EncodingWriteSupport in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-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="Trait to define default encoding for types, including whether or not the type supports dictionary encoding."><title>EncodingWriteSupport in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-4 [...]
     // Required method
     fn <a href="#tymethod.has_dictionary_support" class="fn">has_dictionary_support</a>(props: &amp;<a class="struct" href="../../file/properties/struct.WriterProperties.html" title="struct parquet::file::properties::WriterProperties">WriterProperties</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>;
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Trait to define default encoding for types, including whether or not the type
 supports dictionary encoding.</p>
-</div></details><h2 id="required-methods" class="small-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.has_dictionary_support" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#1125">source</a><h4 class="code-header">fn <a href="#tymethod.has_dictionary_support" class="fn">has_dictionary_support</a>(props: &amp;<a c [...]
+</div></details><h2 id="required-methods" class="small-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.has_dictionary_support" class="method"><a class="src rightside" href="../../../src/parquet/column/writer/mod.rs.html#1172">source</a><h4 class="code-header">fn <a href="#tymethod.has_dictionary_support" class="fn">has_dictionary_support</a>(props: &amp;<a c [...]
 </div></details></div><h2 id="object-safety" class="small-section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../../trait.impl/parquet/col [...]
\ No newline at end of file
diff --git a/parquet/column/writer/type.ColumnWriterImpl.html b/parquet/column/writer/type.ColumnWriterImpl.html
index 170da2a32c..9ed20d02ac 100644
--- a/parquet/column/writer/type.ColumnWriterImpl.html
+++ b/parquet/column/writer/type.ColumnWriterImpl.html
@@ -1,5 +1,5 @@
-<!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="Typed column writer for a primitive column."><title>ColumnWriterImpl in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
-</div></details><h2 id="aliased-type" class="small-section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct ColumnWriterImpl&lt;'a, T&gt; {<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 15 fields</span></summary>
+<!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="Typed column writer for a primitive column."><title>ColumnWriterImpl in parquet::column::writer - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
+</div></details><h2 id="aliased-type" class="small-section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct ColumnWriterImpl&lt;'a, T&gt; {<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 18 fields</span></summary>
     descr: <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="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::schema::types::ColumnDescriptor">ColumnDescriptor</a>&gt;,
     props: <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="struct" href="../../file/properties/struct.WriterProperties.html" title="struct parquet::file::properties::WriterProperties">WriterProperties</a>&gt;,
     statistics_enabled: <a class="enum" href="../../file/properties/enum.EnabledStatistics.html" title="enum parquet::file::properties::EnabledStatistics">EnabledStatistics</a>,
@@ -15,6 +15,10 @@
     data_pages: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/collections/vec_deque/struct.VecDeque.html" title="struct alloc::collections::vec_deque::VecDeque">VecDeque</a>&lt;<a class="struct" href="../page/struct.CompressedPage.html" title="struct parquet::column::page::CompressedPage">CompressedPage</a>&gt;,
     column_index_builder: <a class="struct" href="../../file/metadata/struct.ColumnIndexBuilder.html" title="struct parquet::file::metadata::ColumnIndexBuilder">ColumnIndexBuilder</a>,
     offset_index_builder: <a class="struct" href="../../file/metadata/struct.OffsetIndexBuilder.html" title="struct parquet::file::metadata::OffsetIndexBuilder">OffsetIndexBuilder</a>,
+    data_page_boundary_ascending: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
+    data_page_boundary_descending: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
+    last_non_null_data_page_min_max: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;(&lt;<a class="struct" href="encoder/struct.ColumnValueEncoderImpl.html" title="struct parquet::column::writer::encoder::ColumnValueEncoderImpl">ColumnValueEncoderImpl</a>&lt;T&gt; as <a class="trait" href="encoder/trait.ColumnValueEncoder.html" title="trait parquet::column::writer::encoder::ColumnValueEncoder">ColumnVa [...]
 </details>}</code></pre><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.descr" class="structfield small-section-header"><a href="#structfield.descr" class="anchor field">§</a><code>descr: <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="struct" href="../../schema/types/struct.ColumnDescriptor.html" title="struct parquet::sche [...]
 but we use a BTreeSet so that the output is deterministic</p>
-</div><span id="structfield.def_levels_sink" class="structfield small-section-header"><a href="#structfield.def_levels_sink" class="anchor field">§</a><code>def_levels_sink: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>&gt;</code></span><span id="structfield.rep_levels_sink" class="structfield small-section-header">< [...]
\ No newline at end of file
+</div><span id="structfield.def_levels_sink" class="structfield small-section-header"><a href="#structfield.def_levels_sink" class="anchor field">§</a><code>def_levels_sink: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i16.html">i16</a>&gt;</code></span><span id="structfield.rep_levels_sink" class="structfield small-section-header">< [...]
+</div><script src="../../../type.impl/parquet/column/writer/struct.GenericColumnWriter.js" data-self-path="parquet::column::writer::ColumnWriterImpl" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/parquet/file/metadata/index.html b/parquet/file/metadata/index.html
index 4c982b8393..c8d9247018 100644
--- a/parquet/file/metadata/index.html
+++ b/parquet/file/metadata/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 information about available Parquet metadata."><title>parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cr [...]
+<!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 information about available Parquet metadata."><title>parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cr [...]
 <p>The hierarchy of metadata is as follows:</p>
 <p><a href="struct.ParquetMetaData.html"><code>ParquetMetaData</code></a> contains
 <a href="struct.FileMetaData.html"><code>FileMetaData</code></a> and zero or more
diff --git a/parquet/file/metadata/struct.ColumnIndexBuilder.html b/parquet/file/metadata/struct.ColumnIndexBuilder.html
index 594c4c394c..b3b2fbbc8d 100644
--- a/parquet/file/metadata/struct.ColumnIndexBuilder.html
+++ b/parquet/file/metadata/struct.ColumnIndexBuilder.html
@@ -1,19 +1,19 @@
-<!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="Builder for column index"><title>ColumnIndexBuilder in parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
+<!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="Builder for column index"><title>ColumnIndexBuilder in parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
     null_pages: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>&gt;,
     min_values: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;&gt;,
     max_values: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;&gt;,
-    boundary_order: <a class="struct" href="../../format/struct.BoundaryOrder.html" title="struct parquet::format::BoundaryOrder">BoundaryOrder</a>,
     null_counts: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
+    boundary_order: <a class="struct" href="../../format/struct.BoundaryOrder.html" title="struct parquet::format::BoundaryOrder">BoundaryOrder</a>,
     valid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Builder for column index</p>
-</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.null_pages" class="structfield small-section-header"><a href="#structfield.null_pages" class="anchor field">§</a><code>null_pages: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>& [...]
+</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.null_pages" class="structfield small-section-header"><a href="#structfield.null_pages" class="anchor field">§</a><code>null_pages: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>& [...]
     &amp;mut self,
     null_page: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
     min_value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;,
     max_value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;,
     null_count: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>
-)</h4></section><section id="method.to_invalid" class="method"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#926-928">source</a><h4 class="code-header">pub fn <a href="#method.to_invalid" class="fn">to_invalid</a>(&amp;mut self)</h4></section><section id="method.valid" class="method"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#930-932">source</a><h4 class="code-header">pub fn <a href="#method.valid" class="fn">valid</a>(&amp;self) [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-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-Default-for-ColumnIndexBuilder" class="impl"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#895-899">source</a><a href="#impl-Default-for-ColumnIndexBuilder" class="anchor">§< [...]
+)</h4></section><section id="method.set_boundary_order" class="method"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#925-927">source</a><h4 class="code-header">pub fn <a href="#method.set_boundary_order" class="fn">set_boundary_order</a>(&amp;mut self, boundary_order: <a class="struct" href="../../format/struct.BoundaryOrder.html" title="struct parquet::format::BoundaryOrder">BoundaryOrder</a>)</h4></section><section id="method.to_invalid" class="method"><a cl [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-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-Default-for-ColumnIndexBuilder" class="impl"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#894-898">source</a><a href="#impl-Default-for-ColumnIndexBuilder" class="anchor">§< [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a hre [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https: [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/parquet/file/metadata/struct.OffsetIndexBuilder.html b/parquet/file/metadata/struct.OffsetIndexBuilder.html
index 7faac2aae1..70336220b6 100644
--- a/parquet/file/metadata/struct.OffsetIndexBuilder.html
+++ b/parquet/file/metadata/struct.OffsetIndexBuilder.html
@@ -1,11 +1,11 @@
-<!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="Builder for offset index"><title>OffsetIndexBuilder in parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
+<!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="Builder for offset index"><title>OffsetIndexBuilder in parquet::file::metadata - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
     offset_array: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
     compressed_page_size_array: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>&gt;,
     first_row_index_array: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
     current_first_row_index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Builder for offset index</p>
-</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.offset_array" class="structfield small-section-header"><a href="#structfield.offset_array" class="anchor field">§</a><code>offset_array: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64< [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="small-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-Default-for-OffsetIndexBuilder" class="impl"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#954-958">source</a><a href="#impl-Default-for-OffsetIndexBuilder" class="anchor">§< [...]
+</div></details><h2 id="fields" class="fields small-section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.offset_array" class="structfield small-section-header"><a href="#structfield.offset_array" class="anchor field">§</a><code>offset_array: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64< [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-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-Default-for-OffsetIndexBuilder" class="impl"><a class="src rightside" href="../../../src/parquet/file/metadata.rs.html#957-961">source</a><a href="#impl-Default-for-OffsetIndexBuilder" class="anchor">§< [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a hre [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https: [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/search-index.js b/search-index.js
index ce67081687..cbb7d7481e 100644
--- a/search-index.js
+++ b/search-index.js
@@ -24,7 +24,7 @@ var searchIndex = JSON.parse('{\
 "flight_test_integration_client":{"doc":"","t":"FPPIPPIGNNNNNNNNNNNNNNNNNNNNNNONNNNHOOONNNNNNNNNNNNN","n":["Args","AuthBasicProto","Err","Error","Middleware","Ok","Result","Scenario","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","cast","cast","clone","clone_into","command","command_for_update","fmt","fmt","from","from","from_arg_matches","from_arg_matches_mut","from_cast","from_cast","from_ref","group_id","host","into","into","into_request","into_re [...]
 "flight_test_integration_server":{"doc":"","t":"FPPIPPIGNNNNNNNNNNNNNNNNNNNNNNNNNNHOONNNNNNNNNNNNN","n":["Args","AuthBasicProto","Err","Error","Middleware","Ok","Result","Scenario","augment_args","augment_args_for_update","borrow","borrow","borrow_mut","borrow_mut","cast","cast","clone","clone_into","command","command_for_update","fmt","fmt","from","from","from_arg_matches","from_arg_matches_mut","from_cast","from_cast","from_ref","group_id","into","into","into_request","into_request","m [...]
 "gen":{"doc":"","t":"HH","n":["main","prost_config"],"q":[[0,"gen"],[2,"core::error"],[3,"alloc::boxed"],[4,"core::result"],[5,"prost_build"]],"d":["",""],"i":[0,0],"f":[[[],[[4,[1,[3,[2]]]]]],[[],5]],"c":[],"p":[[1,"tuple"],[10,"Error",2],[5,"Box",3],[6,"Result",4],[5,"Config",5]],"b":[]},\
-"parquet":{"doc":"This crate contains the official Native Rust …","t":"CCCCCCQCCCCCSEEFSEFNCHCCCNNNNCNNNNNNCONNNNNNNNNNOOHHHCNNNNNNNNNKFFFFFIFFFKFFHOOOONNNNNNNNNNNNNNNNNNNNNNNNNMNONMHOOOOCOONNNNNNNNNNNNNNNOONNNNNNNNOONNNNOOOOONNNNNNNNNNMNOOONNOMOOOOOOOOOONNNOOOOCOOOOHOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKFFNNNNNNMNONNNNNNNNOMNONNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNONNONNONNNNNNNNNNFFFFGFFFFPPIONNONNNNNNNNNNNNNNNNNNOOCNNNNNNNNNONNNNNOHOONNNNNNNNNNNNNNNNNNNNNNNNNNHHNHHHNHHHHNONNNNNN [...]
+"parquet":{"doc":"This crate contains the official Native Rust …","t":"CCCCCCQCCCCCSEEFSEFNCHCCCNNNNCNNNNNNCONNNNNNNNNNOOHHHCNNNNNNNNNKFFFFFIFFFKFFHOOOONNNNNNNNNNNNNNNNNNNNNNNNNMNONMHOOOOCOONNNNNNNNNNNNNNNOONNNNNNNNOONNNNOOOOONNNNNNNNNNMNOOONNOMOOOOOOOOOONNNOOOOCOOOOHOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKFFNNNNNNMNONNNNNNNNOMNONNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNONNONNONNNNNNNNNNFFFFGFFFFPPIONNONNNNNNNNNNNNNNNNNNOOCNNNNNNNNNONNNNNOHOONNNNNNNNNNNNNNNNNNNNNNNNNNHHNHHHNHHHHNONNNNNN [...]
 "parquet_concat":{"doc":"Binary that concatenates the column data of one or more …","t":"FNNNNNNNNNNNNNONHONNNNNN","n":["Args","augment_args","augment_args_for_update","borrow","borrow_mut","cast","command","command_for_update","fmt","from","from_arg_matches","from_arg_matches_mut","from_cast","group_id","input","into","main","output","run","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut"],"q":[[0,"parquet_concat"],[24,"clap_builder::builder::comman [...]
 "parquet_derive":{"doc":"","t":"YYCPPPFPPPGGPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNNNNONNNNNNONNNN","n":["ParquetRecordReader","ParquetRecordWriter","parquet_field","Array","ChronoNaiveDate","ChronoNaiveDateTime","Field","Option","Reference","Slice","ThirdPartyType","Type","TypePath","Uuid","Vec","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","column_reader","column_writer","converted_type","copied_direct_fields","copied_direct_vals","eq","eq","eq","fmt","fmt","fm [...]
 "parquet_derive_test":{"doc":"","t":"FFOOOOONNNNOOOOOOONNOOONOONNNNNOOOONNOOOOOOOOOOOOOONNNNNNOO","n":["ACompleteRecord","APartiallyCompleteRecord","a_bool","a_borrowed_string","a_str","a_string","bool","borrow","borrow","borrow_mut","borrow_mut","borrowed_byte_vec","borrowed_maybe_a_str","borrowed_maybe_a_string","borrowed_maybe_borrowed_byte_vec","borrowed_maybe_byte_vec","byte_vec","byte_vec","cast","cast","date","double","double","eq","float","float","fmt","from","from","from_cast"," [...]
diff --git a/settings.html b/settings.html
index 0ddaf9d70e..d49292e1ac 100644
--- a/settings.html
+++ b/settings.html
@@ -1 +1 @@
-<!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="Settings of Rustdoc"><title>Settings</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843ffd [...]
\ No newline at end of file
+<!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="Settings of Rustdoc"><title>Settings</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843ffd [...]
\ No newline at end of file
diff --git a/src/parquet/column/writer/mod.rs.html b/src/parquet/column/writer/mod.rs.html
index 3a22f33f9c..b6db8fa023 100644
--- a/src/parquet/column/writer/mod.rs.html
+++ b/src/parquet/column/writer/mod.rs.html
@@ -3264,6 +3264,199 @@
 <a href="#3264" id="3264">3264</a>
 <a href="#3265" id="3265">3265</a>
 <a href="#3266" id="3266">3266</a>
+<a href="#3267" id="3267">3267</a>
+<a href="#3268" id="3268">3268</a>
+<a href="#3269" id="3269">3269</a>
+<a href="#3270" id="3270">3270</a>
+<a href="#3271" id="3271">3271</a>
+<a href="#3272" id="3272">3272</a>
+<a href="#3273" id="3273">3273</a>
+<a href="#3274" id="3274">3274</a>
+<a href="#3275" id="3275">3275</a>
+<a href="#3276" id="3276">3276</a>
+<a href="#3277" id="3277">3277</a>
+<a href="#3278" id="3278">3278</a>
+<a href="#3279" id="3279">3279</a>
+<a href="#3280" id="3280">3280</a>
+<a href="#3281" id="3281">3281</a>
+<a href="#3282" id="3282">3282</a>
+<a href="#3283" id="3283">3283</a>
+<a href="#3284" id="3284">3284</a>
+<a href="#3285" id="3285">3285</a>
+<a href="#3286" id="3286">3286</a>
+<a href="#3287" id="3287">3287</a>
+<a href="#3288" id="3288">3288</a>
+<a href="#3289" id="3289">3289</a>
+<a href="#3290" id="3290">3290</a>
+<a href="#3291" id="3291">3291</a>
+<a href="#3292" id="3292">3292</a>
+<a href="#3293" id="3293">3293</a>
+<a href="#3294" id="3294">3294</a>
+<a href="#3295" id="3295">3295</a>
+<a href="#3296" id="3296">3296</a>
+<a href="#3297" id="3297">3297</a>
+<a href="#3298" id="3298">3298</a>
+<a href="#3299" id="3299">3299</a>
+<a href="#3300" id="3300">3300</a>
+<a href="#3301" id="3301">3301</a>
+<a href="#3302" id="3302">3302</a>
+<a href="#3303" id="3303">3303</a>
+<a href="#3304" id="3304">3304</a>
+<a href="#3305" id="3305">3305</a>
+<a href="#3306" id="3306">3306</a>
+<a href="#3307" id="3307">3307</a>
+<a href="#3308" id="3308">3308</a>
+<a href="#3309" id="3309">3309</a>
+<a href="#3310" id="3310">3310</a>
+<a href="#3311" id="3311">3311</a>
+<a href="#3312" id="3312">3312</a>
+<a href="#3313" id="3313">3313</a>
+<a href="#3314" id="3314">3314</a>
+<a href="#3315" id="3315">3315</a>
+<a href="#3316" id="3316">3316</a>
+<a href="#3317" id="3317">3317</a>
+<a href="#3318" id="3318">3318</a>
+<a href="#3319" id="3319">3319</a>
+<a href="#3320" id="3320">3320</a>
+<a href="#3321" id="3321">3321</a>
+<a href="#3322" id="3322">3322</a>
+<a href="#3323" id="3323">3323</a>
+<a href="#3324" id="3324">3324</a>
+<a href="#3325" id="3325">3325</a>
+<a href="#3326" id="3326">3326</a>
+<a href="#3327" id="3327">3327</a>
+<a href="#3328" id="3328">3328</a>
+<a href="#3329" id="3329">3329</a>
+<a href="#3330" id="3330">3330</a>
+<a href="#3331" id="3331">3331</a>
+<a href="#3332" id="3332">3332</a>
+<a href="#3333" id="3333">3333</a>
+<a href="#3334" id="3334">3334</a>
+<a href="#3335" id="3335">3335</a>
+<a href="#3336" id="3336">3336</a>
+<a href="#3337" id="3337">3337</a>
+<a href="#3338" id="3338">3338</a>
+<a href="#3339" id="3339">3339</a>
+<a href="#3340" id="3340">3340</a>
+<a href="#3341" id="3341">3341</a>
+<a href="#3342" id="3342">3342</a>
+<a href="#3343" id="3343">3343</a>
+<a href="#3344" id="3344">3344</a>
+<a href="#3345" id="3345">3345</a>
+<a href="#3346" id="3346">3346</a>
+<a href="#3347" id="3347">3347</a>
+<a href="#3348" id="3348">3348</a>
+<a href="#3349" id="3349">3349</a>
+<a href="#3350" id="3350">3350</a>
+<a href="#3351" id="3351">3351</a>
+<a href="#3352" id="3352">3352</a>
+<a href="#3353" id="3353">3353</a>
+<a href="#3354" id="3354">3354</a>
+<a href="#3355" id="3355">3355</a>
+<a href="#3356" id="3356">3356</a>
+<a href="#3357" id="3357">3357</a>
+<a href="#3358" id="3358">3358</a>
+<a href="#3359" id="3359">3359</a>
+<a href="#3360" id="3360">3360</a>
+<a href="#3361" id="3361">3361</a>
+<a href="#3362" id="3362">3362</a>
+<a href="#3363" id="3363">3363</a>
+<a href="#3364" id="3364">3364</a>
+<a href="#3365" id="3365">3365</a>
+<a href="#3366" id="3366">3366</a>
+<a href="#3367" id="3367">3367</a>
+<a href="#3368" id="3368">3368</a>
+<a href="#3369" id="3369">3369</a>
+<a href="#3370" id="3370">3370</a>
+<a href="#3371" id="3371">3371</a>
+<a href="#3372" id="3372">3372</a>
+<a href="#3373" id="3373">3373</a>
+<a href="#3374" id="3374">3374</a>
+<a href="#3375" id="3375">3375</a>
+<a href="#3376" id="3376">3376</a>
+<a href="#3377" id="3377">3377</a>
+<a href="#3378" id="3378">3378</a>
+<a href="#3379" id="3379">3379</a>
+<a href="#3380" id="3380">3380</a>
+<a href="#3381" id="3381">3381</a>
+<a href="#3382" id="3382">3382</a>
+<a href="#3383" id="3383">3383</a>
+<a href="#3384" id="3384">3384</a>
+<a href="#3385" id="3385">3385</a>
+<a href="#3386" id="3386">3386</a>
+<a href="#3387" id="3387">3387</a>
+<a href="#3388" id="3388">3388</a>
+<a href="#3389" id="3389">3389</a>
+<a href="#3390" id="3390">3390</a>
+<a href="#3391" id="3391">3391</a>
+<a href="#3392" id="3392">3392</a>
+<a href="#3393" id="3393">3393</a>
+<a href="#3394" id="3394">3394</a>
+<a href="#3395" id="3395">3395</a>
+<a href="#3396" id="3396">3396</a>
+<a href="#3397" id="3397">3397</a>
+<a href="#3398" id="3398">3398</a>
+<a href="#3399" id="3399">3399</a>
+<a href="#3400" id="3400">3400</a>
+<a href="#3401" id="3401">3401</a>
+<a href="#3402" id="3402">3402</a>
+<a href="#3403" id="3403">3403</a>
+<a href="#3404" id="3404">3404</a>
+<a href="#3405" id="3405">3405</a>
+<a href="#3406" id="3406">3406</a>
+<a href="#3407" id="3407">3407</a>
+<a href="#3408" id="3408">3408</a>
+<a href="#3409" id="3409">3409</a>
+<a href="#3410" id="3410">3410</a>
+<a href="#3411" id="3411">3411</a>
+<a href="#3412" id="3412">3412</a>
+<a href="#3413" id="3413">3413</a>
+<a href="#3414" id="3414">3414</a>
+<a href="#3415" id="3415">3415</a>
+<a href="#3416" id="3416">3416</a>
+<a href="#3417" id="3417">3417</a>
+<a href="#3418" id="3418">3418</a>
+<a href="#3419" id="3419">3419</a>
+<a href="#3420" id="3420">3420</a>
+<a href="#3421" id="3421">3421</a>
+<a href="#3422" id="3422">3422</a>
+<a href="#3423" id="3423">3423</a>
+<a href="#3424" id="3424">3424</a>
+<a href="#3425" id="3425">3425</a>
+<a href="#3426" id="3426">3426</a>
+<a href="#3427" id="3427">3427</a>
+<a href="#3428" id="3428">3428</a>
+<a href="#3429" id="3429">3429</a>
+<a href="#3430" id="3430">3430</a>
+<a href="#3431" id="3431">3431</a>
+<a href="#3432" id="3432">3432</a>
+<a href="#3433" id="3433">3433</a>
+<a href="#3434" id="3434">3434</a>
+<a href="#3435" id="3435">3435</a>
+<a href="#3436" id="3436">3436</a>
+<a href="#3437" id="3437">3437</a>
+<a href="#3438" id="3438">3438</a>
+<a href="#3439" id="3439">3439</a>
+<a href="#3440" id="3440">3440</a>
+<a href="#3441" id="3441">3441</a>
+<a href="#3442" id="3442">3442</a>
+<a href="#3443" id="3443">3443</a>
+<a href="#3444" id="3444">3444</a>
+<a href="#3445" id="3445">3445</a>
+<a href="#3446" id="3446">3446</a>
+<a href="#3447" id="3447">3447</a>
+<a href="#3448" id="3448">3448</a>
+<a href="#3449" id="3449">3449</a>
+<a href="#3450" id="3450">3450</a>
+<a href="#3451" id="3451">3451</a>
+<a href="#3452" id="3452">3452</a>
+<a href="#3453" id="3453">3453</a>
+<a href="#3454" id="3454">3454</a>
+<a href="#3455" id="3455">3455</a>
+<a href="#3456" id="3456">3456</a>
+<a href="#3457" id="3457">3457</a>
+<a href="#3458" id="3458">3458</a>
+<a href="#3459" id="3459">3459</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
@@ -3287,7 +3480,7 @@
 <span class="kw">use </span>half::f16;
 
 <span class="kw">use </span><span class="kw">crate</span>::bloom_filter::Sbbf;
-<span class="kw">use </span><span class="kw">crate</span>::format::{ColumnIndex, OffsetIndex};
+<span class="kw">use </span><span class="kw">crate</span>::format::{BoundaryOrder, ColumnIndex, OffsetIndex};
 <span class="kw">use </span>std::collections::{BTreeSet, VecDeque};
 <span class="kw">use </span>std::str;
 
@@ -3494,6 +3687,13 @@
     <span class="comment">// column index and offset index
     </span>column_index_builder: ColumnIndexBuilder,
     offset_index_builder: OffsetIndexBuilder,
+
+    <span class="comment">// Below fields used to incrementally check boundary order across data pages.
+    // We assume they are ascending/descending until proven wrong.
+    </span>data_page_boundary_ascending: bool,
+    data_page_boundary_descending: bool,
+    <span class="doccomment">/// (min, max)
+    </span>last_non_null_data_page_min_max: <span class="prelude-ty">Option</span>&lt;(E::T, E::T)&gt;,
 }
 
 <span class="kw">impl</span>&lt;<span class="lifetime">&#39;a</span>, E: ColumnValueEncoder&gt; GenericColumnWriter&lt;<span class="lifetime">&#39;a</span>, E&gt; {
@@ -3545,6 +3745,9 @@
             column_index_builder: ColumnIndexBuilder::new(),
             offset_index_builder: OffsetIndexBuilder::new(),
             encodings,
+            data_page_boundary_ascending: <span class="bool-val">true</span>,
+            data_page_boundary_descending: <span class="bool-val">true</span>,
+            last_non_null_data_page_min_max: <span class="prelude-val">None</span>,
         }
     }
 
@@ -3733,6 +3936,18 @@
         <span class="kw">let </span>metadata = <span class="self">self</span>.write_column_metadata()<span class="question-mark">?</span>;
         <span class="self">self</span>.page_writer.close()<span class="question-mark">?</span>;
 
+        <span class="kw">let </span>boundary_order = <span class="kw">match </span>(
+            <span class="self">self</span>.data_page_boundary_ascending,
+            <span class="self">self</span>.data_page_boundary_descending,
+        ) {
+            <span class="comment">// If the lists are composed of equal elements then will be marked as ascending
+            // (Also the case if all pages are null pages)
+            </span>(<span class="bool-val">true</span>, <span class="kw">_</span>) =&gt; BoundaryOrder::ASCENDING,
+            (<span class="bool-val">false</span>, <span class="bool-val">true</span>) =&gt; BoundaryOrder::DESCENDING,
+            (<span class="bool-val">false</span>, <span class="bool-val">false</span>) =&gt; BoundaryOrder::UNORDERED,
+        };
+        <span class="self">self</span>.column_index_builder.set_boundary_order(boundary_order);
+
         <span class="kw">let </span>column_index = <span class="self">self
             </span>.column_index_builder
             .valid()
@@ -3876,7 +4091,7 @@
     }
 
     <span class="doccomment">/// Update the column index and offset index when adding the data page
-    </span><span class="kw">fn </span>update_column_offset_index(<span class="kw-2">&amp;mut </span><span class="self">self</span>, page_statistics: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>Statistics&gt;) {
+    </span><span class="kw">fn </span>update_column_offset_index(<span class="kw-2">&amp;mut </span><span class="self">self</span>, page_statistics: <span class="prelude-ty">Option</span>&lt;<span class="kw-2">&amp;</span>ValueStatistics&lt;E::T&gt;&gt;) {
         <span class="comment">// update the column index
         </span><span class="kw">let </span>null_page =
             (<span class="self">self</span>.page_metrics.num_buffered_rows <span class="kw">as </span>u64) == <span class="self">self</span>.page_metrics.num_page_nulls;
@@ -3897,6 +4112,30 @@
                     <span class="self">self</span>.column_index_builder.to_invalid();
                 }
                 <span class="prelude-val">Some</span>(stat) =&gt; {
+                    <span class="comment">// Check if min/max are still ascending/descending across pages
+                    </span><span class="kw">let </span>new_min = stat.min();
+                    <span class="kw">let </span>new_max = stat.max();
+                    <span class="kw">if let </span><span class="prelude-val">Some</span>((last_min, last_max)) = <span class="kw-2">&amp;</span><span class="self">self</span>.last_non_null_data_page_min_max {
+                        <span class="kw">if </span><span class="self">self</span>.data_page_boundary_ascending {
+                            <span class="comment">// If last min/max are greater than new min/max then not ascending anymore
+                            </span><span class="kw">let </span>not_ascending = compare_greater(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, last_min, new_min)
+                                || compare_greater(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, last_max, new_max);
+                            <span class="kw">if </span>not_ascending {
+                                <span class="self">self</span>.data_page_boundary_ascending = <span class="bool-val">false</span>;
+                            }
+                        }
+
+                        <span class="kw">if </span><span class="self">self</span>.data_page_boundary_descending {
+                            <span class="comment">// If new min/max are greater than last min/max then not descending anymore
+                            </span><span class="kw">let </span>not_descending = compare_greater(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, new_min, last_min)
+                                || compare_greater(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, new_max, last_max);
+                            <span class="kw">if </span>not_descending {
+                                <span class="self">self</span>.data_page_boundary_descending = <span class="bool-val">false</span>;
+                            }
+                        }
+                    }
+                    <span class="self">self</span>.last_non_null_data_page_min_max = <span class="prelude-val">Some</span>((new_min.clone(), new_max.clone()));
+
                     <span class="comment">// We only truncate if the data is represented as binary
                     </span><span class="kw">match </span><span class="self">self</span>.descr.physical_type() {
                         Type::BYTE_ARRAY | Type::FIXED_LEN_BYTE_ARRAY =&gt; {
@@ -3969,7 +4208,7 @@
             (<span class="prelude-val">Some</span>(min), <span class="prelude-val">Some</span>(max)) =&gt; {
                 update_min(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, <span class="kw-2">&amp;</span>min, <span class="kw-2">&amp;mut </span><span class="self">self</span>.column_metrics.min_column_value);
                 update_max(<span class="kw-2">&amp;</span><span class="self">self</span>.descr, <span class="kw-2">&amp;</span>max, <span class="kw-2">&amp;mut </span><span class="self">self</span>.column_metrics.max_column_value);
-                <span class="prelude-val">Some</span>(Statistics::new(
+                <span class="prelude-val">Some</span>(ValueStatistics::new(
                     <span class="prelude-val">Some</span>(min),
                     <span class="prelude-val">Some</span>(max),
                     <span class="prelude-val">None</span>,
@@ -3982,6 +4221,7 @@
 
         <span class="comment">// update column and offset index
         </span><span class="self">self</span>.update_column_offset_index(page_statistics.as_ref());
+        <span class="kw">let </span>page_statistics = page_statistics.map(Statistics::from);
 
         <span class="kw">let </span>compressed_page = <span class="kw">match </span><span class="self">self</span>.props.writer_version() {
             WriterVersion::PARQUET_1_0 =&gt; {
@@ -5835,7 +6075,7 @@
         <span class="comment">// column index
         </span><span class="macro">assert_eq!</span>(<span class="number">1</span>, column_index.null_pages.len());
         <span class="macro">assert_eq!</span>(<span class="number">1</span>, offset_index.page_locations.len());
-        <span class="macro">assert_eq!</span>(BoundaryOrder::UNORDERED, column_index.boundary_order);
+        <span class="macro">assert_eq!</span>(BoundaryOrder::ASCENDING, column_index.boundary_order);
         <span class="macro">assert!</span>(!column_index.null_pages[<span class="number">0</span>]);
         <span class="macro">assert_eq!</span>(<span class="number">0</span>, column_index.null_counts.as_ref().unwrap()[<span class="number">0</span>]);
 
@@ -5902,7 +6142,7 @@
         <span class="comment">// column index
         </span><span class="macro">assert_eq!</span>(<span class="number">1</span>, column_index.null_pages.len());
         <span class="macro">assert_eq!</span>(<span class="number">1</span>, offset_index.page_locations.len());
-        <span class="macro">assert_eq!</span>(BoundaryOrder::UNORDERED, column_index.boundary_order);
+        <span class="macro">assert_eq!</span>(BoundaryOrder::ASCENDING, column_index.boundary_order);
         <span class="macro">assert!</span>(!column_index.null_pages[<span class="number">0</span>]);
         <span class="macro">assert_eq!</span>(<span class="number">0</span>, column_index.null_counts.as_ref().unwrap()[<span class="number">0</span>]);
 
@@ -6157,6 +6397,158 @@
         <span class="macro">assert!</span>(incremented.is_none())
     }
 
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_boundary_order() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>descr = Arc::new(get_test_column_descr::&lt;Int32Type&gt;(<span class="number">1</span>, <span class="number">0</span>));
+        <span class="comment">// min max both ascending
+        </span><span class="kw">let </span>column_close_result = write_multiple_pages::&lt;Int32Type&gt;(
+            <span class="kw-2">&amp;</span>descr,
+            <span class="kw-2">&amp;</span>[
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">10</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">5</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">5</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)],
+            ],
+        )<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::ASCENDING);
+
+        <span class="comment">// min max both descending
+        </span><span class="kw">let </span>column_close_result = write_multiple_pages::&lt;Int32Type&gt;(
+            <span class="kw-2">&amp;</span>descr,
+            <span class="kw-2">&amp;</span>[
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">5</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">5</span>), <span class="prelude-val">Some</span>(<span class="number">0</span>)],
+            ],
+        )<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::DESCENDING);
+
+        <span class="comment">// min max both equal
+        </span><span class="kw">let </span>column_close_result = write_multiple_pages::&lt;Int32Type&gt;(
+            <span class="kw-2">&amp;</span>descr,
+            <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)], <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>], <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)]],
+        )<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::ASCENDING);
+
+        <span class="comment">// only nulls
+        </span><span class="kw">let </span>column_close_result =
+            write_multiple_pages::&lt;Int32Type&gt;(<span class="kw-2">&amp;</span>descr, <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>], <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>], <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>]])<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::ASCENDING);
+
+        <span class="comment">// one page
+        </span><span class="kw">let </span>column_close_result =
+            write_multiple_pages::&lt;Int32Type&gt;(<span class="kw-2">&amp;</span>descr, <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">10</span>)]])<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::ASCENDING);
+
+        <span class="comment">// one non-null page
+        </span><span class="kw">let </span>column_close_result =
+            write_multiple_pages::&lt;Int32Type&gt;(<span class="kw-2">&amp;</span>descr, <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">10</span>)], <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>]])<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::ASCENDING);
+
+        <span class="comment">// min max both unordered
+        </span><span class="kw">let </span>column_close_result = write_multiple_pages::&lt;Int32Type&gt;(
+            <span class="kw-2">&amp;</span>descr,
+            <span class="kw-2">&amp;</span>[
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">10</span>), <span class="prelude-val">Some</span>(<span class="number">11</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">11</span>), <span class="prelude-val">Some</span>(<span class="number">16</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(-<span class="number">5</span>), <span class="prelude-val">Some</span>(<span class="number">0</span>)],
+            ],
+        )<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::UNORDERED);
+
+        <span class="comment">// min max both ordered in different orders
+        </span><span class="kw">let </span>column_close_result = write_multiple_pages::&lt;Int32Type&gt;(
+            <span class="kw-2">&amp;</span>descr,
+            <span class="kw-2">&amp;</span>[
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="prelude-val">Some</span>(<span class="number">9</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">2</span>), <span class="prelude-val">Some</span>(<span class="number">8</span>)],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">None</span>],
+                <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(<span class="number">3</span>), <span class="prelude-val">Some</span>(<span class="number">7</span>)],
+            ],
+        )<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::UNORDERED);
+
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_boundary_order_logical_type() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="comment">// ensure that logical types account for different sort order than underlying
+        // physical type representation
+        </span><span class="kw">let </span>f16_descr = Arc::new(get_test_float16_column_descr(<span class="number">1</span>, <span class="number">0</span>));
+        <span class="kw">let </span>fba_descr = {
+            <span class="kw">let </span>tpe = SchemaType::primitive_type_builder(
+                <span class="string">&quot;col&quot;</span>,
+                FixedLenByteArrayType::get_physical_type(),
+            )
+            .with_length(<span class="number">2</span>)
+            .build()<span class="question-mark">?</span>;
+            Arc::new(ColumnDescriptor::new(
+                Arc::new(tpe),
+                <span class="number">1</span>,
+                <span class="number">0</span>,
+                ColumnPath::from(<span class="string">&quot;col&quot;</span>),
+            ))
+        };
+
+        <span class="kw">let </span>values: <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-ty">Option</span>&lt;FixedLenByteArray&gt;]] = <span class="kw-2">&amp;</span>[
+            <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(FixedLenByteArray::from(ByteArray::from(f16::ONE)))],
+            <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(FixedLenByteArray::from(ByteArray::from(f16::ZERO)))],
+            <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(FixedLenByteArray::from(ByteArray::from(
+                f16::NEG_ZERO,
+            )))],
+            <span class="kw-2">&amp;</span>[<span class="prelude-val">Some</span>(FixedLenByteArray::from(ByteArray::from(f16::NEG_ONE)))],
+        ];
+
+        <span class="comment">// f16 descending
+        </span><span class="kw">let </span>column_close_result =
+            write_multiple_pages::&lt;FixedLenByteArrayType&gt;(<span class="kw-2">&amp;</span>f16_descr, values)<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::DESCENDING);
+
+        <span class="comment">// same bytes, but fba unordered
+        </span><span class="kw">let </span>column_close_result =
+            write_multiple_pages::&lt;FixedLenByteArrayType&gt;(<span class="kw-2">&amp;</span>fba_descr, values)<span class="question-mark">?</span>;
+        <span class="kw">let </span>boundary_order = column_close_result.column_index.unwrap().boundary_order;
+        <span class="macro">assert_eq!</span>(boundary_order, BoundaryOrder::UNORDERED);
+
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="kw">fn </span>write_multiple_pages&lt;T: DataType&gt;(
+        column_descr: <span class="kw-2">&amp;</span>Arc&lt;ColumnDescriptor&gt;,
+        pages: <span class="kw-2">&amp;</span>[<span class="kw-2">&amp;</span>[<span class="prelude-ty">Option</span>&lt;T::T&gt;]],
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;ColumnCloseResult&gt; {
+        <span class="kw">let </span>column_writer = get_column_writer(
+            column_descr.clone(),
+            Default::default(),
+            get_test_page_writer(),
+        );
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = get_typed_column_writer::&lt;T&gt;(column_writer);
+
+        <span class="kw">for </span><span class="kw-2">&amp;</span>page <span class="kw">in </span>pages {
+            <span class="kw">let </span>values = page.iter().filter_map(Clone::clone).collect::&lt;Vec&lt;<span class="kw">_</span>&gt;&gt;();
+            <span class="kw">let </span>def_levels = page
+                .iter()
+                .map(|maybe_value| <span class="kw">if </span>maybe_value.is_some() { <span class="number">1 </span>} <span class="kw">else </span>{ <span class="number">0 </span>})
+                .collect::&lt;Vec&lt;<span class="kw">_</span>&gt;&gt;();
+            writer.write_batch(<span class="kw-2">&amp;</span>values, <span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span>def_levels), <span class="prelude-val">None</span>)<span class="question-mark">?</span>;
+            writer.flush_data_pages()<span class="question-mark">?</span>;
+        }
+
+        writer.close()
+    }
+
     <span class="doccomment">/// Performs write-read roundtrip with randomly generated values and levels.
     /// `max_size` is maximum number of values or levels (if `max_def_level` &gt; 0) to write
     /// for a column.
@@ -6463,8 +6855,7 @@
     ) -&gt; ValueStatistics&lt;FixedLenByteArray&gt; {
         <span class="kw">let </span>page_writer = get_test_page_writer();
         <span class="kw">let </span>props = Default::default();
-        <span class="kw">let </span><span class="kw-2">mut </span>writer =
-            get_test_float16_column_writer::&lt;FixedLenByteArrayType&gt;(page_writer, <span class="number">0</span>, <span class="number">0</span>, props);
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = get_test_float16_column_writer(page_writer, <span class="number">0</span>, <span class="number">0</span>, props);
         writer.write_batch(values, <span class="prelude-val">None</span>, <span class="prelude-val">None</span>).unwrap();
 
         <span class="kw">let </span>metadata = writer.close().unwrap().metadata;
@@ -6475,30 +6866,25 @@
         }
     }
 
-    <span class="kw">fn </span>get_test_float16_column_writer&lt;T: DataType&gt;(
+    <span class="kw">fn </span>get_test_float16_column_writer(
         page_writer: Box&lt;<span class="kw">dyn </span>PageWriter&gt;,
         max_def_level: i16,
         max_rep_level: i16,
         props: WriterPropertiesPtr,
-    ) -&gt; ColumnWriterImpl&lt;<span class="lifetime">&#39;static</span>, T&gt; {
-        <span class="kw">let </span>descr = Arc::new(get_test_float16_column_descr::&lt;T&gt;(
-            max_def_level,
-            max_rep_level,
-        ));
+    ) -&gt; ColumnWriterImpl&lt;<span class="lifetime">&#39;static</span>, FixedLenByteArrayType&gt; {
+        <span class="kw">let </span>descr = Arc::new(get_test_float16_column_descr(max_def_level, max_rep_level));
         <span class="kw">let </span>column_writer = get_column_writer(descr, props, page_writer);
-        get_typed_column_writer::&lt;T&gt;(column_writer)
+        get_typed_column_writer::&lt;FixedLenByteArrayType&gt;(column_writer)
     }
 
-    <span class="kw">fn </span>get_test_float16_column_descr&lt;T: DataType&gt;(
-        max_def_level: i16,
-        max_rep_level: i16,
-    ) -&gt; ColumnDescriptor {
+    <span class="kw">fn </span>get_test_float16_column_descr(max_def_level: i16, max_rep_level: i16) -&gt; ColumnDescriptor {
         <span class="kw">let </span>path = ColumnPath::from(<span class="string">&quot;col&quot;</span>);
-        <span class="kw">let </span>tpe = SchemaType::primitive_type_builder(<span class="string">&quot;col&quot;</span>, T::get_physical_type())
-            .with_length(<span class="number">2</span>)
-            .with_logical_type(<span class="prelude-val">Some</span>(LogicalType::Float16))
-            .build()
-            .unwrap();
+        <span class="kw">let </span>tpe =
+            SchemaType::primitive_type_builder(<span class="string">&quot;col&quot;</span>, FixedLenByteArrayType::get_physical_type())
+                .with_length(<span class="number">2</span>)
+                .with_logical_type(<span class="prelude-val">Some</span>(LogicalType::Float16))
+                .build()
+                .unwrap();
         ColumnDescriptor::new(Arc::new(tpe), max_def_level, max_rep_level, path)
     }
 
diff --git a/src/parquet/file/metadata.rs.html b/src/parquet/file/metadata.rs.html
index c4eb6fa9e7..c0af5c5620 100644
--- a/src/parquet/file/metadata.rs.html
+++ b/src/parquet/file/metadata.rs.html
@@ -1139,6 +1139,9 @@
 <a href="#1139" id="1139">1139</a>
 <a href="#1140" id="1140">1140</a>
 <a href="#1141" id="1141">1141</a>
+<a href="#1142" id="1142">1142</a>
+<a href="#1143" id="1143">1143</a>
+<a href="#1144" id="1144">1144</a>
 </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
@@ -2026,9 +2029,8 @@
     null_pages: Vec&lt;bool&gt;,
     min_values: Vec&lt;Vec&lt;u8&gt;&gt;,
     max_values: Vec&lt;Vec&lt;u8&gt;&gt;,
-    <span class="comment">// TODO: calc the order for all pages in this column
-    </span>boundary_order: BoundaryOrder,
     null_counts: Vec&lt;i64&gt;,
+    boundary_order: BoundaryOrder,
     <span class="comment">// If one page can&#39;t get build index, need to ignore all index in this column
     </span>valid: bool,
 }
@@ -2045,8 +2047,8 @@
             null_pages: Vec::new(),
             min_values: Vec::new(),
             max_values: Vec::new(),
-            boundary_order: BoundaryOrder::UNORDERED,
             null_counts: Vec::new(),
+            boundary_order: BoundaryOrder::UNORDERED,
             valid: <span class="bool-val">true</span>,
         }
     }
@@ -2064,6 +2066,10 @@
         <span class="self">self</span>.null_counts.push(null_count);
     }
 
+    <span class="kw">pub fn </span>set_boundary_order(<span class="kw-2">&amp;mut </span><span class="self">self</span>, boundary_order: BoundaryOrder) {
+        <span class="self">self</span>.boundary_order = boundary_order;
+    }
+
     <span class="kw">pub fn </span>to_invalid(<span class="kw-2">&amp;mut </span><span class="self">self</span>) {
         <span class="self">self</span>.valid = <span class="bool-val">false</span>;
     }
diff --git a/type.impl/parquet/column/writer/struct.GenericColumnWriter.js b/type.impl/parquet/column/writer/struct.GenericColumnWriter.js
index 60a5623a48..8d39dca338 100644
--- a/type.impl/parquet/column/writer/struct.GenericColumnWriter.js
+++ b/type.impl/parquet/column/writer/struct.GenericColumnWriter.js
@@ -1,3 +1,3 @@
 (function() {var type_impls = {
-"parquet":[["<details class=\"toggle implementors-toggle\" open><summary><section id=\"impl-GenericColumnWriter%3C'a,+E%3E\" class=\"impl\"><a class=\"src rightside\" href=\"src/parquet/column/writer/mod.rs.html#233-1021\">source</a><a href=\"#impl-GenericColumnWriter%3C'a,+E%3E\" class=\"anchor\">§</a><h3 class=\"code-header\">impl&lt;'a, E: <a class=\"trait\" href=\"parquet/column/writer/encoder/trait.ColumnValueEncoder.html\" title=\"trait parquet::column::writer::encoder::ColumnValue [...]
+"parquet":[["<details class=\"toggle implementors-toggle\" open><summary><section id=\"impl-GenericColumnWriter%3C'a,+E%3E\" class=\"impl\"><a class=\"src rightside\" href=\"src/parquet/column/writer/mod.rs.html#240-1068\">source</a><a href=\"#impl-GenericColumnWriter%3C'a,+E%3E\" class=\"anchor\">§</a><h3 class=\"code-header\">impl&lt;'a, E: <a class=\"trait\" href=\"parquet/column/writer/encoder/trait.ColumnValueEncoder.html\" title=\"trait parquet::column::writer::encoder::ColumnValue [...]
 };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})()
\ No newline at end of file