This is an automated email from the ASF dual-hosted git repository.
jonah pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 6c9355d5be refactor: use `LazyLock` in the `user_doc` macro (#13684)
6c9355d5be is described below
commit 6c9355d5be8b6045865fed67cb6d028b2dfc2e06
Author: Jonah Gao <[email protected]>
AuthorDate: Sun Dec 8 23:37:53 2024 +0800
refactor: use `LazyLock` in the `user_doc` macro (#13684)
* refactor: use `LazyLock` in the `user_doc` macro
* Fix cargo doc
* Update datafusion/macros/src/lib.rs
* Fix doc comment
---------
Co-authored-by: Oleks V <[email protected]>
---
.../functions-aggregate/src/approx_distinct.rs | 2 -
.../functions-aggregate/src/approx_median.rs | 2 -
.../src/approx_percentile_cont.rs | 3 +-
.../src/approx_percentile_cont_with_weight.rs | 3 +-
datafusion/functions-aggregate/src/array_agg.rs | 3 +-
datafusion/functions-aggregate/src/average.rs | 3 +-
datafusion/functions-aggregate/src/bool_and_or.rs | 2 -
datafusion/functions-aggregate/src/correlation.rs | 3 +-
datafusion/functions-aggregate/src/count.rs | 3 +-
datafusion/functions-aggregate/src/covariance.rs | 2 -
datafusion/functions-aggregate/src/first_last.rs | 3 +-
datafusion/functions-aggregate/src/grouping.rs | 2 -
datafusion/functions-aggregate/src/median.rs | 3 +-
datafusion/functions-aggregate/src/min_max.rs | 2 -
datafusion/functions-aggregate/src/nth_value.rs | 3 +-
datafusion/functions-aggregate/src/stddev.rs | 3 +-
datafusion/functions-aggregate/src/string_agg.rs | 2 -
datafusion/functions-aggregate/src/sum.rs | 2 -
datafusion/functions-aggregate/src/variance.rs | 2 -
datafusion/functions/src/datetime/to_date.rs | 2 -
datafusion/functions/src/math/abs.rs | 3 +-
datafusion/functions/src/string/ltrim.rs | 2 -
datafusion/macros/src/user_doc.rs | 105 +++++++++++----------
23 files changed, 68 insertions(+), 92 deletions(-)
diff --git a/datafusion/functions-aggregate/src/approx_distinct.rs
b/datafusion/functions-aggregate/src/approx_distinct.rs
index 74691ba740..1d378fff17 100644
--- a/datafusion/functions-aggregate/src/approx_distinct.rs
+++ b/datafusion/functions-aggregate/src/approx_distinct.rs
@@ -31,7 +31,6 @@ use datafusion_common::ScalarValue;
use datafusion_common::{
downcast_value, internal_err, not_impl_err, DataFusionError, Result,
};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::utils::format_state_name;
use datafusion_expr::{
@@ -42,7 +41,6 @@ use std::any::Any;
use std::fmt::{Debug, Formatter};
use std::hash::Hash;
use std::marker::PhantomData;
-use std::sync::OnceLock;
make_udaf_expr_and_func!(
ApproxDistinct,
diff --git a/datafusion/functions-aggregate/src/approx_median.rs
b/datafusion/functions-aggregate/src/approx_median.rs
index d4441da612..5d174a7522 100644
--- a/datafusion/functions-aggregate/src/approx_median.rs
+++ b/datafusion/functions-aggregate/src/approx_median.rs
@@ -19,13 +19,11 @@
use std::any::Any;
use std::fmt::Debug;
-use std::sync::OnceLock;
use arrow::{datatypes::DataType, datatypes::Field};
use arrow_schema::DataType::{Float64, UInt64};
use datafusion_common::{not_impl_err, plan_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::type_coercion::aggregates::NUMERICS;
use datafusion_expr::utils::format_state_name;
diff --git a/datafusion/functions-aggregate/src/approx_percentile_cont.rs
b/datafusion/functions-aggregate/src/approx_percentile_cont.rs
index 13407fecf2..61424e8f24 100644
--- a/datafusion/functions-aggregate/src/approx_percentile_cont.rs
+++ b/datafusion/functions-aggregate/src/approx_percentile_cont.rs
@@ -18,7 +18,7 @@
use std::any::Any;
use std::fmt::{Debug, Formatter};
use std::mem::size_of_val;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::{Array, RecordBatch};
use arrow::compute::{filter, is_not_null};
@@ -35,7 +35,6 @@ use datafusion_common::{
downcast_value, internal_err, not_impl_datafusion_err, not_impl_err,
plan_err,
DataFusionError, Result, ScalarValue,
};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::type_coercion::aggregates::{INTEGERS, NUMERICS};
use datafusion_expr::utils::format_state_name;
diff --git
a/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs
b/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs
index 485874aeb2..10b9b06f1f 100644
--- a/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs
+++ b/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs
@@ -18,7 +18,7 @@
use std::any::Any;
use std::fmt::{Debug, Formatter};
use std::mem::size_of_val;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::{
array::ArrayRef,
@@ -27,7 +27,6 @@ use arrow::{
use datafusion_common::ScalarValue;
use datafusion_common::{not_impl_err, plan_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::type_coercion::aggregates::NUMERICS;
use datafusion_expr::Volatility::Immutable;
diff --git a/datafusion/functions-aggregate/src/array_agg.rs
b/datafusion/functions-aggregate/src/array_agg.rs
index 98530a9fc2..b75de83f6a 100644
--- a/datafusion/functions-aggregate/src/array_agg.rs
+++ b/datafusion/functions-aggregate/src/array_agg.rs
@@ -25,7 +25,6 @@ use datafusion_common::cast::as_list_array;
use datafusion_common::utils::{get_row_at_idx, SingleRowListArrayBuilder};
use datafusion_common::{exec_err, ScalarValue};
use datafusion_common::{internal_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::utils::format_state_name;
use datafusion_expr::{Accumulator, Signature, Volatility};
@@ -36,7 +35,7 @@ use datafusion_macros::user_doc;
use datafusion_physical_expr_common::sort_expr::{LexOrdering,
PhysicalSortExpr};
use std::collections::{HashSet, VecDeque};
use std::mem::{size_of, size_of_val};
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
make_udaf_expr_and_func!(
ArrayAgg,
diff --git a/datafusion/functions-aggregate/src/average.rs
b/datafusion/functions-aggregate/src/average.rs
index 65ca441517..18874f831e 100644
--- a/datafusion/functions-aggregate/src/average.rs
+++ b/datafusion/functions-aggregate/src/average.rs
@@ -42,14 +42,13 @@ use
datafusion_functions_aggregate_common::aggregate::groups_accumulator::nulls:
filtered_null_mask, set_nulls,
};
-use datafusion_doc::DocSection;
use datafusion_functions_aggregate_common::utils::DecimalAverager;
use datafusion_macros::user_doc;
use log::debug;
use std::any::Any;
use std::fmt::Debug;
use std::mem::{size_of, size_of_val};
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
make_udaf_expr_and_func!(
Avg,
diff --git a/datafusion/functions-aggregate/src/bool_and_or.rs
b/datafusion/functions-aggregate/src/bool_and_or.rs
index 1b5b20f43b..29dfc68e05 100644
--- a/datafusion/functions-aggregate/src/bool_and_or.rs
+++ b/datafusion/functions-aggregate/src/bool_and_or.rs
@@ -19,7 +19,6 @@
use std::any::Any;
use std::mem::size_of_val;
-use std::sync::OnceLock;
use arrow::array::ArrayRef;
use arrow::array::BooleanArray;
@@ -38,7 +37,6 @@ use datafusion_expr::{
Signature, Volatility,
};
-use datafusion_doc::DocSection;
use
datafusion_functions_aggregate_common::aggregate::groups_accumulator::bool_op::BooleanGroupsAccumulator;
use datafusion_macros::user_doc;
diff --git a/datafusion/functions-aggregate/src/correlation.rs
b/datafusion/functions-aggregate/src/correlation.rs
index b40555bf6c..a0ccdb0ae7 100644
--- a/datafusion/functions-aggregate/src/correlation.rs
+++ b/datafusion/functions-aggregate/src/correlation.rs
@@ -20,7 +20,7 @@
use std::any::Any;
use std::fmt::Debug;
use std::mem::size_of_val;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::compute::{and, filter, is_not_null};
use arrow::{
@@ -31,7 +31,6 @@ use arrow::{
use crate::covariance::CovarianceAccumulator;
use crate::stddev::StddevAccumulator;
use datafusion_common::{plan_err, Result, ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::{
function::{AccumulatorArgs, StateFieldsArgs},
type_coercion::aggregates::NUMERICS,
diff --git a/datafusion/functions-aggregate/src/count.rs
b/datafusion/functions-aggregate/src/count.rs
index 550df8cb4f..b4164c211c 100644
--- a/datafusion/functions-aggregate/src/count.rs
+++ b/datafusion/functions-aggregate/src/count.rs
@@ -17,7 +17,6 @@
use ahash::RandomState;
use datafusion_common::stats::Precision;
-use datafusion_doc::DocSection;
use
datafusion_functions_aggregate_common::aggregate::count_distinct::BytesViewDistinctCountAccumulator;
use datafusion_macros::user_doc;
use datafusion_physical_expr::expressions;
@@ -25,7 +24,7 @@ use std::collections::HashSet;
use std::fmt::Debug;
use std::mem::{size_of, size_of_val};
use std::ops::BitAnd;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::{
array::{ArrayRef, AsArray},
diff --git a/datafusion/functions-aggregate/src/covariance.rs
b/datafusion/functions-aggregate/src/covariance.rs
index adb546e4d9..ffbf2ceef0 100644
--- a/datafusion/functions-aggregate/src/covariance.rs
+++ b/datafusion/functions-aggregate/src/covariance.rs
@@ -19,7 +19,6 @@
use std::fmt::Debug;
use std::mem::size_of_val;
-use std::sync::OnceLock;
use arrow::{
array::{ArrayRef, Float64Array, UInt64Array},
@@ -31,7 +30,6 @@ use datafusion_common::{
downcast_value, plan_err, unwrap_or_internal_err, DataFusionError, Result,
ScalarValue,
};
-use datafusion_doc::DocSection;
use datafusion_expr::{
function::{AccumulatorArgs, StateFieldsArgs},
type_coercion::aggregates::NUMERICS,
diff --git a/datafusion/functions-aggregate/src/first_last.rs
b/datafusion/functions-aggregate/src/first_last.rs
index f3e66edbc0..9ad55d91a6 100644
--- a/datafusion/functions-aggregate/src/first_last.rs
+++ b/datafusion/functions-aggregate/src/first_last.rs
@@ -20,7 +20,7 @@
use std::any::Any;
use std::fmt::Debug;
use std::mem::size_of_val;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::{ArrayRef, AsArray, BooleanArray};
use arrow::compute::{self, lexsort_to_indices, take_arrays, SortColumn};
@@ -29,7 +29,6 @@ use datafusion_common::utils::{compare_rows, get_row_at_idx};
use datafusion_common::{
arrow_datafusion_err, internal_err, DataFusionError, Result, ScalarValue,
};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::utils::{format_state_name, AggregateOrderSensitivity};
use datafusion_expr::{
diff --git a/datafusion/functions-aggregate/src/grouping.rs
b/datafusion/functions-aggregate/src/grouping.rs
index 36bdf68c1b..445774ff11 100644
--- a/datafusion/functions-aggregate/src/grouping.rs
+++ b/datafusion/functions-aggregate/src/grouping.rs
@@ -19,12 +19,10 @@
use std::any::Any;
use std::fmt;
-use std::sync::OnceLock;
use arrow::datatypes::DataType;
use arrow::datatypes::Field;
use datafusion_common::{not_impl_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::function::AccumulatorArgs;
use datafusion_expr::function::StateFieldsArgs;
use datafusion_expr::utils::format_state_name;
diff --git a/datafusion/functions-aggregate/src/median.rs
b/datafusion/functions-aggregate/src/median.rs
index db5fbf0016..70f192c32a 100644
--- a/datafusion/functions-aggregate/src/median.rs
+++ b/datafusion/functions-aggregate/src/median.rs
@@ -18,7 +18,7 @@
use std::cmp::Ordering;
use std::fmt::{Debug, Formatter};
use std::mem::{size_of, size_of_val};
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::{downcast_integer, ArrowNumericType};
use arrow::{
@@ -34,7 +34,6 @@ use arrow::array::ArrowNativeTypeOp;
use arrow::datatypes::{ArrowNativeType, ArrowPrimitiveType};
use datafusion_common::{DataFusionError, HashSet, Result, ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::function::StateFieldsArgs;
use datafusion_expr::{
function::AccumulatorArgs, utils::format_state_name, Accumulator,
AggregateUDFImpl,
diff --git a/datafusion/functions-aggregate/src/min_max.rs
b/datafusion/functions-aggregate/src/min_max.rs
index acbeebaad6..a0f7634c5f 100644
--- a/datafusion/functions-aggregate/src/min_max.rs
+++ b/datafusion/functions-aggregate/src/min_max.rs
@@ -55,7 +55,6 @@ use arrow::datatypes::{
use crate::min_max::min_max_bytes::MinMaxBytesAccumulator;
use datafusion_common::ScalarValue;
-use datafusion_doc::DocSection;
use datafusion_expr::{
function::AccumulatorArgs, Accumulator, AggregateUDFImpl, Documentation,
Signature,
Volatility,
@@ -65,7 +64,6 @@ use datafusion_macros::user_doc;
use half::f16;
use std::mem::size_of_val;
use std::ops::Deref;
-use std::sync::OnceLock;
fn get_min_max_result_type(input_types: &[DataType]) -> Result<Vec<DataType>> {
// make sure that the input types only has one element.
diff --git a/datafusion/functions-aggregate/src/nth_value.rs
b/datafusion/functions-aggregate/src/nth_value.rs
index 15b9e97516..8252fd6baa 100644
--- a/datafusion/functions-aggregate/src/nth_value.rs
+++ b/datafusion/functions-aggregate/src/nth_value.rs
@@ -21,14 +21,13 @@
use std::any::Any;
use std::collections::VecDeque;
use std::mem::{size_of, size_of_val};
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::{new_empty_array, ArrayRef, AsArray, StructArray};
use arrow_schema::{DataType, Field, Fields};
use datafusion_common::utils::{get_row_at_idx, SingleRowListArrayBuilder};
use datafusion_common::{exec_err, internal_err, not_impl_err, Result,
ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::utils::format_state_name;
use datafusion_expr::{
diff --git a/datafusion/functions-aggregate/src/stddev.rs
b/datafusion/functions-aggregate/src/stddev.rs
index 09a39e342c..adf86a128c 100644
--- a/datafusion/functions-aggregate/src/stddev.rs
+++ b/datafusion/functions-aggregate/src/stddev.rs
@@ -20,14 +20,13 @@
use std::any::Any;
use std::fmt::{Debug, Formatter};
use std::mem::align_of_val;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::Float64Array;
use arrow::{array::ArrayRef, datatypes::DataType, datatypes::Field};
use datafusion_common::{internal_err, not_impl_err, Result};
use datafusion_common::{plan_err, ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::function::{AccumulatorArgs, StateFieldsArgs};
use datafusion_expr::utils::format_state_name;
use datafusion_expr::{
diff --git a/datafusion/functions-aggregate/src/string_agg.rs
b/datafusion/functions-aggregate/src/string_agg.rs
index 5a52bec55f..7643b44e11 100644
--- a/datafusion/functions-aggregate/src/string_agg.rs
+++ b/datafusion/functions-aggregate/src/string_agg.rs
@@ -22,7 +22,6 @@ use arrow_schema::DataType;
use datafusion_common::cast::as_generic_string_array;
use datafusion_common::Result;
use datafusion_common::{not_impl_err, ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::function::AccumulatorArgs;
use datafusion_expr::{
Accumulator, AggregateUDFImpl, Documentation, Signature, TypeSignature,
Volatility,
@@ -31,7 +30,6 @@ use datafusion_macros::user_doc;
use datafusion_physical_expr::expressions::Literal;
use std::any::Any;
use std::mem::size_of_val;
-use std::sync::OnceLock;
make_udaf_expr_and_func!(
StringAgg,
diff --git a/datafusion/functions-aggregate/src/sum.rs
b/datafusion/functions-aggregate/src/sum.rs
index ccc6ee3cf9..6c2854f6bc 100644
--- a/datafusion/functions-aggregate/src/sum.rs
+++ b/datafusion/functions-aggregate/src/sum.rs
@@ -22,7 +22,6 @@ use datafusion_expr::utils::AggregateOrderSensitivity;
use std::any::Any;
use std::collections::HashSet;
use std::mem::{size_of, size_of_val};
-use std::sync::OnceLock;
use arrow::array::Array;
use arrow::array::ArrowNativeTypeOp;
@@ -35,7 +34,6 @@ use arrow::datatypes::{
};
use arrow::{array::ArrayRef, datatypes::Field};
use datafusion_common::{exec_err, not_impl_err, Result, ScalarValue};
-use datafusion_doc::DocSection;
use datafusion_expr::function::AccumulatorArgs;
use datafusion_expr::function::StateFieldsArgs;
use datafusion_expr::utils::format_state_name;
diff --git a/datafusion/functions-aggregate/src/variance.rs
b/datafusion/functions-aggregate/src/variance.rs
index 70b1073408..8aa7a40ce3 100644
--- a/datafusion/functions-aggregate/src/variance.rs
+++ b/datafusion/functions-aggregate/src/variance.rs
@@ -25,13 +25,11 @@ use arrow::{
datatypes::{DataType, Field},
};
use std::mem::{size_of, size_of_val};
-use std::sync::OnceLock;
use std::{fmt::Debug, sync::Arc};
use datafusion_common::{
downcast_value, not_impl_err, plan_err, DataFusionError, Result,
ScalarValue,
};
-use datafusion_doc::DocSection;
use datafusion_expr::{
function::{AccumulatorArgs, StateFieldsArgs},
utils::format_state_name,
diff --git a/datafusion/functions/src/datetime/to_date.rs
b/datafusion/functions/src/datetime/to_date.rs
index e2edea843e..091d0ba376 100644
--- a/datafusion/functions/src/datetime/to_date.rs
+++ b/datafusion/functions/src/datetime/to_date.rs
@@ -22,13 +22,11 @@ use arrow::error::ArrowError::ParseError;
use arrow::{array::types::Date32Type, compute::kernels::cast_utils::Parser};
use datafusion_common::error::DataFusionError;
use datafusion_common::{arrow_err, exec_err, internal_datafusion_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::{
ColumnarValue, Documentation, ScalarUDFImpl, Signature, Volatility,
};
use datafusion_macros::user_doc;
use std::any::Any;
-use std::sync::OnceLock;
#[user_doc(
doc_section(label = "Time and Date Functions"),
diff --git a/datafusion/functions/src/math/abs.rs
b/datafusion/functions/src/math/abs.rs
index c0c7c6f0f6..e3d448083e 100644
--- a/datafusion/functions/src/math/abs.rs
+++ b/datafusion/functions/src/math/abs.rs
@@ -18,7 +18,7 @@
//! math expressions
use std::any::Any;
-use std::sync::{Arc, OnceLock};
+use std::sync::Arc;
use arrow::array::{
ArrayRef, Decimal128Array, Decimal256Array, Float32Array, Float64Array,
Int16Array,
@@ -27,7 +27,6 @@ use arrow::array::{
use arrow::datatypes::DataType;
use arrow::error::ArrowError;
use datafusion_common::{exec_err, not_impl_err, DataFusionError, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::interval_arithmetic::Interval;
use datafusion_expr::sort_properties::{ExprProperties, SortProperties};
use datafusion_expr::{
diff --git a/datafusion/functions/src/string/ltrim.rs
b/datafusion/functions/src/string/ltrim.rs
index b3e7f0bf00..0bc62ee500 100644
--- a/datafusion/functions/src/string/ltrim.rs
+++ b/datafusion/functions/src/string/ltrim.rs
@@ -22,12 +22,10 @@ use std::any::Any;
use crate::string::common::*;
use crate::utils::{make_scalar_function, utf8_to_str_type};
use datafusion_common::{exec_err, Result};
-use datafusion_doc::DocSection;
use datafusion_expr::function::Hint;
use datafusion_expr::{ColumnarValue, Documentation, TypeSignature, Volatility};
use datafusion_expr::{ScalarUDFImpl, Signature};
use datafusion_macros::user_doc;
-use std::sync::OnceLock;
/// Returns the longest string with leading characters removed. If the
characters are not specified, whitespace is removed.
/// ltrim('zzzytest', 'xyz') = 'test'
diff --git a/datafusion/macros/src/user_doc.rs
b/datafusion/macros/src/user_doc.rs
index 54b688ac2a..441b3db2a1 100644
--- a/datafusion/macros/src/user_doc.rs
+++ b/datafusion/macros/src/user_doc.rs
@@ -26,16 +26,19 @@ use syn::{parse_macro_input, DeriveInput, LitStr};
/// declared on `AggregateUDF`, `WindowUDFImpl`, `ScalarUDFImpl` traits.
///
/// Example:
+/// ```ignore
/// #[user_doc(
/// doc_section(include = "true", label = "Time and Date Functions"),
-/// description = r"Converts a value to a date (`YYYY-MM-DD`)."
-/// sql_example = "```sql\n\
-/// \> select to_date('2023-01-31');\n\
-/// +-----------------------------+\n\
-/// | to_date(Utf8(\"2023-01-31\")) |\n\
-/// +-----------------------------+\n\
-/// | 2023-01-31 |\n\
-/// +-----------------------------+\n\"),
+/// description = r"Converts a value to a date (`YYYY-MM-DD`).",
+/// syntax_example = "to_date('2017-05-31', '%Y-%m-%d')",
+/// sql_example = r#"```sql
+/// > select to_date('2023-01-31');
+/// +-----------------------------+
+/// | to_date(Utf8(\"2023-01-31\")) |
+/// +-----------------------------+
+/// | 2023-01-31 |
+/// +-----------------------------+
+/// ```"#,
/// standard_argument(name = "expression", prefix = "String"),
/// argument(
/// name = "format_n",
@@ -48,40 +51,50 @@ use syn::{parse_macro_input, DeriveInput, LitStr};
/// pub struct ToDateFunc {
/// signature: Signature,
/// }
-///
+/// ```
/// will generate the following code
///
-/// #[derive(Debug)] pub struct ToDateFunc { signature : Signature, }
-/// use datafusion_doc :: DocSection;
-/// use datafusion_doc :: DocumentationBuilder;
-/// static DOCUMENTATION : OnceLock < Documentation > = OnceLock :: new();
-/// impl ToDateFunc
-/// {
-/// fn doc(& self) -> Option < & Documentation >
-/// {
-/// Some(DOCUMENTATION.get_or_init(||
-/// {
-/// Documentation ::
-/// builder(DocSection
-/// {
-/// include : true, label : "Time and Date Functions",
description
-/// : None
-/// }, r"Converts a value to a date (`YYYY-MM-DD`).")
-/// .with_syntax_example("to_date('2017-05-31',
'%Y-%m-%d')".to_string(),"```sql\n\
-/// \> select to_date('2023-01-31');\n\
-/// +-----------------------------+\n\
-/// | to_date(Utf8(\"2023-01-31\")) |\n\
-/// +-----------------------------+\n\
-/// | 2023-01-31 |\n\
-/// +-----------------------------+\n\)
-/// .with_standard_argument("expression", "String".into())
-/// .with_argument("format_n",
-/// r"Optional [Chrono
format](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
strings to use to parse the expression. Formats will be tried in the order
-/// they appear with the first successful one being returned. If none of the
formats successfully parse the expression
-/// an error will be returned.").build()
-/// }))
+/// ```ignore
+/// pub struct ToDateFunc {
+/// signature: Signature,
+/// }
+/// impl ToDateFunc {
+/// fn doc(&self) -> Option<&datafusion_doc::Documentation> {
+/// static DOCUMENTATION: std::sync::LazyLock<
+/// datafusion_doc::Documentation,
+/// > = std::sync::LazyLock::new(|| {
+/// datafusion_doc::Documentation::builder(
+/// datafusion_doc::DocSection {
+/// include: true,
+/// label: "Time and Date Functions",
+/// description: None,
+/// },
+/// r"Converts a value to a date
(`YYYY-MM-DD`).".to_string(),
+/// "to_date('2017-05-31', '%Y-%m-%d')".to_string(),
+/// )
+/// .with_sql_example(
+/// r#"```sql
+/// > select to_date('2023-01-31');
+/// +-----------------------------+
+/// | to_date(Utf8(\"2023-01-31\")) |
+/// +-----------------------------+
+/// | 2023-01-31 |
+/// +-----------------------------+
+/// ```"#,
+/// )
+/// .with_standard_argument("expression", "String".into())
+/// .with_argument(
+/// "format_n",
+/// r"Optional [Chrono
format](https://docs.rs/chrono/latest/chrono/format/strftime/index.html)
strings to use to parse the expression. Formats will be tried in the order
+/// they appear with the first successful one being returned. If none of the
formats successfully parse the expression
+/// an error will be returned.",
+/// )
+/// .build()
+/// });
+/// Some(&DOCUMENTATION)
/// }
/// }
+/// ```
#[proc_macro_attribute]
pub fn user_doc(args: TokenStream, input: TokenStream) -> TokenStream {
let mut doc_section_include: Option<LitStr> = None;
@@ -235,19 +248,14 @@ pub fn user_doc(args: TokenStream, input: TokenStream) ->
TokenStream {
}
});
- let lock_name: proc_macro2::TokenStream =
- format!("{name}_DOCUMENTATION").parse().unwrap();
-
let generated = quote! {
#input
- static #lock_name: OnceLock<Documentation> = OnceLock::new();
-
impl #name {
-
- fn doc(&self) -> Option<&Documentation> {
- Some(#lock_name.get_or_init(|| {
- Documentation::builder(DocSection { include:
#doc_section_include, label: #doc_section_lbl, description:
#doc_section_description },
+ fn doc(&self) -> Option<&datafusion_doc::Documentation> {
+ static DOCUMENTATION:
std::sync::LazyLock<datafusion_doc::Documentation> =
+ std::sync::LazyLock::new(|| {
+
datafusion_doc::Documentation::builder(datafusion_doc::DocSection { include:
#doc_section_include, label: #doc_section_lbl, description:
#doc_section_description },
#description.to_string(), #syntax_example.to_string())
#sql_example
#alt_syntax_example
@@ -255,7 +263,8 @@ pub fn user_doc(args: TokenStream, input: TokenStream) ->
TokenStream {
#(#udf_args)*
#(#related_udfs)*
.build()
- }))
+ });
+ Some(&DOCUMENTATION)
}
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]