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 4718100731c deploy: 158e54da2cd8a2ac4e54744ad8861aded0d43281
4718100731c is described below

commit 4718100731c3c414b6c5910259046146938d5f8b
Author: alamb <[email protected]>
AuthorDate: Sat May 11 10:00:15 2024 +0000

    deploy: 158e54da2cd8a2ac4e54744ad8861aded0d43281
---
 arrow/all.html                                     |   2 +-
 arrow/util/data_gen/fn.create_random_array.html    |   2 +-
 .../util/data_gen/fn.create_random_list_array.html |   2 +-
 .../util/data_gen/fn.create_random_map_array.html  |   6 +
 .../data_gen/fn.create_random_null_buffer.html     |   2 +-
 arrow/util/data_gen/fn.create_random_offsets.html  |   2 +-
 .../data_gen/fn.create_random_struct_array.html    |   6 +
 arrow/util/data_gen/index.html                     |   4 +-
 arrow/util/data_gen/sidebar-items.js               |   2 +-
 search-index.js                                    |   2 +-
 search.desc/arrow/arrow-desc-0-.js                 |   2 +-
 src/arrow/util/data_gen.rs.html                    | 556 +++++++++++++++++++--
 12 files changed, 539 insertions(+), 49 deletions(-)

diff --git a/arrow/all.html b/arrow/all.html
index c311da1643d..f3652268006 100644
--- a/arrow/all.html
+++ b/arrow/all.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 
all items in this crate"><title>List of all items in this 
crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d
 [...]
\ 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 
all items in this crate"><title>List of all items in this 
crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d
 [...]
\ No newline at end of file
diff --git a/arrow/util/data_gen/fn.create_random_array.html 
b/arrow/util/data_gen/fn.create_random_array.html
index 104d893f825..e21bc5ff97e 100644
--- a/arrow/util/data_gen/fn.create_random_array.html
+++ b/arrow/util/data_gen/fn.create_random_array.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="Create a 
random ArrayRef from a DataType with a length, null density and true density 
(for BooleanArray)."><title>create_random_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46
 [...]
+<!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="Create a 
random ArrayRef from a DataType with a length, null density and true density 
(for BooleanArray)."><title>create_random_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46
 [...]
     field: &amp;<a class="struct" href="../../datatypes/struct.Field.html" 
title="struct arrow::datatypes::Field">Field</a>,
     size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>,
     null_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>,
diff --git a/arrow/util/data_gen/fn.create_random_list_array.html 
b/arrow/util/data_gen/fn.create_random_list_array.html
index 1c70ca83a72..70357f8dd5c 100644
--- a/arrow/util/data_gen/fn.create_random_list_array.html
+++ b/arrow/util/data_gen/fn.create_random_list_array.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 `create_random_list_array` fn in crate 
`arrow`."><title>create_random_list_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.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="API 
documentation for the Rust `create_random_list_array` fn in crate 
`arrow`."><title>create_random_list_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.wof
 [...]
     field: &amp;<a class="struct" href="../../datatypes/struct.Field.html" 
title="struct arrow::datatypes::Field">Field</a>,
     size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>,
     null_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>,
diff --git a/arrow/util/data_gen/fn.create_random_map_array.html 
b/arrow/util/data_gen/fn.create_random_map_array.html
new file mode 100644
index 00000000000..5dabfaeeaae
--- /dev/null
+++ b/arrow/util/data_gen/fn.create_random_map_array.html
@@ -0,0 +1,6 @@
+<!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 `create_random_map_array` fn in crate 
`arrow`."><title>create_random_map_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2
 [...]
+    field: &amp;<a class="struct" href="../../datatypes/struct.Field.html" 
title="struct arrow::datatypes::Field">Field</a>,
+    size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>,
+    null_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>,
+    true_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>
+) -&gt; <a class="type" href="../../error/type.Result.html" title="type 
arrow::error::Result">Result</a>&lt;<a class="type" 
href="../../array/type.ArrayRef.html" title="type 
arrow::array::ArrayRef">ArrayRef</a>&gt;</code></pre></section></div></main></body></html>
\ No newline at end of file
diff --git a/arrow/util/data_gen/fn.create_random_null_buffer.html 
b/arrow/util/data_gen/fn.create_random_null_buffer.html
index cd53411d43d..9eeed1b208c 100644
--- a/arrow/util/data_gen/fn.create_random_null_buffer.html
+++ b/arrow/util/data_gen/fn.create_random_null_buffer.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 `create_random_null_buffer` fn in crate 
`arrow`."><title>create_random_null_buffer in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.w
 [...]
\ 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 `create_random_null_buffer` fn in crate 
`arrow`."><title>create_random_null_buffer in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.w
 [...]
\ No newline at end of file
diff --git a/arrow/util/data_gen/fn.create_random_offsets.html 
b/arrow/util/data_gen/fn.create_random_offsets.html
index fd1b27b539d..a367af8f95c 100644
--- a/arrow/util/data_gen/fn.create_random_offsets.html
+++ b/arrow/util/data_gen/fn.create_random_offsets.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="Generate 
random offsets for list arrays"><title>create_random_offsets in 
arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2
 [...]
+<!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="Generate 
random offsets for list arrays"><title>create_random_offsets in 
arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2
 [...]
     size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>,
     min: T,
     max: T
diff --git a/arrow/util/data_gen/fn.create_random_struct_array.html 
b/arrow/util/data_gen/fn.create_random_struct_array.html
new file mode 100644
index 00000000000..70bf6187c77
--- /dev/null
+++ b/arrow/util/data_gen/fn.create_random_struct_array.html
@@ -0,0 +1,6 @@
+<!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 `create_random_struct_array` fn in crate 
`arrow`."><title>create_random_struct_array in arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf
 [...]
+    field: &amp;<a class="struct" href="../../datatypes/struct.Field.html" 
title="struct arrow::datatypes::Field">Field</a>,
+    size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a>,
+    null_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>,
+    true_density: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.f32.html";>f32</a>
+) -&gt; <a class="type" href="../../error/type.Result.html" title="type 
arrow::error::Result">Result</a>&lt;<a class="type" 
href="../../array/type.ArrayRef.html" title="type 
arrow::array::ArrayRef">ArrayRef</a>&gt;</code></pre></section></div></main></body></html>
\ No newline at end of file
diff --git a/arrow/util/data_gen/index.html b/arrow/util/data_gen/index.html
index 9f803ac345c..5bf70dbd9e7 100644
--- a/arrow/util/data_gen/index.html
+++ b/arrow/util/data_gen/index.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="Utilities 
to generate random arrays and batches"><title>arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-
 [...]
+<!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="Utilities 
to generate random arrays and batches"><title>arrow::util::data_gen - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-
 [...]
 </div></details><h2 id="functions" class="section-header">Functions<a 
href="#functions" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name"><a class="fn" href="fn.create_random_array.html" title="fn 
arrow::util::data_gen::create_random_array">create_random_array</a></div><div 
class="desc docblock-short">Create a random <a 
href="../../array/type.ArrayRef.html" title="type 
arrow::array::ArrayRef">ArrayRef</a> from a <a 
href="../../datatypes/enum.DataType.html" title= [...]
-null density and true density (for <a 
href="../../array/struct.BooleanArray.html" title="struct 
arrow::array::BooleanArray">BooleanArray</a>).</div></li><li><div 
class="item-name"><a class="fn" href="fn.create_random_batch.html" title="fn 
arrow::util::data_gen::create_random_batch">create_random_batch</a></div><div 
class="desc docblock-short">Create a random <a 
href="../../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a> from a schema< [...]
\ No newline at end of file
+null density and true density (for <a 
href="../../array/struct.BooleanArray.html" title="struct 
arrow::array::BooleanArray">BooleanArray</a>).</div></li><li><div 
class="item-name"><a class="fn" href="fn.create_random_batch.html" title="fn 
arrow::util::data_gen::create_random_batch">create_random_batch</a></div><div 
class="desc docblock-short">Create a random <a 
href="../../record_batch/struct.RecordBatch.html" title="struct 
arrow::record_batch::RecordBatch">RecordBatch</a> from a schema< [...]
\ No newline at end of file
diff --git a/arrow/util/data_gen/sidebar-items.js 
b/arrow/util/data_gen/sidebar-items.js
index a37a12bcfb7..1826ffafb07 100644
--- a/arrow/util/data_gen/sidebar-items.js
+++ b/arrow/util/data_gen/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = 
{"fn":["create_random_array","create_random_batch","create_random_list_array","create_random_null_buffer","create_random_offsets"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = 
{"fn":["create_random_array","create_random_batch","create_random_list_array","create_random_map_array","create_random_null_buffer","create_random_offsets","create_random_struct_array"]};
\ No newline at end of file
diff --git a/search-index.js b/search-index.js
index 8574a36de22..cd548fdfe7b 100644
--- a/search-index.js
+++ b/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["arrow",{"t":"CCCCECQQCCCEECCECCCSKPKKPKKFFIFIKKKKPIIIIIIPFFFIFGGTTTFIIIIIIKIIIIIIPFIIIIIIIIIIIIIFFIFFIPIIIIIIIIIIIIFFFFFFFIFIIITIIIIIIIIIIIIIIIIIIIIIIIIIIIIRIIIIIIIIIIPIITTFIFFFRFFFTKTFFFIFFFFKKFFIIIIIIPFFIIIIIIIIIIIIIIIIIIIIIIIIFFIIIIIIIIIIIIIIIIFFPTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNMNMNOOCOOOOOOOOOOMMNNNNNNNNNNNNNNNNMNMNNNNNHMNNMNNMNHNHMNNMNNHMNHHHHNHMNNHMNHNHMNHNHNNNNHMNHOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNOOOOOONNHNCNNNNOCNNNOONNNNNNNN
 [...]
+["arrow",{"t":"CCCCECQQCCCEECCECCCSKPKKPKKFFIFIKKKKPIIIIIIPFFFIFGGTTTFIIIIIIKIIIIIIPFIIIIIIIIIIIIIFFIFFIPIIIIIIIIIIIIFFFFFFFIFIIITIIIIIIIIIIIIIIIIIIIIIIIIIIIIRIIIIIIIIIIPIITTFIFFFRFFFTKTFFFIFFFFKKFFIIIIIIPFFIIIIIIIIIIIIIIIIIIIIIIIIFFIIIIIIIIIIIIIIIIFFPTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNMNMNOOCOOOOOOOOOOMMNNNNNNNNNNNNNNNNMNMNNNNNHMNNMNNMNHNHMNNMNNHMNHHHHNHMNNHMNHNHMNHNHNNNNHMNHOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONNOOOOOONNHNCNNNNOCNNNOONNNNNNNN
 [...]
 
["arrow_arith",{"t":"CCCCCCFFKSSFMNNNMNNNHHHHHHHQHHHHNNNNNNNNNNNNNNNMNNNNNNNNNHOHHHHMNNNHOHHHHHHHHHOHHHNNNNNNNNNNNNHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHPPKPRKPPGPPPKHMMMMMHMMHNNNNNQHHHHHNNNHHNHHHQHQQQHHMMMMMHMMQHNNNNQQNKGPPPPKPPPPPPPPPPNNNNHMHHHHHNNNNNNHHHHNHHHHHHHHHHHMHHMHHMMHQHHNNNNNHHHHH","n":["aggregate","arity","bitwise","boolean","numeric","temporal","MaxAccumulator","MinAccumulator","NumericAccumulator","PREFERRED_VECTOR_SIZE","PREFERRED_VECTOR_SIZE_NON_NULL","SumAccumulator","accu
 [...]
 
["arrow_array",{"t":"KKKTTTFFFKKFTMMCCCCMOMCMMQQQQQQQQCCMOOMMCOMMMMMMCMMCOOCCMOMMCCCCMKTTTTMMMMMMNNNNNNNNNNMMMMMQQMMMMMMKKKIEIIFIIIIFIIIIFFIIIIFFFITIIIIIIIIIIIIIIRIIIIFFFKTFFIIFIIIIIIIIFFIIIIIIIIFOMNNNNNNNNNNNNNNNNNNNNNNNCCOOOCCMNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOCONNOOCCNNMNMNHMNMNNNNNOOOOOOOOONNMOOOOOOOOOMNOOOOCNNHCOHHMCNNMNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOMNOOOOOCHOCOOOOOMNCCMNOCMOOOOOOOOOOOOOOOOOOOOOMMOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
 [...]
 
["arrow_avro",{"t":"CCCCFFPPGPPPPPPPPPPPGFPPPPPPNNNNNNNNNNNNNNNNNNNONONNNNNNNNNNNNNNNNNNNHOOOONNNNNNNNNNNNNNNNNNNNNNSGPPPNNNNNNNNNNNNNCCHHCFFGPPPPPNNNNNNOOONNNNNNNNNNONNNOONNNNNNNNNOPPPFFGPPSPPPPNNNNNNONNNNNNNNNNNNNNNNOOOONONOONNNNNNNONNNOFNNNNNONNONNNFPFPPPGPFPFFPPPPFPPPGFPPSGPFPGPPOOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNOOONNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOONNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNO","n":["
 [...]
diff --git a/search.desc/arrow/arrow-desc-0-.js 
b/search.desc/arrow/arrow-desc-0-.js
index f37876221ad..c226d726fdb 100644
--- a/search.desc/arrow/arrow-desc-0-.js
+++ b/search.desc/arrow/arrow-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("arrow", 0, "A complete, safe, native Rust 
implementation of Apache …\nDefines the low-level <code>Allocation</code> API 
for shared memory …\nStatically typed implementations of Arrow Arrays\nTypes of 
shared memory region\nComputation kernels on Arrow Arrays\nDefines the logical 
data types of Arrow arrays.\nDowncast an <code>Array</code> to a 
<code>DictionaryArray</code> based on its …\nDowncast an <code>Array</code> to 
a <code>PrimitiveArray</code> based on i [...]
\ No newline at end of file
+searchState.loadedDescShard("arrow", 0, "A complete, safe, native Rust 
implementation of Apache …\nDefines the low-level <code>Allocation</code> API 
for shared memory …\nStatically typed implementations of Arrow Arrays\nTypes of 
shared memory region\nComputation kernels on Arrow Arrays\nDefines the logical 
data types of Arrow arrays.\nDowncast an <code>Array</code> to a 
<code>DictionaryArray</code> based on its …\nDowncast an <code>Array</code> to 
a <code>PrimitiveArray</code> based on i [...]
\ No newline at end of file
diff --git a/src/arrow/util/data_gen.rs.html b/src/arrow/util/data_gen.rs.html
index e8362e0bf47..580d1e3933c 100644
--- a/src/arrow/util/data_gen.rs.html
+++ b/src/arrow/util/data_gen.rs.html
@@ -353,6 +353,245 @@
 <a href="#353" id="353">353</a>
 <a href="#354" id="354">354</a>
 <a href="#355" id="355">355</a>
+<a href="#356" id="356">356</a>
+<a href="#357" id="357">357</a>
+<a href="#358" id="358">358</a>
+<a href="#359" id="359">359</a>
+<a href="#360" id="360">360</a>
+<a href="#361" id="361">361</a>
+<a href="#362" id="362">362</a>
+<a href="#363" id="363">363</a>
+<a href="#364" id="364">364</a>
+<a href="#365" id="365">365</a>
+<a href="#366" id="366">366</a>
+<a href="#367" id="367">367</a>
+<a href="#368" id="368">368</a>
+<a href="#369" id="369">369</a>
+<a href="#370" id="370">370</a>
+<a href="#371" id="371">371</a>
+<a href="#372" id="372">372</a>
+<a href="#373" id="373">373</a>
+<a href="#374" id="374">374</a>
+<a href="#375" id="375">375</a>
+<a href="#376" id="376">376</a>
+<a href="#377" id="377">377</a>
+<a href="#378" id="378">378</a>
+<a href="#379" id="379">379</a>
+<a href="#380" id="380">380</a>
+<a href="#381" id="381">381</a>
+<a href="#382" id="382">382</a>
+<a href="#383" id="383">383</a>
+<a href="#384" id="384">384</a>
+<a href="#385" id="385">385</a>
+<a href="#386" id="386">386</a>
+<a href="#387" id="387">387</a>
+<a href="#388" id="388">388</a>
+<a href="#389" id="389">389</a>
+<a href="#390" id="390">390</a>
+<a href="#391" id="391">391</a>
+<a href="#392" id="392">392</a>
+<a href="#393" id="393">393</a>
+<a href="#394" id="394">394</a>
+<a href="#395" id="395">395</a>
+<a href="#396" id="396">396</a>
+<a href="#397" id="397">397</a>
+<a href="#398" id="398">398</a>
+<a href="#399" id="399">399</a>
+<a href="#400" id="400">400</a>
+<a href="#401" id="401">401</a>
+<a href="#402" id="402">402</a>
+<a href="#403" id="403">403</a>
+<a href="#404" id="404">404</a>
+<a href="#405" id="405">405</a>
+<a href="#406" id="406">406</a>
+<a href="#407" id="407">407</a>
+<a href="#408" id="408">408</a>
+<a href="#409" id="409">409</a>
+<a href="#410" id="410">410</a>
+<a href="#411" id="411">411</a>
+<a href="#412" id="412">412</a>
+<a href="#413" id="413">413</a>
+<a href="#414" id="414">414</a>
+<a href="#415" id="415">415</a>
+<a href="#416" id="416">416</a>
+<a href="#417" id="417">417</a>
+<a href="#418" id="418">418</a>
+<a href="#419" id="419">419</a>
+<a href="#420" id="420">420</a>
+<a href="#421" id="421">421</a>
+<a href="#422" id="422">422</a>
+<a href="#423" id="423">423</a>
+<a href="#424" id="424">424</a>
+<a href="#425" id="425">425</a>
+<a href="#426" id="426">426</a>
+<a href="#427" id="427">427</a>
+<a href="#428" id="428">428</a>
+<a href="#429" id="429">429</a>
+<a href="#430" id="430">430</a>
+<a href="#431" id="431">431</a>
+<a href="#432" id="432">432</a>
+<a href="#433" id="433">433</a>
+<a href="#434" id="434">434</a>
+<a href="#435" id="435">435</a>
+<a href="#436" id="436">436</a>
+<a href="#437" id="437">437</a>
+<a href="#438" id="438">438</a>
+<a href="#439" id="439">439</a>
+<a href="#440" id="440">440</a>
+<a href="#441" id="441">441</a>
+<a href="#442" id="442">442</a>
+<a href="#443" id="443">443</a>
+<a href="#444" id="444">444</a>
+<a href="#445" id="445">445</a>
+<a href="#446" id="446">446</a>
+<a href="#447" id="447">447</a>
+<a href="#448" id="448">448</a>
+<a href="#449" id="449">449</a>
+<a href="#450" id="450">450</a>
+<a href="#451" id="451">451</a>
+<a href="#452" id="452">452</a>
+<a href="#453" id="453">453</a>
+<a href="#454" id="454">454</a>
+<a href="#455" id="455">455</a>
+<a href="#456" id="456">456</a>
+<a href="#457" id="457">457</a>
+<a href="#458" id="458">458</a>
+<a href="#459" id="459">459</a>
+<a href="#460" id="460">460</a>
+<a href="#461" id="461">461</a>
+<a href="#462" id="462">462</a>
+<a href="#463" id="463">463</a>
+<a href="#464" id="464">464</a>
+<a href="#465" id="465">465</a>
+<a href="#466" id="466">466</a>
+<a href="#467" id="467">467</a>
+<a href="#468" id="468">468</a>
+<a href="#469" id="469">469</a>
+<a href="#470" id="470">470</a>
+<a href="#471" id="471">471</a>
+<a href="#472" id="472">472</a>
+<a href="#473" id="473">473</a>
+<a href="#474" id="474">474</a>
+<a href="#475" id="475">475</a>
+<a href="#476" id="476">476</a>
+<a href="#477" id="477">477</a>
+<a href="#478" id="478">478</a>
+<a href="#479" id="479">479</a>
+<a href="#480" id="480">480</a>
+<a href="#481" id="481">481</a>
+<a href="#482" id="482">482</a>
+<a href="#483" id="483">483</a>
+<a href="#484" id="484">484</a>
+<a href="#485" id="485">485</a>
+<a href="#486" id="486">486</a>
+<a href="#487" id="487">487</a>
+<a href="#488" id="488">488</a>
+<a href="#489" id="489">489</a>
+<a href="#490" id="490">490</a>
+<a href="#491" id="491">491</a>
+<a href="#492" id="492">492</a>
+<a href="#493" id="493">493</a>
+<a href="#494" id="494">494</a>
+<a href="#495" id="495">495</a>
+<a href="#496" id="496">496</a>
+<a href="#497" id="497">497</a>
+<a href="#498" id="498">498</a>
+<a href="#499" id="499">499</a>
+<a href="#500" id="500">500</a>
+<a href="#501" id="501">501</a>
+<a href="#502" id="502">502</a>
+<a href="#503" id="503">503</a>
+<a href="#504" id="504">504</a>
+<a href="#505" id="505">505</a>
+<a href="#506" id="506">506</a>
+<a href="#507" id="507">507</a>
+<a href="#508" id="508">508</a>
+<a href="#509" id="509">509</a>
+<a href="#510" id="510">510</a>
+<a href="#511" id="511">511</a>
+<a href="#512" id="512">512</a>
+<a href="#513" id="513">513</a>
+<a href="#514" id="514">514</a>
+<a href="#515" id="515">515</a>
+<a href="#516" id="516">516</a>
+<a href="#517" id="517">517</a>
+<a href="#518" id="518">518</a>
+<a href="#519" id="519">519</a>
+<a href="#520" id="520">520</a>
+<a href="#521" id="521">521</a>
+<a href="#522" id="522">522</a>
+<a href="#523" id="523">523</a>
+<a href="#524" id="524">524</a>
+<a href="#525" id="525">525</a>
+<a href="#526" id="526">526</a>
+<a href="#527" id="527">527</a>
+<a href="#528" id="528">528</a>
+<a href="#529" id="529">529</a>
+<a href="#530" id="530">530</a>
+<a href="#531" id="531">531</a>
+<a href="#532" id="532">532</a>
+<a href="#533" id="533">533</a>
+<a href="#534" id="534">534</a>
+<a href="#535" id="535">535</a>
+<a href="#536" id="536">536</a>
+<a href="#537" id="537">537</a>
+<a href="#538" id="538">538</a>
+<a href="#539" id="539">539</a>
+<a href="#540" id="540">540</a>
+<a href="#541" id="541">541</a>
+<a href="#542" id="542">542</a>
+<a href="#543" id="543">543</a>
+<a href="#544" id="544">544</a>
+<a href="#545" id="545">545</a>
+<a href="#546" id="546">546</a>
+<a href="#547" id="547">547</a>
+<a href="#548" id="548">548</a>
+<a href="#549" id="549">549</a>
+<a href="#550" id="550">550</a>
+<a href="#551" id="551">551</a>
+<a href="#552" id="552">552</a>
+<a href="#553" id="553">553</a>
+<a href="#554" id="554">554</a>
+<a href="#555" id="555">555</a>
+<a href="#556" id="556">556</a>
+<a href="#557" id="557">557</a>
+<a href="#558" id="558">558</a>
+<a href="#559" id="559">559</a>
+<a href="#560" id="560">560</a>
+<a href="#561" id="561">561</a>
+<a href="#562" id="562">562</a>
+<a href="#563" id="563">563</a>
+<a href="#564" id="564">564</a>
+<a href="#565" id="565">565</a>
+<a href="#566" id="566">566</a>
+<a href="#567" id="567">567</a>
+<a href="#568" id="568">568</a>
+<a href="#569" id="569">569</a>
+<a href="#570" id="570">570</a>
+<a href="#571" id="571">571</a>
+<a href="#572" id="572">572</a>
+<a href="#573" id="573">573</a>
+<a href="#574" id="574">574</a>
+<a href="#575" id="575">575</a>
+<a href="#576" id="576">576</a>
+<a href="#577" id="577">577</a>
+<a href="#578" id="578">578</a>
+<a href="#579" id="579">579</a>
+<a href="#580" id="580">580</a>
+<a href="#581" id="581">581</a>
+<a href="#582" id="582">582</a>
+<a href="#583" id="583">583</a>
+<a href="#584" id="584">584</a>
+<a href="#585" id="585">585</a>
+<a href="#586" id="586">586</a>
+<a href="#587" id="587">587</a>
+<a href="#588" id="588">588</a>
+<a href="#589" id="589">589</a>
+<a href="#590" id="590">590</a>
+<a href="#591" id="591">591</a>
+<a href="#592" id="592">592</a>
+<a href="#593" id="593">593</a>
+<a href="#594" id="594">594</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
@@ -414,44 +653,87 @@
     true_density: f32,
 ) -&gt; <span class="prelude-ty">Result</span>&lt;ArrayRef&gt; {
     <span class="comment">// Override null density with 0.0 if the array is 
non-nullable
-    </span><span class="kw">let </span>null_density = <span class="kw">match 
</span>field.is_nullable() {
+    // and a primitive type in case a nested field is nullable
+    </span><span class="kw">let </span>primitive_null_density = <span 
class="kw">match </span>field.is_nullable() {
         <span class="bool-val">true </span>=&gt; null_density,
         <span class="bool-val">false </span>=&gt; <span 
class="number">0.0</span>,
     };
     <span class="kw">use </span>DataType::<span class="kw-2">*</span>;
     <span class="prelude-val">Ok</span>(<span class="kw">match 
</span>field.data_type() {
         Null =&gt; Arc::new(NullArray::new(size)) <span class="kw">as 
</span>ArrayRef,
-        Boolean =&gt; Arc::new(create_boolean_array(size, null_density, 
true_density)),
-        Int8 =&gt; Arc::new(create_primitive_array::&lt;Int8Type&gt;(size, 
null_density)),
-        Int16 =&gt; Arc::new(create_primitive_array::&lt;Int16Type&gt;(size, 
null_density)),
-        Int32 =&gt; Arc::new(create_primitive_array::&lt;Int32Type&gt;(size, 
null_density)),
-        Int64 =&gt; Arc::new(create_primitive_array::&lt;Int64Type&gt;(size, 
null_density)),
-        UInt8 =&gt; Arc::new(create_primitive_array::&lt;UInt8Type&gt;(size, 
null_density)),
-        UInt16 =&gt; Arc::new(create_primitive_array::&lt;UInt16Type&gt;(size, 
null_density)),
-        UInt32 =&gt; Arc::new(create_primitive_array::&lt;UInt32Type&gt;(size, 
null_density)),
-        UInt64 =&gt; Arc::new(create_primitive_array::&lt;UInt64Type&gt;(size, 
null_density)),
+        Boolean =&gt; Arc::new(create_boolean_array(
+            size,
+            primitive_null_density,
+            true_density,
+        )),
+        Int8 =&gt; Arc::new(create_primitive_array::&lt;Int8Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        Int16 =&gt; Arc::new(create_primitive_array::&lt;Int16Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        Int32 =&gt; Arc::new(create_primitive_array::&lt;Int32Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        Int64 =&gt; Arc::new(create_primitive_array::&lt;Int64Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        UInt8 =&gt; Arc::new(create_primitive_array::&lt;UInt8Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        UInt16 =&gt; Arc::new(create_primitive_array::&lt;UInt16Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        UInt32 =&gt; Arc::new(create_primitive_array::&lt;UInt32Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        UInt64 =&gt; Arc::new(create_primitive_array::&lt;UInt64Type&gt;(
+            size,
+            primitive_null_density,
+        )),
         Float16 =&gt; {
             <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::NotYetImplemented(
                 <span class="string">"Float16 is not 
implemented"</span>.to_string(),
             ))
         }
-        Float32 =&gt; 
Arc::new(create_primitive_array::&lt;Float32Type&gt;(size, null_density)),
-        Float64 =&gt; 
Arc::new(create_primitive_array::&lt;Float64Type&gt;(size, null_density)),
+        Float32 =&gt; Arc::new(create_primitive_array::&lt;Float32Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        Float64 =&gt; Arc::new(create_primitive_array::&lt;Float64Type&gt;(
+            size,
+            primitive_null_density,
+        )),
         Timestamp(<span class="kw">_</span>, <span class="kw">_</span>) =&gt; {
-            <span class="kw">let </span>int64_array =
-                Arc::new(create_primitive_array::&lt;Int64Type&gt;(size, 
null_density)) <span class="kw">as </span>ArrayRef;
+            <span class="kw">let </span>int64_array = 
Arc::new(create_primitive_array::&lt;Int64Type&gt;(
+                size,
+                primitive_null_density,
+            )) <span class="kw">as </span>ArrayRef;
             <span class="kw">return </span><span 
class="kw">crate</span>::compute::cast(<span 
class="kw-2">&amp;</span>int64_array, field.data_type());
         }
-        Date32 =&gt; Arc::new(create_primitive_array::&lt;Date32Type&gt;(size, 
null_density)),
-        Date64 =&gt; Arc::new(create_primitive_array::&lt;Date64Type&gt;(size, 
null_density)),
+        Date32 =&gt; Arc::new(create_primitive_array::&lt;Date32Type&gt;(
+            size,
+            primitive_null_density,
+        )),
+        Date64 =&gt; Arc::new(create_primitive_array::&lt;Date64Type&gt;(
+            size,
+            primitive_null_density,
+        )),
         Time32(unit) =&gt; <span class="kw">match </span>unit {
             TimeUnit::Second =&gt; 
Arc::new(create_primitive_array::&lt;Time32SecondType&gt;(
                 size,
-                null_density,
+                primitive_null_density,
             )) <span class="kw">as </span>ArrayRef,
             TimeUnit::Millisecond =&gt; 
Arc::new(create_primitive_array::&lt;Time32MillisecondType&gt;(
                 size,
-                null_density,
+                primitive_null_density,
             )),
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::InvalidArgumentError(<span 
class="macro">format!</span>(
@@ -462,11 +744,11 @@
         Time64(unit) =&gt; <span class="kw">match </span>unit {
             TimeUnit::Microsecond =&gt; 
Arc::new(create_primitive_array::&lt;Time64MicrosecondType&gt;(
                 size,
-                null_density,
+                primitive_null_density,
             )) <span class="kw">as </span>ArrayRef,
             TimeUnit::Nanosecond =&gt; 
Arc::new(create_primitive_array::&lt;Time64NanosecondType&gt;(
                 size,
-                null_density,
+                primitive_null_density,
             )),
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::InvalidArgumentError(<span 
class="macro">format!</span>(
@@ -474,31 +756,28 @@
                 </span>)))
             }
         },
-        Utf8 =&gt; Arc::new(create_string_array::&lt;i32&gt;(size, 
null_density)),
-        LargeUtf8 =&gt; Arc::new(create_string_array::&lt;i64&gt;(size, 
null_density)),
+        Utf8 =&gt; Arc::new(create_string_array::&lt;i32&gt;(size, 
primitive_null_density)),
+        LargeUtf8 =&gt; Arc::new(create_string_array::&lt;i64&gt;(size, 
primitive_null_density)),
         Utf8View =&gt; Arc::new(create_string_view_array_with_len(
             size,
-            null_density,
+            primitive_null_density,
             <span class="number">4</span>,
             <span class="bool-val">false</span>,
         )),
-        Binary =&gt; Arc::new(create_binary_array::&lt;i32&gt;(size, 
null_density)),
-        LargeBinary =&gt; Arc::new(create_binary_array::&lt;i64&gt;(size, 
null_density)),
-        FixedSizeBinary(len) =&gt; Arc::new(create_fsb_array(size, 
null_density, <span class="kw-2">*</span>len <span class="kw">as </span>usize)),
+        Binary =&gt; Arc::new(create_binary_array::&lt;i32&gt;(size, 
primitive_null_density)),
+        LargeBinary =&gt; Arc::new(create_binary_array::&lt;i64&gt;(size, 
primitive_null_density)),
+        FixedSizeBinary(len) =&gt; Arc::new(create_fsb_array(
+            size,
+            primitive_null_density,
+            <span class="kw-2">*</span>len <span class="kw">as </span>usize,
+        )),
         BinaryView =&gt; Arc::new(
-            create_string_view_array_with_len(size, null_density, <span 
class="number">4</span>, <span class="bool-val">false</span>).to_binary_view(),
+            create_string_view_array_with_len(size, primitive_null_density, 
<span class="number">4</span>, <span class="bool-val">false</span>)
+                .to_binary_view(),
         ),
         List(<span class="kw">_</span>) =&gt; create_random_list_array(field, 
size, null_density, true_density)<span class="question-mark">?</span>,
         LargeList(<span class="kw">_</span>) =&gt; 
create_random_list_array(field, size, null_density, true_density)<span 
class="question-mark">?</span>,
-        Struct(fields) =&gt; Arc::new(StructArray::try_from(
-            fields
-                .iter()
-                .map(|struct_field| {
-                    create_random_array(struct_field, size, null_density, 
true_density)
-                        .map(|array_ref| (struct_field.name().as_str(), 
array_ref))
-                })
-                .collect::&lt;<span 
class="prelude-ty">Result</span>&lt;Vec&lt;(<span class="kw-2">&amp;</span>str, 
ArrayRef)&gt;&gt;&gt;()<span class="question-mark">?</span>,
-        )<span class="question-mark">?</span>),
+        Struct(<span class="kw">_</span>) =&gt; 
create_random_struct_array(field, size, null_density, true_density)<span 
class="question-mark">?</span>,
         d @ Dictionary(<span class="kw">_</span>, value_type) <span 
class="kw">if </span><span 
class="kw">crate</span>::compute::can_cast_types(value_type, d) =&gt; {
             <span class="kw">let </span>f = Field::new(
                 field.name(),
@@ -508,6 +787,7 @@
             <span class="kw">let </span>v = create_random_array(<span 
class="kw-2">&amp;</span>f, size, null_density, true_density)<span 
class="question-mark">?</span>;
             <span class="kw">crate</span>::compute::cast(<span 
class="kw-2">&amp;</span>v, d)<span class="question-mark">?
         </span>}
+        Map(<span class="kw">_</span>, <span class="kw">_</span>) =&gt; 
create_random_map_array(field, size, null_density, true_density)<span 
class="question-mark">?</span>,
         other =&gt; {
             <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::NotYetImplemented(<span 
class="macro">format!</span>(
                 <span class="string">"Generating random arrays not yet 
implemented for {other:?}"
@@ -524,7 +804,7 @@
     true_density: f32,
 ) -&gt; <span class="prelude-ty">Result</span>&lt;ArrayRef&gt; {
     <span class="comment">// Override null density with 0.0 if the array is 
non-nullable
-    </span><span class="kw">let </span>null_density = <span class="kw">match 
</span>field.is_nullable() {
+    </span><span class="kw">let </span>list_null_density = <span 
class="kw">match </span>field.is_nullable() {
         <span class="bool-val">true </span>=&gt; null_density,
         <span class="bool-val">false </span>=&gt; <span 
class="number">0.0</span>,
     };
@@ -552,7 +832,7 @@
     <span class="kw">let </span>child_data = child_array.to_data();
     <span class="comment">// Create list's null buffers, if it is nullable
     </span><span class="kw">let </span>null_buffer = <span class="kw">match 
</span>field.is_nullable() {
-        <span class="bool-val">true </span>=&gt; <span 
class="prelude-val">Some</span>(create_random_null_buffer(size, null_density)),
+        <span class="bool-val">true </span>=&gt; <span 
class="prelude-val">Some</span>(create_random_null_buffer(size, 
list_null_density)),
         <span class="bool-val">false </span>=&gt; <span 
class="prelude-val">None</span>,
     };
     <span class="kw">let </span>list_data = <span class="kw">unsafe </span>{
@@ -569,6 +849,98 @@
     <span class="prelude-val">Ok</span>(make_array(list_data))
 }
 
+<span class="attr">#[inline]
+</span><span class="kw">fn </span>create_random_struct_array(
+    field: <span class="kw-2">&amp;</span>Field,
+    size: usize,
+    null_density: f32,
+    true_density: f32,
+) -&gt; <span class="prelude-ty">Result</span>&lt;ArrayRef&gt; {
+    <span class="kw">let </span>struct_fields = <span class="kw">match 
</span>field.data_type() {
+        DataType::Struct(fields) =&gt; fields,
+        <span class="kw">_ </span>=&gt; {
+            <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::InvalidArgumentError(<span 
class="macro">format!</span>(
+                <span class="string">"Cannot create struct array for field 
{field:?}"
+            </span>)))
+        }
+    };
+
+    <span class="kw">let </span>child_arrays = struct_fields
+        .iter()
+        .map(|struct_field| create_random_array(struct_field, size, 
null_density, true_density))
+        .collect::&lt;<span class="prelude-ty">Result</span>&lt;Vec&lt;<span 
class="kw">_</span>&gt;&gt;&gt;()<span class="question-mark">?</span>;
+
+    <span class="kw">let </span>null_buffer = <span class="kw">match 
</span>field.is_nullable() {
+        <span class="bool-val">true </span>=&gt; {
+            <span class="kw">let </span>nulls = 
arrow_buffer::BooleanBuffer::new(
+                create_random_null_buffer(size, null_density),
+                <span class="number">0</span>,
+                size,
+            );
+            <span class="prelude-val">Some</span>(nulls.into())
+        }
+        <span class="bool-val">false </span>=&gt; <span 
class="prelude-val">None</span>,
+    };
+
+    <span class="prelude-val">Ok</span>(Arc::new(StructArray::try_new(
+        struct_fields.clone(),
+        child_arrays,
+        null_buffer,
+    )<span class="question-mark">?</span>))
+}
+
+<span class="attr">#[inline]
+</span><span class="kw">fn </span>create_random_map_array(
+    field: <span class="kw-2">&amp;</span>Field,
+    size: usize,
+    null_density: f32,
+    true_density: f32,
+) -&gt; <span class="prelude-ty">Result</span>&lt;ArrayRef&gt; {
+    <span class="comment">// Override null density with 0.0 if the array is 
non-nullable
+    </span><span class="kw">let </span>map_null_density = <span 
class="kw">match </span>field.is_nullable() {
+        <span class="bool-val">true </span>=&gt; null_density,
+        <span class="bool-val">false </span>=&gt; <span 
class="number">0.0</span>,
+    };
+
+    <span class="kw">let </span>entries_field = <span class="kw">match 
</span>field.data_type() {
+        DataType::Map(f, <span class="kw">_</span>) =&gt; f,
+        <span class="kw">_ </span>=&gt; {
+            <span class="kw">return </span><span 
class="prelude-val">Err</span>(ArrowError::InvalidArgumentError(<span 
class="macro">format!</span>(
+                <span class="string">"Cannot create map array for field 
{field:?}"
+            </span>)))
+        }
+    };
+
+    <span class="kw">let </span>(offsets, child_len) = 
create_random_offsets::&lt;i32&gt;(size, <span class="number">0</span>, <span 
class="number">5</span>);
+    <span class="kw">let </span>offsets = 
Buffer::from(offsets.to_byte_slice());
+
+    <span class="kw">let </span>entries = create_random_array(
+        entries_field,
+        child_len <span class="kw">as </span>usize,
+        null_density,
+        true_density,
+    )<span class="question-mark">?
+    </span>.to_data();
+
+    <span class="kw">let </span>null_buffer = <span class="kw">match 
</span>field.is_nullable() {
+        <span class="bool-val">true </span>=&gt; <span 
class="prelude-val">Some</span>(create_random_null_buffer(size, 
map_null_density)),
+        <span class="bool-val">false </span>=&gt; <span 
class="prelude-val">None</span>,
+    };
+
+    <span class="kw">let </span>map_data = <span class="kw">unsafe </span>{
+        ArrayData::new_unchecked(
+            field.data_type().clone(),
+            size,
+            <span class="prelude-val">None</span>,
+            null_buffer,
+            <span class="number">0</span>,
+            <span class="macro">vec!</span>[offsets],
+            <span class="macro">vec!</span>[entries],
+        )
+    };
+    <span class="prelude-val">Ok</span>(make_array(map_data))
+}
+
 <span class="doccomment">/// Generate random offsets for list arrays
 </span><span class="kw">fn </span>create_random_offsets&lt;T: OffsetSizeTrait 
+ SampleUniform&gt;(
     size: usize,
@@ -630,7 +1002,7 @@
             Field::new(<span class="string">"a"</span>, DataType::Int32, <span 
class="bool-val">false</span>),
             Field::new(
                 <span class="string">"b"</span>,
-                DataType::List(Arc::new(Field::new(<span 
class="string">"item"</span>, DataType::LargeUtf8, <span 
class="bool-val">true</span>))),
+                DataType::List(Arc::new(Field::new(<span 
class="string">"item"</span>, DataType::LargeUtf8, <span 
class="bool-val">false</span>))),
                 <span class="bool-val">false</span>,
             ),
             Field::new(<span class="string">"a"</span>, DataType::Int32, <span 
class="bool-val">false</span>),
@@ -707,5 +1079,111 @@
         <span class="macro">assert_eq!</span>(col_d_y.data_type(), <span 
class="kw-2">&amp;</span>DataType::Float32);
         <span class="macro">assert_eq!</span>(col_d_y.null_count(), <span 
class="number">0</span>);
     }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn 
</span>test_create_list_array_nested_nullability() {
+        <span class="kw">let </span>list_field = Field::new_list(
+            <span class="string">"not_null_list"</span>,
+            Field::new_list_field(DataType::Boolean, <span 
class="bool-val">true</span>),
+            <span class="bool-val">false</span>,
+        );
+
+        <span class="kw">let </span>list_array = create_random_array(<span 
class="kw-2">&amp;</span>list_field, <span class="number">100</span>, <span 
class="number">0.95</span>, <span class="number">0.5</span>).unwrap();
+
+        <span class="macro">assert_eq!</span>(list_array.null_count(), <span 
class="number">0</span>);
+        <span 
class="macro">assert!</span>(list_array.as_list::&lt;i32&gt;().values().null_count()
 &gt; <span class="number">0</span>);
+    }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn 
</span>test_create_struct_array_nested_nullability() {
+        <span class="kw">let </span>struct_child_fields = <span 
class="macro">vec!</span>[
+            Field::new(<span class="string">"null_int"</span>, 
DataType::Int32, <span class="bool-val">true</span>),
+            Field::new(<span class="string">"int"</span>, DataType::Int32, 
<span class="bool-val">false</span>),
+        ];
+        <span class="kw">let </span>struct_field = Field::new_struct(<span 
class="string">"not_null_struct"</span>, struct_child_fields, <span 
class="bool-val">false</span>);
+
+        <span class="kw">let </span>struct_array = create_random_array(<span 
class="kw-2">&amp;</span>struct_field, <span class="number">100</span>, <span 
class="number">0.95</span>, <span class="number">0.5</span>).unwrap();
+
+        <span class="macro">assert_eq!</span>(struct_array.null_count(), <span 
class="number">0</span>);
+        <span class="macro">assert!</span>(
+            struct_array
+                .as_struct()
+                .column_by_name(<span class="string">"null_int"</span>)
+                .unwrap()
+                .null_count()
+                &gt; <span class="number">0
+        </span>);
+        <span class="macro">assert_eq!</span>(
+            struct_array
+                .as_struct()
+                .column_by_name(<span class="string">"int"</span>)
+                .unwrap()
+                .null_count(),
+            <span class="number">0
+        </span>);
+    }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn 
</span>test_create_list_array_nested_struct_nullability() {
+        <span class="kw">let </span>struct_child_fields = <span 
class="macro">vec!</span>[
+            Field::new(<span class="string">"null_int"</span>, 
DataType::Int32, <span class="bool-val">true</span>),
+            Field::new(<span class="string">"int"</span>, DataType::Int32, 
<span class="bool-val">false</span>),
+        ];
+        <span class="kw">let </span>list_item_field =
+            
Field::new_list_field(DataType::Struct(struct_child_fields.into()), <span 
class="bool-val">true</span>);
+        <span class="kw">let </span>list_field = Field::new_list(<span 
class="string">"not_null_list"</span>, list_item_field, <span 
class="bool-val">false</span>);
+
+        <span class="kw">let </span>list_array = create_random_array(<span 
class="kw-2">&amp;</span>list_field, <span class="number">100</span>, <span 
class="number">0.95</span>, <span class="number">0.5</span>).unwrap();
+
+        <span class="macro">assert_eq!</span>(list_array.null_count(), <span 
class="number">0</span>);
+        <span 
class="macro">assert!</span>(list_array.as_list::&lt;i32&gt;().values().null_count()
 &gt; <span class="number">0</span>);
+        <span class="macro">assert!</span>(
+            list_array
+                .as_list::&lt;i32&gt;()
+                .values()
+                .as_struct()
+                .column_by_name(<span class="string">"null_int"</span>)
+                .unwrap()
+                .null_count()
+                &gt; <span class="number">0
+        </span>);
+        <span class="macro">assert_eq!</span>(
+            list_array
+                .as_list::&lt;i32&gt;()
+                .values()
+                .as_struct()
+                .column_by_name(<span class="string">"int"</span>)
+                .unwrap()
+                .null_count(),
+            <span class="number">0
+        </span>);
+    }
+
+    <span class="attr">#[test]
+    </span><span class="kw">fn </span>test_create_map_array() {
+        <span class="kw">let </span>map_field = Field::new_map(
+            <span class="string">"map"</span>,
+            <span class="string">"entries"</span>,
+            Field::new(<span class="string">"key"</span>, DataType::Utf8, 
<span class="bool-val">false</span>),
+            Field::new(<span class="string">"value"</span>, DataType::Utf8, 
<span class="bool-val">true</span>),
+            <span class="bool-val">false</span>,
+            <span class="bool-val">false</span>,
+        );
+        <span class="kw">let </span>array = create_random_array(<span 
class="kw-2">&amp;</span>map_field, <span class="number">100</span>, <span 
class="number">0.8</span>, <span class="number">0.5</span>).unwrap();
+
+        <span class="macro">assert_eq!</span>(array.len(), <span 
class="number">100</span>);
+        <span class="comment">// Map field is not null
+        </span><span class="macro">assert_eq!</span>(array.null_count(), <span 
class="number">0</span>);
+        <span class="comment">// Maps have multiple values like a list, so 
internal arrays are longer
+        </span><span class="macro">assert!</span>(array.as_map().keys().len() 
&gt; array.len());
+        <span class="macro">assert!</span>(array.as_map().values().len() &gt; 
array.len());
+        <span class="comment">// Keys are not nullable
+        </span><span 
class="macro">assert_eq!</span>(array.as_map().keys().null_count(), <span 
class="number">0</span>);
+        <span class="comment">// Values are nullable
+        </span><span 
class="macro">assert!</span>(array.as_map().values().null_count() &gt; <span 
class="number">0</span>);
+
+        <span 
class="macro">assert_eq!</span>(array.as_map().keys().data_type(), <span 
class="kw-2">&amp;</span>DataType::Utf8);
+        <span 
class="macro">assert_eq!</span>(array.as_map().values().data_type(), <span 
class="kw-2">&amp;</span>DataType::Utf8);
+    }
 }
 </code></pre></div></section></main></body></html>
\ No newline at end of file

Reply via email to