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/datafusion.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 32169731e7 Publish built docs triggered by
33b9afa911f7d01edac0053beb17ca298111ea19
32169731e7 is described below
commit 32169731e76476c812ca233a485f1d643b522b43
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Mar 9 20:48:25 2026 +0000
Publish built docs triggered by 33b9afa911f7d01edac0053beb17ca298111ea19
---
_sources/library-user-guide/extending-sql.md.txt | 51 ++++++++++++++++++++++--
library-user-guide/extending-sql.html | 44 +++++++++++++++++++-
searchindex.js | 2 +-
3 files changed, 91 insertions(+), 6 deletions(-)
diff --git a/_sources/library-user-guide/extending-sql.md.txt
b/_sources/library-user-guide/extending-sql.md.txt
index 687d884895..eea5b3b1ac 100644
--- a/_sources/library-user-guide/extending-sql.md.txt
+++ b/_sources/library-user-guide/extending-sql.md.txt
@@ -158,7 +158,7 @@ when you need to support SQL types that aren't natively
recognized.
```rust
# use std::sync::Arc;
-# use arrow::datatypes::{DataType, TimeUnit};
+# use arrow::datatypes::{DataType, FieldRef, TimeUnit};
# use datafusion::error::Result;
# use datafusion::prelude::*;
# use datafusion::execution::SessionStateBuilder;
@@ -169,7 +169,7 @@ use datafusion_expr::planner::TypePlanner;
struct MyTypePlanner;
impl TypePlanner for MyTypePlanner {
- fn plan_type(&self, sql_type: &ast::DataType) -> Result<Option<DataType>> {
+ fn plan_type_field(&self, sql_type: &ast::DataType) ->
Result<Option<FieldRef>> {
match sql_type {
// Map DATETIME(precision) to Arrow Timestamp
ast::DataType::Datetime(precision) => {
@@ -180,7 +180,9 @@ impl TypePlanner for MyTypePlanner {
None | Some(9) => TimeUnit::Nanosecond,
_ => return Ok(None), // Let default handling take over
};
- Ok(Some(DataType::Timestamp(time_unit, None)))
+ Ok(Some(
+ DataType::Timestamp(time_unit,
None).into_nullable_field_ref()
+ ))
}
_ => Ok(None), // Return None for types we don't handle
}
@@ -202,6 +204,49 @@ async fn main() -> Result<()> {
}
```
+#### Example: Supporting the UUID Type
+
+```rust
+# use std::sync::Arc;
+# use arrow::datatypes::{DataType, FieldRef, TimeUnit};
+# use datafusion::error::Result;
+# use datafusion::prelude::*;
+# use datafusion::execution::SessionStateBuilder;
+use datafusion_expr::planner::TypePlanner;
+# use sqlparser::ast;
+
+#[derive(Debug)]
+struct MyTypePlanner;
+
+impl TypePlanner for MyTypePlanner {
+ fn plan_type_field(&self, sql_type: &ast::DataType) ->
Result<Option<FieldRef>> {
+ match sql_type {
+ sqlparser::ast::DataType::Uuid => Ok(Some(Arc::new(
+ Field::new("", DataType::FixedSizeBinary(16),
true).with_metadata(
+ [("ARROW:extension:name".to_string(),
"arrow.uuid".to_string())]
+ .into(),
+ ),
+ ))),
+ _ => Ok(None),
+ }
+ }
+}
+
+#[tokio::main]
+async fn main() -> Result<()> {
+ let state = SessionStateBuilder::new()
+ .with_default_features()
+ .with_type_planner(Arc::new(MyTypePlanner))
+ .build();
+
+ let ctx = SessionContext::new_with_state(state);
+
+ // Now UUID type is recognized
+ ctx.sql("CREATE TABLE idx (uuid UUID)").await?;
+ Ok(())
+}
+```
+
For more details, see the [TypePlanner API documentation].
### RelationPlanner: Custom FROM Clause Elements
diff --git a/library-user-guide/extending-sql.html
b/library-user-guide/extending-sql.html
index d11b6b91f4..2c7ef36b47 100644
--- a/library-user-guide/extending-sql.html
+++ b/library-user-guide/extending-sql.html
@@ -580,7 +580,7 @@ when you need to support SQL types that aren’t natively
recognized.</p>
<span class="k">struct</span><span class="w"> </span><span
class="nc">MyTypePlanner</span><span class="p">;</span>
<span class="k">impl</span><span class="w"> </span><span
class="n">TypePlanner</span><span class="w"> </span><span
class="k">for</span><span class="w"> </span><span
class="n">MyTypePlanner</span><span class="w"> </span><span class="p">{</span>
-<span class="w"> </span><span class="k">fn</span><span class="w">
</span><span class="nf">plan_type</span><span class="p">(</span><span
class="o">&</span><span class="bp">self</span><span class="p">,</span><span
class="w"> </span><span class="n">sql_type</span><span class="p">:</span><span
class="w"> </span><span class="kp">&</span><span class="nc">ast</span><span
class="p">::</span><span class="n">DataType</span><span class="p">)</span><span
class="w"> </span><span class="p"> [...]
+<span class="w"> </span><span class="k">fn</span><span class="w">
</span><span class="nf">plan_type_field</span><span class="p">(</span><span
class="o">&</span><span class="bp">self</span><span class="p">,</span><span
class="w"> </span><span class="n">sql_type</span><span class="p">:</span><span
class="w"> </span><span class="kp">&</span><span class="nc">ast</span><span
class="p">::</span><span class="n">DataType</span><span class="p">)</span><span
class="w"> </span><span clas [...]
<span class="w"> </span><span class="k">match</span><span class="w">
</span><span class="n">sql_type</span><span class="w"> </span><span
class="p">{</span>
<span class="w"> </span><span class="c1">// Map DATETIME(precision)
to Arrow Timestamp</span>
<span class="w"> </span><span class="n">ast</span><span
class="p">::</span><span class="n">DataType</span><span
class="p">::</span><span class="n">Datetime</span><span class="p">(</span><span
class="n">precision</span><span class="p">)</span><span class="w"> </span><span
class="o">=></span><span class="w"> </span><span class="p">{</span>
@@ -591,7 +591,9 @@ when you need to support SQL types that aren’t natively
recognized.</p>
<span class="w"> </span><span class="nb">None</span><span
class="w"> </span><span class="o">|</span><span class="w"> </span><span
class="nb">Some</span><span class="p">(</span><span class="mi">9</span><span
class="p">)</span><span class="w"> </span><span class="o">=></span><span
class="w"> </span><span class="n">TimeUnit</span><span class="p">::</span><span
class="n">Nanosecond</span><span class="p">,</span>
<span class="w"> </span><span class="n">_</span><span
class="w"> </span><span class="o">=></span><span class="w"> </span><span
class="k">return</span><span class="w"> </span><span class="nb">Ok</span><span
class="p">(</span><span class="nb">None</span><span class="p">),</span><span
class="w"> </span><span class="c1">// Let default handling take over</span>
<span class="w"> </span><span class="p">};</span>
-<span class="w"> </span><span class="nb">Ok</span><span
class="p">(</span><span class="nb">Some</span><span class="p">(</span><span
class="n">DataType</span><span class="p">::</span><span
class="n">Timestamp</span><span class="p">(</span><span
class="n">time_unit</span><span class="p">,</span><span class="w"> </span><span
class="nb">None</span><span class="p">)))</span>
+<span class="w"> </span><span class="nb">Ok</span><span
class="p">(</span><span class="nb">Some</span><span class="p">(</span>
+<span class="w"> </span><span
class="n">DataType</span><span class="p">::</span><span
class="n">Timestamp</span><span class="p">(</span><span
class="n">time_unit</span><span class="p">,</span><span class="w"> </span><span
class="nb">None</span><span class="p">).</span><span
class="n">into_nullable_field_ref</span><span class="p">()</span>
+<span class="w"> </span><span class="p">))</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">_</span><span class="w">
</span><span class="o">=></span><span class="w"> </span><span
class="nb">Ok</span><span class="p">(</span><span class="nb">None</span><span
class="p">),</span><span class="w"> </span><span class="c1">// Return None for
types we don't handle</span>
<span class="w"> </span><span class="p">}</span>
@@ -613,6 +615,43 @@ when you need to support SQL types that aren’t natively
recognized.</p>
<span class="p">}</span>
</pre></div>
</div>
+</section>
+<section id="example-supporting-the-uuid-type">
+<h4>Example: Supporting the UUID Type<a class="headerlink"
href="#example-supporting-the-uuid-type" title="Link to this heading">#</a></h4>
+<div class="highlight-rust notranslate"><div
class="highlight"><pre><span></span><span class="k">use</span><span class="w">
</span><span class="n">datafusion_expr</span><span class="p">::</span><span
class="n">planner</span><span class="p">::</span><span
class="n">TypePlanner</span><span class="p">;</span>
+
+<span class="cp">#[derive(Debug)]</span>
+<span class="k">struct</span><span class="w"> </span><span
class="nc">MyTypePlanner</span><span class="p">;</span>
+
+<span class="k">impl</span><span class="w"> </span><span
class="n">TypePlanner</span><span class="w"> </span><span
class="k">for</span><span class="w"> </span><span
class="n">MyTypePlanner</span><span class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="k">fn</span><span class="w">
</span><span class="nf">plan_type_field</span><span class="p">(</span><span
class="o">&</span><span class="bp">self</span><span class="p">,</span><span
class="w"> </span><span class="n">sql_type</span><span class="p">:</span><span
class="w"> </span><span class="kp">&</span><span class="nc">ast</span><span
class="p">::</span><span class="n">DataType</span><span class="p">)</span><span
class="w"> </span><span clas [...]
+<span class="w"> </span><span class="k">match</span><span class="w">
</span><span class="n">sql_type</span><span class="w"> </span><span
class="p">{</span>
+<span class="w"> </span><span class="n">sqlparser</span><span
class="p">::</span><span class="n">ast</span><span class="p">::</span><span
class="n">DataType</span><span class="p">::</span><span
class="n">Uuid</span><span class="w"> </span><span class="o">=></span><span
class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span
class="nb">Some</span><span class="p">(</span><span class="n">Arc</span><span
class="p">::</span><span class="n">new</span><span class [...]
+<span class="w"> </span><span class="n">Field</span><span
class="p">::</span><span class="n">new</span><span class="p">(</span><span
class="s">""</span><span class="p">,</span><span class="w">
</span><span class="n">DataType</span><span class="p">::</span><span
class="n">FixedSizeBinary</span><span class="p">(</span><span
class="mi">16</span><span class="p">),</span><span class="w"> </span><span
class="kc">true</span><span class="p">).</span><span class="n">with_ [...]
+<span class="w"> </span><span class="p">[(</span><span
class="s">"ARROW:extension:name"</span><span class="p">.</span><span
class="n">to_string</span><span class="p">(),</span><span class="w">
</span><span class="s">"arrow.uuid"</span><span
class="p">.</span><span class="n">to_string</span><span class="p">())]</span>
+<span class="w"> </span><span class="p">.</span><span
class="n">into</span><span class="p">(),</span>
+<span class="w"> </span><span class="p">),</span>
+<span class="w"> </span><span class="p">))),</span>
+<span class="w"> </span><span class="n">_</span><span class="w">
</span><span class="o">=></span><span class="w"> </span><span
class="nb">Ok</span><span class="p">(</span><span class="nb">None</span><span
class="p">),</span>
+<span class="w"> </span><span class="p">}</span>
+<span class="w"> </span><span class="p">}</span>
+<span class="p">}</span>
+
+<span class="cp">#[tokio::main]</span>
+<span class="k">async</span><span class="w"> </span><span
class="k">fn</span><span class="w"> </span><span class="nf">main</span><span
class="p">()</span><span class="w"> </span><span class="p">-></span><span
class="w"> </span><span class="nb">Result</span><span
class="o"><</span><span class="p">()</span><span class="o">></span><span
class="w"> </span><span class="p">{</span>
+<span class="w"> </span><span class="kd">let</span><span class="w">
</span><span class="n">state</span><span class="w"> </span><span
class="o">=</span><span class="w"> </span><span
class="n">SessionStateBuilder</span><span class="p">::</span><span
class="n">new</span><span class="p">()</span>
+<span class="w"> </span><span class="p">.</span><span
class="n">with_default_features</span><span class="p">()</span>
+<span class="w"> </span><span class="p">.</span><span
class="n">with_type_planner</span><span class="p">(</span><span
class="n">Arc</span><span class="p">::</span><span class="n">new</span><span
class="p">(</span><span class="n">MyTypePlanner</span><span class="p">))</span>
+<span class="w"> </span><span class="p">.</span><span
class="n">build</span><span class="p">();</span>
+
+<span class="w"> </span><span class="kd">let</span><span class="w">
</span><span class="n">ctx</span><span class="w"> </span><span
class="o">=</span><span class="w"> </span><span
class="n">SessionContext</span><span class="p">::</span><span
class="n">new_with_state</span><span class="p">(</span><span
class="n">state</span><span class="p">);</span>
+
+<span class="w"> </span><span class="c1">// Now UUID type is
recognized</span>
+<span class="w"> </span><span class="n">ctx</span><span
class="p">.</span><span class="n">sql</span><span class="p">(</span><span
class="s">"CREATE TABLE idx (uuid UUID)"</span><span
class="p">).</span><span class="k">await</span><span class="o">?</span><span
class="p">;</span>
+<span class="w"> </span><span class="nb">Ok</span><span
class="p">(())</span>
+<span class="p">}</span>
+</pre></div>
+</div>
<p>For more details, see the <a class="reference external"
href="https://docs.rs/datafusion/latest/datafusion/logical_expr/planner/trait.TypePlanner.html">TypePlanner
API documentation</a>.</p>
</section>
</section>
@@ -810,6 +849,7 @@ for queries such as:</p>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#typeplanner-custom-data-types">TypePlanner: Custom Data Types</a><ul
class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link"
href="#example-custom-datetime-type">Example: Custom DATETIME Type</a></li>
+<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link"
href="#example-supporting-the-uuid-type">Example: Supporting the UUID
Type</a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#relationplanner-custom-from-clause-elements">RelationPlanner: Custom
FROM Clause Elements</a><ul class="nav section-nav flex-column">
diff --git a/searchindex.js b/searchindex.js
index 7e9a792eaf..884bbcdd6b 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[72,"op-neq"]],"!~":[[72,"op-re-not-match"]],"!~*":[[72,"op-re-not-match-i"]],"!~~":[[72,"id19"]],"!~~*":[[72,"id20"]],"#":[[72,"op-bit-xor"]],"%":[[72,"op-modulo"]],"&":[[72,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[14,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[72,"op-multiply"]],"+":[[72,"op-plus"]],"-":[[72,"op-minus"]],"/":[[72,"op-divide"]],"1.
Array Literal Con [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[72,"op-neq"]],"!~":[[72,"op-re-not-match"]],"!~*":[[72,"op-re-not-match-i"]],"!~~":[[72,"id19"]],"!~~*":[[72,"id20"]],"#":[[72,"op-bit-xor"]],"%":[[72,"op-modulo"]],"&":[[72,"op-bit-and"]],"(relation,
name) tuples in logical fields and logical columns are
unique":[[14,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[72,"op-multiply"]],"+":[[72,"op-plus"]],"-":[[72,"op-minus"]],"/":[[72,"op-divide"]],"1.
Array Literal Con [...]
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]