From 3946812d4cff4498c81d0d3426229e72327e2fb6 Mon Sep 17 00:00:00 2001 From: jonahgao Date: Wed, 4 Dec 2024 16:47:05 +0800 Subject: [PATCH 1/2] refactor: Replace OnceLock with LazyLock --- datafusion/common/src/types/builtin.rs | 8 ++++---- datafusion/expr/src/logical_plan/statement.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/datafusion/common/src/types/builtin.rs b/datafusion/common/src/types/builtin.rs index c6105d37c3bdb..ec69db7903779 100644 --- a/datafusion/common/src/types/builtin.rs +++ b/datafusion/common/src/types/builtin.rs @@ -16,17 +16,17 @@ // under the License. use crate::types::{LogicalTypeRef, NativeType}; -use std::sync::{Arc, OnceLock}; +use std::sync::{Arc, LazyLock}; macro_rules! singleton { ($name:ident, $getter:ident, $ty:ident) => { - // TODO: Use LazyLock instead of getter function when MSRV gets bumped - static $name: OnceLock = OnceLock::new(); + static $name: LazyLock = + LazyLock::new(|| Arc::new(NativeType::$ty)); #[doc = "Getter for singleton instance of a logical type representing"] #[doc = concat!("[`NativeType::", stringify!($ty), "`].")] pub fn $getter() -> LogicalTypeRef { - Arc::clone($name.get_or_init(|| Arc::new(NativeType::$ty))) + Arc::clone(&$name) } }; } diff --git a/datafusion/expr/src/logical_plan/statement.rs b/datafusion/expr/src/logical_plan/statement.rs index a8b53e8a1fb15..514a890370d74 100644 --- a/datafusion/expr/src/logical_plan/statement.rs +++ b/datafusion/expr/src/logical_plan/statement.rs @@ -18,14 +18,10 @@ use arrow::datatypes::DataType; use datafusion_common::{DFSchema, DFSchemaRef}; use std::fmt::{self, Display}; -use std::sync::{Arc, OnceLock}; +use std::sync::{Arc, LazyLock}; use crate::{expr_vec_fmt, Expr, LogicalPlan}; -/// Statements have a unchanging empty schema. -/// TODO: Use `LazyLock` when MSRV is 1.80.0 -static STATEMENT_EMPTY_SCHEMA: OnceLock = OnceLock::new(); - /// Various types of Statements. /// /// # Transactions: @@ -54,7 +50,11 @@ pub enum Statement { impl Statement { /// Get a reference to the logical plan's schema pub fn schema(&self) -> &DFSchemaRef { - STATEMENT_EMPTY_SCHEMA.get_or_init(|| Arc::new(DFSchema::empty())) + // Statements have a unchanging empty schema. + static STATEMENT_EMPTY_SCHEMA: LazyLock = + LazyLock::new(|| Arc::new(DFSchema::empty())); + + &STATEMENT_EMPTY_SCHEMA } /// Return a descriptive string describing the type of this From 5968564d59f4ffaf3bc5ef2b12c31f1c05690a55 Mon Sep 17 00:00:00 2001 From: jonahgao Date: Wed, 4 Dec 2024 16:47:53 +0800 Subject: [PATCH 2/2] Fix typo --- datafusion/expr/src/logical_plan/statement.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/expr/src/logical_plan/statement.rs b/datafusion/expr/src/logical_plan/statement.rs index 514a890370d74..93be04c275647 100644 --- a/datafusion/expr/src/logical_plan/statement.rs +++ b/datafusion/expr/src/logical_plan/statement.rs @@ -50,7 +50,7 @@ pub enum Statement { impl Statement { /// Get a reference to the logical plan's schema pub fn schema(&self) -> &DFSchemaRef { - // Statements have a unchanging empty schema. + // Statements have an unchanging empty schema. static STATEMENT_EMPTY_SCHEMA: LazyLock = LazyLock::new(|| Arc::new(DFSchema::empty()));