This is an automated email from the ASF dual-hosted git repository.
github-bot 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 36ec9f1de0 Feat/update rust 2024 edition (#18915)
36ec9f1de0 is described below
commit 36ec9f1de0aeabca60b8f7ebe07d650b8ef03506
Author: Tim Saucer <[email protected]>
AuthorDate: Fri Nov 28 14:44:32 2025 -0500
Feat/update rust 2024 edition (#18915)
## Which issue does this PR close?
This addresses part of https://github.com/apache/datafusion/issues/15804
but does not close it.
## Rationale for this change
Now that we are on MSRV 1.88 we can use rust edition 2024, which brings
let chains and other nice features. It also improves `unsafe` checking.
In order to introduce these changes in slower way instead of one massive
PR that is too difficult to manage we are updating a few crates at a
time.
## What changes are included in this PR?
Updates 6 crates to 2024.
- common
- common-runtime
- doc
- expr-common
- macros
- proto-common
## Are these changes tested?
Existing unit tests. There are no functional code changes.
## Are there any user-facing changes?
None.
---
datafusion/common-runtime/Cargo.toml | 2 +-
datafusion/common-runtime/src/common.rs | 2 +-
datafusion/common-runtime/src/lib.rs | 2 +-
datafusion/common-runtime/src/trace_utils.rs | 2 +-
datafusion/common/Cargo.toml | 2 +-
datafusion/common/src/cast.rs | 8 +-
datafusion/common/src/config.rs | 22 ++-
datafusion/common/src/cse.rs | 8 +-
datafusion/common/src/dfschema.rs | 99 +++++-----
datafusion/common/src/error.rs | 28 +--
datafusion/common/src/file_options/mod.rs | 2 +-
.../common/src/file_options/parquet_writer.rs | 24 +--
datafusion/common/src/format.rs | 6 +-
datafusion/common/src/hash_utils.rs | 10 +-
datafusion/common/src/lib.rs | 20 +-
datafusion/common/src/metadata.rs | 2 +-
datafusion/common/src/nested_struct.rs | 6 +-
datafusion/common/src/param_value.rs | 2 +-
datafusion/common/src/pruning.rs | 2 +-
datafusion/common/src/rounding.rs | 2 +-
datafusion/common/src/scalar/cache.rs | 6 +-
datafusion/common/src/scalar/mod.rs | 202 +++++++++++----------
datafusion/common/src/stats.rs | 13 +-
datafusion/common/src/test_util.rs | 54 +++---
datafusion/common/src/tree_node.rs | 54 +++---
datafusion/common/src/types/native.rs | 8 +-
datafusion/common/src/utils/memory.rs | 2 +-
datafusion/common/src/utils/mod.rs | 20 +-
datafusion/doc/Cargo.toml | 2 +-
datafusion/doc/src/udf.rs | 4 +-
datafusion/expr-common/Cargo.toml | 2 +-
datafusion/expr-common/src/accumulator.rs | 2 +-
datafusion/expr-common/src/casts.rs | 9 +-
datafusion/expr-common/src/columnar_value.rs | 4 +-
datafusion/expr-common/src/groups_accumulator.rs | 2 +-
datafusion/expr-common/src/interval_arithmetic.rs | 56 +++---
datafusion/expr-common/src/signature.rs | 188 +++++++++++--------
datafusion/expr-common/src/statistics.rs | 10 +-
.../expr-common/src/type_coercion/aggregates.rs | 2 +-
datafusion/expr-common/src/type_coercion/binary.rs | 24 ++-
.../src/type_coercion/binary/tests/arithmetic.rs | 13 +-
.../src/type_coercion/binary/tests/comparison.rs | 10 +-
datafusion/macros/Cargo.toml | 2 +-
datafusion/macros/src/user_doc.rs | 2 +-
datafusion/proto-common/Cargo.toml | 2 +-
datafusion/proto-common/src/common.rs | 2 +-
datafusion/proto-common/src/from_proto/mod.rs | 8 +-
datafusion/proto-common/src/to_proto/mod.rs | 10 +-
dev/depcheck/Cargo.toml | 3 +-
dev/depcheck/{Cargo.toml => rust-toolchain.toml} | 12 +-
dev/depcheck/src/main.rs | 2 +-
51 files changed, 539 insertions(+), 442 deletions(-)
diff --git a/datafusion/common-runtime/Cargo.toml
b/datafusion/common-runtime/Cargo.toml
index fd9a818bcb..65e1544601 100644
--- a/datafusion/common-runtime/Cargo.toml
+++ b/datafusion/common-runtime/Cargo.toml
@@ -21,7 +21,7 @@ description = "Common Runtime functionality for DataFusion
query engine"
keywords = ["arrow", "query", "sql"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/common-runtime/src/common.rs
b/datafusion/common-runtime/src/common.rs
index cebd6e04cd..649abb338c 100644
--- a/datafusion/common-runtime/src/common.rs
+++ b/datafusion/common-runtime/src/common.rs
@@ -115,7 +115,7 @@ impl<R> Drop for SpawnedTask<R> {
mod tests {
use super::*;
- use std::future::{pending, Pending};
+ use std::future::{Pending, pending};
use tokio::{runtime::Runtime, sync::oneshot};
diff --git a/datafusion/common-runtime/src/lib.rs
b/datafusion/common-runtime/src/lib.rs
index eb32fead7e..81fd61a4c6 100644
--- a/datafusion/common-runtime/src/lib.rs
+++ b/datafusion/common-runtime/src/lib.rs
@@ -34,5 +34,5 @@ mod trace_utils;
pub use common::SpawnedTask;
pub use join_set::JoinSet;
pub use trace_utils::{
- set_join_set_tracer, trace_block, trace_future, JoinSetTracer,
JoinSetTracerError,
+ JoinSetTracer, JoinSetTracerError, set_join_set_tracer, trace_block,
trace_future,
};
diff --git a/datafusion/common-runtime/src/trace_utils.rs
b/datafusion/common-runtime/src/trace_utils.rs
index c3a39c355f..f8adbe8825 100644
--- a/datafusion/common-runtime/src/trace_utils.rs
+++ b/datafusion/common-runtime/src/trace_utils.rs
@@ -15,8 +15,8 @@
// specific language governing permissions and limitations
// under the License.
-use futures::future::BoxFuture;
use futures::FutureExt;
+use futures::future::BoxFuture;
use std::any::Any;
use std::error::Error;
use std::fmt::{Display, Formatter, Result as FmtResult};
diff --git a/datafusion/common/Cargo.toml b/datafusion/common/Cargo.toml
index 5c36e33c72..dac06de659 100644
--- a/datafusion/common/Cargo.toml
+++ b/datafusion/common/Cargo.toml
@@ -21,7 +21,7 @@ description = "Common functionality for DataFusion query
engine"
keywords = ["arrow", "query", "sql"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/common/src/cast.rs b/datafusion/common/src/cast.rs
index b95167ca13..29082cc303 100644
--- a/datafusion/common/src/cast.rs
+++ b/datafusion/common/src/cast.rs
@@ -20,11 +20,11 @@
//! but provide an error message rather than a panic, as the corresponding
//! kernels in arrow-rs such as `as_boolean_array` do.
-use crate::{downcast_value, Result};
+use crate::{Result, downcast_value};
use arrow::array::{
BinaryViewArray, Decimal32Array, Decimal64Array, DurationMicrosecondArray,
DurationMillisecondArray, DurationNanosecondArray, DurationSecondArray,
Float16Array,
- Int16Array, Int8Array, LargeBinaryArray, LargeListViewArray,
LargeStringArray,
+ Int8Array, Int16Array, LargeBinaryArray, LargeListViewArray,
LargeStringArray,
ListViewArray, StringViewArray, UInt16Array,
};
use arrow::{
@@ -37,8 +37,8 @@ use arrow::{
MapArray, NullArray, OffsetSizeTrait, PrimitiveArray, StringArray,
StructArray,
Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray,
Time64NanosecondArray, TimestampMicrosecondArray,
TimestampMillisecondArray,
- TimestampNanosecondArray, TimestampSecondArray, UInt32Array,
UInt64Array,
- UInt8Array, UnionArray,
+ TimestampNanosecondArray, TimestampSecondArray, UInt8Array,
UInt32Array,
+ UInt64Array, UnionArray,
},
datatypes::{ArrowDictionaryKeyType, ArrowPrimitiveType},
};
diff --git a/datafusion/common/src/config.rs b/datafusion/common/src/config.rs
index 9ba2550c39..a4385f0fd8 100644
--- a/datafusion/common/src/config.rs
+++ b/datafusion/common/src/config.rs
@@ -1121,7 +1121,7 @@ impl<'a> TryInto<arrow::util::display::FormatOptions<'a>>
for &'a FormatOptions
return _config_err!(
"Invalid duration format: {}. Valid values are pretty or
iso8601",
self.duration_format
- )
+ );
}
};
@@ -2257,13 +2257,13 @@ impl ConfigField for TableParquetOptions {
[_meta] | [_meta, ""] => {
return _config_err!(
"Invalid metadata key provided, missing key in
metadata::<key>"
- )
+ );
}
[_meta, k] => k.into(),
_ => {
return _config_err!(
"Invalid metadata key provided, found too many '::' in
\"{key}\""
- )
+ );
}
};
self.key_value_metadata.insert(k, Some(value.into()));
@@ -3287,9 +3287,11 @@ mod tests {
.set("format.bloom_filter_enabled::col1", "true")
.unwrap();
let entries = table_config.entries();
- assert!(entries
- .iter()
- .any(|item| item.key == "format.bloom_filter_enabled::col1"))
+ assert!(
+ entries
+ .iter()
+ .any(|item| item.key == "format.bloom_filter_enabled::col1")
+ )
}
#[cfg(feature = "parquet")]
@@ -3303,10 +3305,10 @@ mod tests {
)
.unwrap();
let entries = table_parquet_options.entries();
- assert!(entries
- .iter()
- .any(|item| item.key
- == "crypto.file_encryption.column_key_as_hex::double_field"))
+ assert!(
+ entries.iter().any(|item| item.key
+ == "crypto.file_encryption.column_key_as_hex::double_field")
+ )
}
#[cfg(feature = "parquet")]
diff --git a/datafusion/common/src/cse.rs b/datafusion/common/src/cse.rs
index 674d338617..93169d6a02 100644
--- a/datafusion/common/src/cse.rs
+++ b/datafusion/common/src/cse.rs
@@ -19,12 +19,12 @@
//! a [`CSEController`], that defines how to eliminate common subtrees from a
particular
//! [`TreeNode`] tree.
+use crate::Result;
use crate::hash_utils::combine_hashes;
use crate::tree_node::{
Transformed, TransformedResult, TreeNode, TreeNodeRecursion,
TreeNodeRewriter,
TreeNodeVisitor,
};
-use crate::Result;
use indexmap::IndexMap;
use std::collections::HashMap;
use std::hash::{BuildHasher, Hash, Hasher, RandomState};
@@ -676,13 +676,13 @@ where
#[cfg(test)]
mod test {
+ use crate::Result;
use crate::alias::AliasGenerator;
use crate::cse::{
- CSEController, HashNode, IdArray, Identifier, NodeStats, NormalizeEq,
- Normalizeable, CSE,
+ CSE, CSEController, HashNode, IdArray, Identifier, NodeStats,
NormalizeEq,
+ Normalizeable,
};
use crate::tree_node::tests::TestTreeNode;
- use crate::Result;
use std::collections::HashSet;
use std::hash::{Hash, Hasher};
diff --git a/datafusion/common/src/dfschema.rs
b/datafusion/common/src/dfschema.rs
index 24d152a7db..fd4584bca0 100644
--- a/datafusion/common/src/dfschema.rs
+++ b/datafusion/common/src/dfschema.rs
@@ -23,10 +23,10 @@ use std::fmt::{Display, Formatter};
use std::hash::Hash;
use std::sync::Arc;
-use crate::error::{DataFusionError, Result, _plan_err, _schema_err};
+use crate::error::{_plan_err, _schema_err, DataFusionError, Result};
use crate::{
- field_not_found, unqualified_field_not_found, Column,
FunctionalDependencies,
- SchemaError, TableReference,
+ Column, FunctionalDependencies, SchemaError, TableReference,
field_not_found,
+ unqualified_field_not_found,
};
use arrow::compute::can_cast_types;
@@ -982,36 +982,35 @@ fn format_field_with_indent(
result.push_str(&format!(
"{indent}|-- {field_name}: map (nullable = {nullable_str})\n"
));
- if let DataType::Struct(inner_fields) = field.data_type() {
- if inner_fields.len() == 2 {
- format_field_with_indent(
- result,
- "key",
- inner_fields[0].data_type(),
- inner_fields[0].is_nullable(),
- &child_indent,
- );
- let value_contains_null =
- field.is_nullable().to_string().to_lowercase();
- // Handle complex value types properly
- match inner_fields[1].data_type() {
- DataType::Struct(_)
- | DataType::List(_)
- | DataType::LargeList(_)
- | DataType::FixedSizeList(_, _)
- | DataType::Map(_, _) => {
- format_field_with_indent(
- result,
- "value",
- inner_fields[1].data_type(),
- inner_fields[1].is_nullable(),
- &child_indent,
- );
- }
- _ => {
- result.push_str(&format!("{child_indent}|-- value:
{} (nullable = {value_contains_null})\n",
+ if let DataType::Struct(inner_fields) = field.data_type()
+ && inner_fields.len() == 2
+ {
+ format_field_with_indent(
+ result,
+ "key",
+ inner_fields[0].data_type(),
+ inner_fields[0].is_nullable(),
+ &child_indent,
+ );
+ let value_contains_null =
field.is_nullable().to_string().to_lowercase();
+ // Handle complex value types properly
+ match inner_fields[1].data_type() {
+ DataType::Struct(_)
+ | DataType::List(_)
+ | DataType::LargeList(_)
+ | DataType::FixedSizeList(_, _)
+ | DataType::Map(_, _) => {
+ format_field_with_indent(
+ result,
+ "value",
+ inner_fields[1].data_type(),
+ inner_fields[1].is_nullable(),
+ &child_indent,
+ );
+ }
+ _ => {
+ result.push_str(&format!("{child_indent}|-- value: {}
(nullable = {value_contains_null})\n",
format_simple_data_type(inner_fields[1].data_type())));
- }
}
}
}
@@ -1433,12 +1432,14 @@ mod tests {
join.to_string()
);
// test valid access
- assert!(join
- .field_with_qualified_name(&TableReference::bare("t1"), "c0")
- .is_ok());
- assert!(join
- .field_with_qualified_name(&TableReference::bare("t2"), "c0")
- .is_ok());
+ assert!(
+ join.field_with_qualified_name(&TableReference::bare("t1"), "c0")
+ .is_ok()
+ );
+ assert!(
+ join.field_with_qualified_name(&TableReference::bare("t2"), "c0")
+ .is_ok()
+ );
// test invalid access
assert!(join.field_with_unqualified_name("c0").is_err());
assert!(join.field_with_unqualified_name("t1.c0").is_err());
@@ -1480,18 +1481,20 @@ mod tests {
join.to_string()
);
// test valid access
- assert!(join
- .field_with_qualified_name(&TableReference::bare("t1"), "c0")
- .is_ok());
+ assert!(
+ join.field_with_qualified_name(&TableReference::bare("t1"), "c0")
+ .is_ok()
+ );
assert!(join.field_with_unqualified_name("c0").is_ok());
assert!(join.field_with_unqualified_name("c100").is_ok());
assert!(join.field_with_name(None, "c100").is_ok());
// test invalid access
assert!(join.field_with_unqualified_name("t1.c0").is_err());
assert!(join.field_with_unqualified_name("t1.c100").is_err());
- assert!(join
- .field_with_qualified_name(&TableReference::bare(""), "c100")
- .is_err());
+ assert!(
+ join.field_with_qualified_name(&TableReference::bare(""), "c100")
+ .is_err()
+ );
Ok(())
}
@@ -1500,9 +1503,11 @@ mod tests {
let left = DFSchema::try_from_qualified_schema("t1",
&test_schema_1())?;
let right = DFSchema::try_from(test_schema_1())?;
let join = left.join(&right);
- assert_contains!(join.unwrap_err().to_string(),
- "Schema error: Schema contains qualified \
- field name t1.c0 and unqualified field name c0 which
would be ambiguous");
+ assert_contains!(
+ join.unwrap_err().to_string(),
+ "Schema error: Schema contains qualified \
+ field name t1.c0 and unqualified field name c0 which
would be ambiguous"
+ );
Ok(())
}
diff --git a/datafusion/common/src/error.rs b/datafusion/common/src/error.rs
index 6a5cb31fe3..83ffca99d1 100644
--- a/datafusion/common/src/error.rs
+++ b/datafusion/common/src/error.rs
@@ -1223,9 +1223,10 @@ mod test {
#[test]
fn datafusion_error_to_arrow() {
let res = return_arrow_error().unwrap_err();
- assert!(res
- .to_string()
- .starts_with("External error: Error during planning: foo"));
+ assert!(
+ res.to_string()
+ .starts_with("External error: Error during planning: foo")
+ );
}
#[test]
@@ -1254,12 +1255,13 @@ mod test {
.unwrap(),
&"Error during planning: Err"
);
- assert!(!err
- .split(DataFusionError::BACK_TRACE_SEP)
- .collect::<Vec<&str>>()
- .get(1)
- .unwrap()
- .is_empty());
+ assert!(
+ !err.split(DataFusionError::BACK_TRACE_SEP)
+ .collect::<Vec<&str>>()
+ .get(1)
+ .unwrap()
+ .is_empty()
+ );
}
#[cfg(not(feature = "backtrace"))]
@@ -1403,9 +1405,11 @@ mod test {
let external_error_2: DataFusionError = generic_error_2.into();
println!("{external_error_2}");
- assert!(external_error_2
- .to_string()
- .starts_with("External error: io error"));
+ assert!(
+ external_error_2
+ .to_string()
+ .starts_with("External error: io error")
+ );
}
/// Model what happens when implementing SendableRecordBatchStream:
diff --git a/datafusion/common/src/file_options/mod.rs
b/datafusion/common/src/file_options/mod.rs
index 02667e0165..c7374949ec 100644
--- a/datafusion/common/src/file_options/mod.rs
+++ b/datafusion/common/src/file_options/mod.rs
@@ -31,10 +31,10 @@ mod tests {
use std::collections::HashMap;
use crate::{
+ Result,
config::{ConfigFileType, TableOptions},
file_options::{csv_writer::CsvWriterOptions,
json_writer::JsonWriterOptions},
parsers::CompressionTypeVariant,
- Result,
};
use parquet::{
diff --git a/datafusion/common/src/file_options/parquet_writer.rs
b/datafusion/common/src/file_options/parquet_writer.rs
index 564929c61b..47feb12c12 100644
--- a/datafusion/common/src/file_options/parquet_writer.rs
+++ b/datafusion/common/src/file_options/parquet_writer.rs
@@ -20,8 +20,8 @@
use std::sync::Arc;
use crate::{
+ _internal_datafusion_err, DataFusionError, Result,
config::{ParquetOptions, TableParquetOptions},
- DataFusionError, Result, _internal_datafusion_err,
};
use arrow::datatypes::Schema;
@@ -34,8 +34,8 @@ use parquet::{
file::{
metadata::KeyValue,
properties::{
- EnabledStatistics, WriterProperties, WriterPropertiesBuilder,
WriterVersion,
- DEFAULT_STATISTICS_ENABLED,
+ DEFAULT_STATISTICS_ENABLED, EnabledStatistics, WriterProperties,
+ WriterPropertiesBuilder, WriterVersion,
},
},
schema::types::ColumnPath,
@@ -106,7 +106,9 @@ impl TryFrom<&TableParquetOptions> for
WriterPropertiesBuilder {
if !global.skip_arrow_metadata
&& !key_value_metadata.contains_key(ARROW_SCHEMA_META_KEY)
{
- return Err(_internal_datafusion_err!("arrow schema was not added
to the kv_metadata, even though it is required by configuration settings"));
+ return Err(_internal_datafusion_err!(
+ "arrow schema was not added to the kv_metadata, even though it
is required by configuration settings"
+ ));
}
// add kv_meta, if any
@@ -408,8 +410,8 @@ mod tests {
};
use parquet::basic::Compression;
use parquet::file::properties::{
- BloomFilterProperties, EnabledStatistics, DEFAULT_BLOOM_FILTER_FPP,
- DEFAULT_BLOOM_FILTER_NDV,
+ BloomFilterProperties, DEFAULT_BLOOM_FILTER_FPP,
DEFAULT_BLOOM_FILTER_NDV,
+ EnabledStatistics,
};
use std::collections::HashMap;
@@ -674,8 +676,7 @@ mod tests {
let mut default_table_writer_opts = TableParquetOptions::default();
let default_parquet_opts = ParquetOptions::default();
assert_eq!(
- default_table_writer_opts.global,
- default_parquet_opts,
+ default_table_writer_opts.global, default_parquet_opts,
"should have matching defaults for TableParquetOptions.global and
ParquetOptions",
);
@@ -699,7 +700,9 @@ mod tests {
"should have different created_by sources",
);
assert!(
- default_writer_props.created_by().starts_with("parquet-rs
version"),
+ default_writer_props
+ .created_by()
+ .starts_with("parquet-rs version"),
"should indicate that writer_props defaults came from the extern
parquet crate",
);
assert!(
@@ -733,8 +736,7 @@ mod tests {
from_extern_parquet.global.skip_arrow_metadata = true;
assert_eq!(
- default_table_writer_opts,
- from_extern_parquet,
+ default_table_writer_opts, from_extern_parquet,
"the default writer_props should have the same configuration as
the session's default TableParquetOptions",
);
}
diff --git a/datafusion/common/src/format.rs b/datafusion/common/src/format.rs
index 764190e118..a505bd0e1c 100644
--- a/datafusion/common/src/format.rs
+++ b/datafusion/common/src/format.rs
@@ -176,9 +176,9 @@ impl FromStr for ExplainFormat {
"tree" => Ok(ExplainFormat::Tree),
"pgjson" => Ok(ExplainFormat::PostgresJSON),
"graphviz" => Ok(ExplainFormat::Graphviz),
- _ => {
- Err(DataFusionError::Configuration(format!("Invalid explain
format. Expected 'indent', 'tree', 'pgjson' or 'graphviz'. Got '{format}'")))
- }
+ _ => Err(DataFusionError::Configuration(format!(
+ "Invalid explain format. Expected 'indent', 'tree', 'pgjson'
or 'graphviz'. Got '{format}'"
+ ))),
}
}
}
diff --git a/datafusion/common/src/hash_utils.rs
b/datafusion/common/src/hash_utils.rs
index c6bd53356f..80299d9c0a 100644
--- a/datafusion/common/src/hash_utils.rs
+++ b/datafusion/common/src/hash_utils.rs
@@ -1181,10 +1181,12 @@ mod tests {
let result = with_hashes(empty, &random_state, |_hashes| Ok(()));
assert!(result.is_err());
- assert!(result
- .unwrap_err()
- .to_string()
- .contains("requires at least one array"));
+ assert!(
+ result
+ .unwrap_err()
+ .to_string()
+ .contains("requires at least one array")
+ );
}
#[test]
diff --git a/datafusion/common/src/lib.rs b/datafusion/common/src/lib.rs
index 15538e68d9..9e0238f97d 100644
--- a/datafusion/common/src/lib.rs
+++ b/datafusion/common/src/lib.rs
@@ -67,21 +67,21 @@ pub mod utils;
pub use arrow;
pub use column::Column;
pub use dfschema::{
- qualified_name, DFSchema, DFSchemaRef, ExprSchema, SchemaExt, ToDFSchema,
+ DFSchema, DFSchemaRef, ExprSchema, SchemaExt, ToDFSchema, qualified_name,
};
pub use diagnostic::Diagnostic;
pub use error::{
- field_not_found, unqualified_field_not_found, DataFusionError, Result,
SchemaError,
- SharedResult,
+ DataFusionError, Result, SchemaError, SharedResult, field_not_found,
+ unqualified_field_not_found,
};
pub use file_options::file_type::{
- GetExt, DEFAULT_ARROW_EXTENSION, DEFAULT_AVRO_EXTENSION,
DEFAULT_CSV_EXTENSION,
- DEFAULT_JSON_EXTENSION, DEFAULT_PARQUET_EXTENSION,
+ DEFAULT_ARROW_EXTENSION, DEFAULT_AVRO_EXTENSION, DEFAULT_CSV_EXTENSION,
+ DEFAULT_JSON_EXTENSION, DEFAULT_PARQUET_EXTENSION, GetExt,
};
pub use functional_dependencies::{
+ Constraint, Constraints, Dependency, FunctionalDependence,
FunctionalDependencies,
aggregate_functional_dependencies, get_required_group_by_exprs_indices,
- get_target_functional_dependencies, Constraint, Constraints, Dependency,
- FunctionalDependence, FunctionalDependencies,
+ get_target_functional_dependencies,
};
use hashbrown::hash_map::DefaultHashBuilder;
pub use join_type::{JoinConstraint, JoinSide, JoinType};
@@ -137,10 +137,10 @@ macro_rules! downcast_value {
// Not public API.
#[doc(hidden)]
pub mod __private {
- use crate::error::_internal_datafusion_err;
use crate::Result;
+ use crate::error::_internal_datafusion_err;
use arrow::array::Array;
- use std::any::{type_name, Any};
+ use std::any::{Any, type_name};
#[doc(hidden)]
pub trait DowncastArrayHelper {
@@ -191,7 +191,7 @@ mod tests {
assert_starts_with(
error.to_string(),
- "Internal error: could not cast array of type Int32 to
arrow_array::array::primitive_array::PrimitiveArray<arrow_array::types::UInt64Type>"
+ "Internal error: could not cast array of type Int32 to
arrow_array::array::primitive_array::PrimitiveArray<arrow_array::types::UInt64Type>",
);
}
diff --git a/datafusion/common/src/metadata.rs
b/datafusion/common/src/metadata.rs
index 3a10cc2b42..df5e70ff5b 100644
--- a/datafusion/common/src/metadata.rs
+++ b/datafusion/common/src/metadata.rs
@@ -20,7 +20,7 @@ use std::{collections::BTreeMap, sync::Arc};
use arrow::datatypes::{DataType, Field};
use hashbrown::HashMap;
-use crate::{error::_plan_err, DataFusionError, ScalarValue};
+use crate::{DataFusionError, ScalarValue, error::_plan_err};
/// A [`ScalarValue`] with optional [`FieldMetadata`]
#[derive(Debug, Clone)]
diff --git a/datafusion/common/src/nested_struct.rs
b/datafusion/common/src/nested_struct.rs
index d43816f75b..086d96e852 100644
--- a/datafusion/common/src/nested_struct.rs
+++ b/datafusion/common/src/nested_struct.rs
@@ -15,10 +15,10 @@
// specific language governing permissions and limitations
// under the License.
-use crate::error::{Result, _plan_err};
+use crate::error::{_plan_err, Result};
use arrow::{
- array::{new_null_array, Array, ArrayRef, StructArray},
- compute::{cast_with_options, CastOptions},
+ array::{Array, ArrayRef, StructArray, new_null_array},
+ compute::{CastOptions, cast_with_options},
datatypes::{DataType::Struct, Field, FieldRef},
};
use std::sync::Arc;
diff --git a/datafusion/common/src/param_value.rs
b/datafusion/common/src/param_value.rs
index ebf68e4dd2..0fac6b529e 100644
--- a/datafusion/common/src/param_value.rs
+++ b/datafusion/common/src/param_value.rs
@@ -16,7 +16,7 @@
// under the License.
use crate::error::{_plan_datafusion_err, _plan_err};
-use crate::metadata::{check_metadata_with_storage_equal, ScalarAndMetadata};
+use crate::metadata::{ScalarAndMetadata, check_metadata_with_storage_equal};
use crate::{Result, ScalarValue};
use arrow::datatypes::{DataType, Field, FieldRef};
use std::collections::HashMap;
diff --git a/datafusion/common/src/pruning.rs b/datafusion/common/src/pruning.rs
index 48750e3c99..4307b4d786 100644
--- a/datafusion/common/src/pruning.rs
+++ b/datafusion/common/src/pruning.rs
@@ -485,8 +485,8 @@ impl PruningStatistics for CompositePruningStatistics {
#[cfg(test)]
mod tests {
use crate::{
- cast::{as_int32_array, as_uint64_array},
ColumnStatistics,
+ cast::{as_int32_array, as_uint64_array},
};
use super::*;
diff --git a/datafusion/common/src/rounding.rs
b/datafusion/common/src/rounding.rs
index 95eefd3235..1796143d7c 100644
--- a/datafusion/common/src/rounding.rs
+++ b/datafusion/common/src/rounding.rs
@@ -47,7 +47,7 @@ extern crate libc;
any(target_arch = "x86_64", target_arch = "aarch64"),
not(target_os = "windows")
))]
-extern "C" {
+unsafe extern "C" {
fn fesetround(round: i32);
fn fegetround() -> i32;
}
diff --git a/datafusion/common/src/scalar/cache.rs
b/datafusion/common/src/scalar/cache.rs
index f1476a5187..5b1ad4e4ed 100644
--- a/datafusion/common/src/scalar/cache.rs
+++ b/datafusion/common/src/scalar/cache.rs
@@ -20,10 +20,10 @@
use std::iter::repeat_n;
use std::sync::{Arc, LazyLock, Mutex};
-use arrow::array::{new_null_array, Array, ArrayRef, PrimitiveArray};
+use arrow::array::{Array, ArrayRef, PrimitiveArray, new_null_array};
use arrow::datatypes::{
- ArrowDictionaryKeyType, DataType, Int16Type, Int32Type, Int64Type,
Int8Type,
- UInt16Type, UInt32Type, UInt64Type, UInt8Type,
+ ArrowDictionaryKeyType, DataType, Int8Type, Int16Type, Int32Type,
Int64Type,
+ UInt8Type, UInt16Type, UInt32Type, UInt64Type,
};
/// Maximum number of rows to cache to be conservative on memory usage
diff --git a/datafusion/common/src/scalar/mod.rs
b/datafusion/common/src/scalar/mod.rs
index 3fd5a37224..94f2ba0ecf 100644
--- a/datafusion/common/src/scalar/mod.rs
+++ b/datafusion/common/src/scalar/mod.rs
@@ -36,57 +36,57 @@ use std::sync::Arc;
use crate::assert_or_internal_err;
use crate::cast::{
as_binary_array, as_binary_view_array, as_boolean_array, as_date32_array,
- as_date64_array, as_decimal128_array, as_decimal256_array,
as_decimal32_array,
- as_decimal64_array, as_dictionary_array, as_duration_microsecond_array,
+ as_date64_array, as_decimal32_array, as_decimal64_array,
as_decimal128_array,
+ as_decimal256_array, as_dictionary_array, as_duration_microsecond_array,
as_duration_millisecond_array, as_duration_nanosecond_array,
as_duration_second_array, as_fixed_size_binary_array,
as_fixed_size_list_array,
- as_float16_array, as_float32_array, as_float64_array, as_int16_array,
as_int32_array,
- as_int64_array, as_int8_array, as_interval_dt_array, as_interval_mdn_array,
+ as_float16_array, as_float32_array, as_float64_array, as_int8_array,
as_int16_array,
+ as_int32_array, as_int64_array, as_interval_dt_array,
as_interval_mdn_array,
as_interval_ym_array, as_large_binary_array, as_large_list_array,
as_large_string_array, as_string_array, as_string_view_array,
as_time32_millisecond_array, as_time32_second_array,
as_time64_microsecond_array,
as_time64_nanosecond_array, as_timestamp_microsecond_array,
as_timestamp_millisecond_array, as_timestamp_nanosecond_array,
- as_timestamp_second_array, as_uint16_array, as_uint32_array,
as_uint64_array,
- as_uint8_array, as_union_array,
+ as_timestamp_second_array, as_uint8_array, as_uint16_array,
as_uint32_array,
+ as_uint64_array, as_union_array,
};
-use crate::error::{DataFusionError, Result, _exec_err, _internal_err,
_not_impl_err};
+use crate::error::{_exec_err, _internal_err, _not_impl_err, DataFusionError,
Result};
use crate::format::DEFAULT_CAST_OPTIONS;
use crate::hash_utils::create_hashes;
use crate::utils::SingleRowListArrayBuilder;
use crate::{_internal_datafusion_err, arrow_datafusion_err};
use arrow::array::{
- new_empty_array, new_null_array, Array, ArrayData, ArrayRef,
ArrowNativeTypeOp,
- ArrowPrimitiveType, AsArray, BinaryArray, BinaryViewArray, BooleanArray,
Date32Array,
- Date64Array, Decimal128Array, Decimal256Array, Decimal32Array,
Decimal64Array,
- DictionaryArray, DurationMicrosecondArray, DurationMillisecondArray,
- DurationNanosecondArray, DurationSecondArray, FixedSizeBinaryArray,
- FixedSizeListArray, Float16Array, Float32Array, Float64Array,
GenericListArray,
- Int16Array, Int32Array, Int64Array, Int8Array, IntervalDayTimeArray,
- IntervalMonthDayNanoArray, IntervalYearMonthArray, LargeBinaryArray,
LargeListArray,
- LargeStringArray, ListArray, MapArray, MutableArrayData, OffsetSizeTrait,
- PrimitiveArray, Scalar, StringArray, StringViewArray, StructArray,
- Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray,
- Time64NanosecondArray, TimestampMicrosecondArray,
TimestampMillisecondArray,
- TimestampNanosecondArray, TimestampSecondArray, UInt16Array, UInt32Array,
- UInt64Array, UInt8Array, UnionArray,
+ Array, ArrayData, ArrayRef, ArrowNativeTypeOp, ArrowPrimitiveType, AsArray,
+ BinaryArray, BinaryViewArray, BooleanArray, Date32Array, Date64Array,
Decimal32Array,
+ Decimal64Array, Decimal128Array, Decimal256Array, DictionaryArray,
+ DurationMicrosecondArray, DurationMillisecondArray,
DurationNanosecondArray,
+ DurationSecondArray, FixedSizeBinaryArray, FixedSizeListArray,
Float16Array,
+ Float32Array, Float64Array, GenericListArray, Int8Array, Int16Array,
Int32Array,
+ Int64Array, IntervalDayTimeArray, IntervalMonthDayNanoArray,
IntervalYearMonthArray,
+ LargeBinaryArray, LargeListArray, LargeStringArray, ListArray, MapArray,
+ MutableArrayData, OffsetSizeTrait, PrimitiveArray, Scalar, StringArray,
+ StringViewArray, StructArray, Time32MillisecondArray, Time32SecondArray,
+ Time64MicrosecondArray, Time64NanosecondArray, TimestampMicrosecondArray,
+ TimestampMillisecondArray, TimestampNanosecondArray, TimestampSecondArray,
+ UInt8Array, UInt16Array, UInt32Array, UInt64Array, UnionArray,
new_empty_array,
+ new_null_array,
};
use arrow::buffer::{BooleanBuffer, ScalarBuffer};
-use arrow::compute::kernels::cast::{cast_with_options, CastOptions};
+use arrow::compute::kernels::cast::{CastOptions, cast_with_options};
use arrow::compute::kernels::numeric::{
add, add_wrapping, div, mul, mul_wrapping, rem, sub, sub_wrapping,
};
use arrow::datatypes::{
- i256, validate_decimal_precision_and_scale, ArrowDictionaryKeyType,
ArrowNativeType,
- ArrowTimestampType, DataType, Date32Type, Decimal128Type, Decimal256Type,
- Decimal32Type, Decimal64Type, DecimalType, Field, Float32Type, Int16Type,
Int32Type,
- Int64Type, Int8Type, IntervalDayTime, IntervalDayTimeType,
IntervalMonthDayNano,
+ ArrowDictionaryKeyType, ArrowNativeType, ArrowTimestampType,
+ DECIMAL128_MAX_PRECISION, DataType, Date32Type, Decimal32Type,
Decimal64Type,
+ Decimal128Type, Decimal256Type, DecimalType, Field, Float32Type, Int8Type,
Int16Type,
+ Int32Type, Int64Type, IntervalDayTime, IntervalDayTimeType,
IntervalMonthDayNano,
IntervalMonthDayNanoType, IntervalUnit, IntervalYearMonthType, TimeUnit,
TimestampMicrosecondType, TimestampMillisecondType,
TimestampNanosecondType,
- TimestampSecondType, UInt16Type, UInt32Type, UInt64Type, UInt8Type,
UnionFields,
- UnionMode, DECIMAL128_MAX_PRECISION,
+ TimestampSecondType, UInt8Type, UInt16Type, UInt32Type, UInt64Type,
UnionFields,
+ UnionMode, i256, validate_decimal_precision_and_scale,
};
-use arrow::util::display::{array_value_to_string, ArrayFormatter,
FormatOptions};
+use arrow::util::display::{ArrayFormatter, FormatOptions,
array_value_to_string};
use cache::{get_or_create_cached_key_array, get_or_create_cached_null_array};
use chrono::{Duration, NaiveDate};
use half::f16;
@@ -720,11 +720,7 @@ impl PartialOrd for ScalarValue {
(Union(_, _, _), _) => None,
(Dictionary(k1, v1), Dictionary(k2, v2)) => {
// Don't compare if the key types don't match (it is
effectively a different datatype)
- if k1 == k2 {
- v1.partial_cmp(v2)
- } else {
- None
- }
+ if k1 == k2 { v1.partial_cmp(v2) } else { None }
}
(Dictionary(_, _), _) => None,
(Null, Null) => Some(Ordering::Equal),
@@ -744,7 +740,9 @@ fn first_array_for_list(arr: &dyn Array) -> ArrayRef {
} else if let Some(arr) = arr.as_fixed_size_list_opt() {
arr.value(0)
} else {
- unreachable!("Since only List / LargeList / FixedSizeList are
supported, this should never happen")
+ unreachable!(
+ "Since only List / LargeList / FixedSizeList are supported, this
should never happen"
+ )
}
}
@@ -2359,18 +2357,20 @@ impl ScalarValue {
macro_rules! build_array_primitive {
($ARRAY_TY:ident, $SCALAR_TY:ident) => {{
{
- let array = scalars.map(|sv| {
- if let ScalarValue::$SCALAR_TY(v) = sv {
- Ok(v)
- } else {
- _exec_err!(
- "Inconsistent types in
ScalarValue::iter_to_array. \
+ let array = scalars
+ .map(|sv| {
+ if let ScalarValue::$SCALAR_TY(v) = sv {
+ Ok(v)
+ } else {
+ _exec_err!(
+ "Inconsistent types in
ScalarValue::iter_to_array. \
Expected {:?}, got {:?}",
- data_type, sv
- )
- }
- })
- .collect::<Result<$ARRAY_TY>>()?;
+ data_type,
+ sv
+ )
+ }
+ })
+ .collect::<Result<$ARRAY_TY>>()?;
Arc::new(array)
}
}};
@@ -2379,18 +2379,20 @@ impl ScalarValue {
macro_rules! build_array_primitive_tz {
($ARRAY_TY:ident, $SCALAR_TY:ident, $TZ:expr) => {{
{
- let array = scalars.map(|sv| {
- if let ScalarValue::$SCALAR_TY(v, _) = sv {
- Ok(v)
- } else {
- _exec_err!(
- "Inconsistent types in
ScalarValue::iter_to_array. \
+ let array = scalars
+ .map(|sv| {
+ if let ScalarValue::$SCALAR_TY(v, _) = sv {
+ Ok(v)
+ } else {
+ _exec_err!(
+ "Inconsistent types in
ScalarValue::iter_to_array. \
Expected {:?}, got {:?}",
- data_type, sv
- )
- }
- })
- .collect::<Result<$ARRAY_TY>>()?;
+ data_type,
+ sv
+ )
+ }
+ })
+ .collect::<Result<$ARRAY_TY>>()?;
Arc::new(array.with_timezone_opt($TZ.clone()))
}
}};
@@ -2401,18 +2403,20 @@ impl ScalarValue {
macro_rules! build_array_string {
($ARRAY_TY:ident, $SCALAR_TY:ident) => {{
{
- let array = scalars.map(|sv| {
- if let ScalarValue::$SCALAR_TY(v) = sv {
- Ok(v)
- } else {
- _exec_err!(
- "Inconsistent types in
ScalarValue::iter_to_array. \
+ let array = scalars
+ .map(|sv| {
+ if let ScalarValue::$SCALAR_TY(v) = sv {
+ Ok(v)
+ } else {
+ _exec_err!(
+ "Inconsistent types in
ScalarValue::iter_to_array. \
Expected {:?}, got {:?}",
- data_type, sv
- )
- }
- })
- .collect::<Result<$ARRAY_TY>>()?;
+ data_type,
+ sv
+ )
+ }
+ })
+ .collect::<Result<$ARRAY_TY>>()?;
Arc::new(array)
}
}};
@@ -3718,10 +3722,9 @@ impl ScalarValue {
) -> Result<Self> {
let source_type = self.data_type();
if let Some(multiplier) = date_to_timestamp_multiplier(&source_type,
target_type)
+ && let Some(value) = self.date_scalar_value_as_i64()
{
- if let Some(value) = self.date_scalar_value_as_i64() {
- ensure_timestamp_in_bounds(value, multiplier, &source_type,
target_type)?;
- }
+ ensure_timestamp_in_bounds(value, multiplier, &source_type,
target_type)?;
}
let scalar_array = self.to_array()?;
@@ -5104,7 +5107,7 @@ mod tests {
use arrow::buffer::{Buffer, NullBuffer, OffsetBuffer};
use arrow::compute::{is_null, kernels};
use arrow::datatypes::{
- ArrowNumericType, Fields, Float64Type, TimeUnit,
DECIMAL256_MAX_PRECISION,
+ ArrowNumericType, DECIMAL256_MAX_PRECISION, Fields, Float64Type,
TimeUnit,
};
use arrow::error::ArrowError;
use arrow::util::pretty::pretty_format_columns;
@@ -5669,7 +5672,10 @@ mod tests {
.sub_checked(&int_value_2)
.unwrap_err()
.strip_backtrace();
- assert_eq!(err, "Arrow error: Arithmetic overflow: Overflow happened
on: 9223372036854775807 - -9223372036854775808")
+ assert_eq!(
+ err,
+ "Arrow error: Arithmetic overflow: Overflow happened on:
9223372036854775807 - -9223372036854775808"
+ )
}
#[test]
@@ -5817,12 +5823,16 @@ mod tests {
assert_eq!(123i128, array_decimal.value(0));
assert_eq!(123i128, array_decimal.value(9));
// test eq array
- assert!(decimal_value
- .eq_array(&array, 1)
- .expect("Failed to compare arrays"));
- assert!(decimal_value
- .eq_array(&array, 5)
- .expect("Failed to compare arrays"));
+ assert!(
+ decimal_value
+ .eq_array(&array, 1)
+ .expect("Failed to compare arrays")
+ );
+ assert!(
+ decimal_value
+ .eq_array(&array, 5)
+ .expect("Failed to compare arrays")
+ );
// test try from array
assert_eq!(
decimal_value,
@@ -5867,18 +5877,24 @@ mod tests {
assert_eq!(4, array.len());
assert_eq!(DataType::Decimal128(10, 2), array.data_type().clone());
- assert!(ScalarValue::try_new_decimal128(1, 10, 2)
- .unwrap()
- .eq_array(&array, 0)
- .expect("Failed to compare arrays"));
- assert!(ScalarValue::try_new_decimal128(2, 10, 2)
- .unwrap()
- .eq_array(&array, 1)
- .expect("Failed to compare arrays"));
- assert!(ScalarValue::try_new_decimal128(3, 10, 2)
- .unwrap()
- .eq_array(&array, 2)
- .expect("Failed to compare arrays"));
+ assert!(
+ ScalarValue::try_new_decimal128(1, 10, 2)
+ .unwrap()
+ .eq_array(&array, 0)
+ .expect("Failed to compare arrays")
+ );
+ assert!(
+ ScalarValue::try_new_decimal128(2, 10, 2)
+ .unwrap()
+ .eq_array(&array, 1)
+ .expect("Failed to compare arrays")
+ );
+ assert!(
+ ScalarValue::try_new_decimal128(3, 10, 2)
+ .unwrap()
+ .eq_array(&array, 2)
+ .expect("Failed to compare arrays")
+ );
assert_eq!(
ScalarValue::Decimal128(None, 10, 2),
ScalarValue::try_from_array(&array, 3).unwrap()
@@ -6823,7 +6839,9 @@ mod tests {
for other_index in 0..array.len() {
if index != other_index {
assert!(
- !scalar.eq_array(&array,
other_index).expect("Failed to compare arrays"),
+ !scalar
+ .eq_array(&array, other_index)
+ .expect("Failed to compare arrays"),
"Expected {scalar:?} to be NOT equal to {array:?}
at index {other_index}"
);
}
diff --git a/datafusion/common/src/stats.rs b/datafusion/common/src/stats.rs
index da298c20eb..b42e98d130 100644
--- a/datafusion/common/src/stats.rs
+++ b/datafusion/common/src/stats.rs
@@ -961,9 +961,11 @@ mod tests {
Precision::Exact(ScalarValue::Int64(None)),
);
// Overflow returns error
- assert!(Precision::Exact(ScalarValue::Int32(Some(256)))
- .cast_to(&DataType::Int8)
- .is_err());
+ assert!(
+ Precision::Exact(ScalarValue::Int32(Some(256)))
+ .cast_to(&DataType::Int8)
+ .is_err()
+ );
}
#[test]
@@ -1215,7 +1217,10 @@ mod tests {
let items = vec![stats1, stats2];
let e = Statistics::try_merge_iter(&items, &schema).unwrap_err();
- assert_contains!(e.to_string(), "Error during planning: Cannot merge
statistics with different number of columns: 0 vs 1");
+ assert_contains!(
+ e.to_string(),
+ "Error during planning: Cannot merge statistics with different
number of columns: 0 vs 1"
+ );
}
#[test]
diff --git a/datafusion/common/src/test_util.rs
b/datafusion/common/src/test_util.rs
index c51dea1c4d..f060704944 100644
--- a/datafusion/common/src/test_util.rs
+++ b/datafusion/common/src/test_util.rs
@@ -735,32 +735,34 @@ mod tests {
let non_existing = cwd.join("non-existing-dir").display().to_string();
let non_existing_str = non_existing.as_str();
- env::set_var(udf_env, non_existing_str);
- let res = get_data_dir(udf_env, existing_str);
- assert!(res.is_err());
-
- env::set_var(udf_env, "");
- let res = get_data_dir(udf_env, existing_str);
- assert!(res.is_ok());
- assert_eq!(res.unwrap(), existing_pb);
-
- env::set_var(udf_env, " ");
- let res = get_data_dir(udf_env, existing_str);
- assert!(res.is_ok());
- assert_eq!(res.unwrap(), existing_pb);
-
- env::set_var(udf_env, existing_str);
- let res = get_data_dir(udf_env, existing_str);
- assert!(res.is_ok());
- assert_eq!(res.unwrap(), existing_pb);
-
- env::remove_var(udf_env);
- let res = get_data_dir(udf_env, non_existing_str);
- assert!(res.is_err());
-
- let res = get_data_dir(udf_env, existing_str);
- assert!(res.is_ok());
- assert_eq!(res.unwrap(), existing_pb);
+ unsafe {
+ env::set_var(udf_env, non_existing_str);
+ let res = get_data_dir(udf_env, existing_str);
+ assert!(res.is_err());
+
+ env::set_var(udf_env, "");
+ let res = get_data_dir(udf_env, existing_str);
+ assert!(res.is_ok());
+ assert_eq!(res.unwrap(), existing_pb);
+
+ env::set_var(udf_env, " ");
+ let res = get_data_dir(udf_env, existing_str);
+ assert!(res.is_ok());
+ assert_eq!(res.unwrap(), existing_pb);
+
+ env::set_var(udf_env, existing_str);
+ let res = get_data_dir(udf_env, existing_str);
+ assert!(res.is_ok());
+ assert_eq!(res.unwrap(), existing_pb);
+
+ env::remove_var(udf_env);
+ let res = get_data_dir(udf_env, non_existing_str);
+ assert!(res.is_err());
+
+ let res = get_data_dir(udf_env, existing_str);
+ assert!(res.is_ok());
+ assert_eq!(res.unwrap(), existing_pb);
+ }
}
#[test]
diff --git a/datafusion/common/src/tree_node.rs
b/datafusion/common/src/tree_node.rs
index 9b36266eec..1e7c02e424 100644
--- a/datafusion/common/src/tree_node.rs
+++ b/datafusion/common/src/tree_node.rs
@@ -956,12 +956,12 @@ impl<'a, T: 'a, C0: TreeNodeContainer<'a, T>, C1:
TreeNodeContainer<'a, T>>
}
impl<
- 'a,
- T: 'a,
- C0: TreeNodeContainer<'a, T>,
- C1: TreeNodeContainer<'a, T>,
- C2: TreeNodeContainer<'a, T>,
- > TreeNodeContainer<'a, T> for (C0, C1, C2)
+ 'a,
+ T: 'a,
+ C0: TreeNodeContainer<'a, T>,
+ C1: TreeNodeContainer<'a, T>,
+ C2: TreeNodeContainer<'a, T>,
+> TreeNodeContainer<'a, T> for (C0, C1, C2)
{
fn apply_elements<F: FnMut(&'a T) -> Result<TreeNodeRecursion>>(
&'a self,
@@ -992,13 +992,13 @@ impl<
}
impl<
- 'a,
- T: 'a,
- C0: TreeNodeContainer<'a, T>,
- C1: TreeNodeContainer<'a, T>,
- C2: TreeNodeContainer<'a, T>,
- C3: TreeNodeContainer<'a, T>,
- > TreeNodeContainer<'a, T> for (C0, C1, C2, C3)
+ 'a,
+ T: 'a,
+ C0: TreeNodeContainer<'a, T>,
+ C1: TreeNodeContainer<'a, T>,
+ C2: TreeNodeContainer<'a, T>,
+ C3: TreeNodeContainer<'a, T>,
+> TreeNodeContainer<'a, T> for (C0, C1, C2, C3)
{
fn apply_elements<F: FnMut(&'a T) -> Result<TreeNodeRecursion>>(
&'a self,
@@ -1090,12 +1090,12 @@ impl<'a, T: 'a, C0: TreeNodeContainer<'a, T>, C1:
TreeNodeContainer<'a, T>>
}
impl<
- 'a,
- T: 'a,
- C0: TreeNodeContainer<'a, T>,
- C1: TreeNodeContainer<'a, T>,
- C2: TreeNodeContainer<'a, T>,
- > TreeNodeRefContainer<'a, T> for (&'a C0, &'a C1, &'a C2)
+ 'a,
+ T: 'a,
+ C0: TreeNodeContainer<'a, T>,
+ C1: TreeNodeContainer<'a, T>,
+ C2: TreeNodeContainer<'a, T>,
+> TreeNodeRefContainer<'a, T> for (&'a C0, &'a C1, &'a C2)
{
fn apply_ref_elements<F: FnMut(&'a T) -> Result<TreeNodeRecursion>>(
&self,
@@ -1109,13 +1109,13 @@ impl<
}
impl<
- 'a,
- T: 'a,
- C0: TreeNodeContainer<'a, T>,
- C1: TreeNodeContainer<'a, T>,
- C2: TreeNodeContainer<'a, T>,
- C3: TreeNodeContainer<'a, T>,
- > TreeNodeRefContainer<'a, T> for (&'a C0, &'a C1, &'a C2, &'a C3)
+ 'a,
+ T: 'a,
+ C0: TreeNodeContainer<'a, T>,
+ C1: TreeNodeContainer<'a, T>,
+ C2: TreeNodeContainer<'a, T>,
+ C3: TreeNodeContainer<'a, T>,
+> TreeNodeRefContainer<'a, T> for (&'a C0, &'a C1, &'a C2, &'a C3)
{
fn apply_ref_elements<F: FnMut(&'a T) -> Result<TreeNodeRecursion>>(
&self,
@@ -1336,11 +1336,11 @@ pub(crate) mod tests {
use std::collections::HashMap;
use std::fmt::Display;
+ use crate::Result;
use crate::tree_node::{
Transformed, TreeNode, TreeNodeContainer, TreeNodeRecursion,
TreeNodeRewriter,
TreeNodeVisitor,
};
- use crate::Result;
#[derive(Debug, Eq, Hash, PartialEq, Clone)]
pub struct TestTreeNode<T> {
diff --git a/datafusion/common/src/types/native.rs
b/datafusion/common/src/types/native.rs
index 5e6fca040c..766c504416 100644
--- a/datafusion/common/src/types/native.rs
+++ b/datafusion/common/src/types/native.rs
@@ -19,11 +19,11 @@ use super::{
LogicalField, LogicalFieldRef, LogicalFields, LogicalType,
LogicalUnionFields,
TypeSignature,
};
-use crate::error::{Result, _internal_err};
+use crate::error::{_internal_err, Result};
use arrow::compute::can_cast_types;
use arrow::datatypes::{
- DataType, Field, FieldRef, Fields, IntervalUnit, TimeUnit, UnionFields,
- DECIMAL128_MAX_PRECISION, DECIMAL32_MAX_PRECISION, DECIMAL64_MAX_PRECISION,
+ DECIMAL32_MAX_PRECISION, DECIMAL64_MAX_PRECISION,
DECIMAL128_MAX_PRECISION, DataType,
+ Field, FieldRef, Fields, IntervalUnit, TimeUnit, UnionFields,
};
use std::{fmt::Display, sync::Arc};
@@ -364,7 +364,7 @@ impl LogicalType for NativeType {
"Unavailable default cast for native type {} from physical
type {}",
self,
origin
- )
+ );
}
})
}
diff --git a/datafusion/common/src/utils/memory.rs
b/datafusion/common/src/utils/memory.rs
index a56b940fab..028273ee98 100644
--- a/datafusion/common/src/utils/memory.rs
+++ b/datafusion/common/src/utils/memory.rs
@@ -17,8 +17,8 @@
//! This module provides a function to estimate the memory size of a HashTable
prior to allocation
-use crate::error::_exec_datafusion_err;
use crate::Result;
+use crate::error::_exec_datafusion_err;
use std::mem::size_of;
/// Estimates the memory size required for a hash table prior to allocation.
diff --git a/datafusion/common/src/utils/mod.rs
b/datafusion/common/src/utils/mod.rs
index 6e7396a7c5..93ab49530f 100644
--- a/datafusion/common/src/utils/mod.rs
+++ b/datafusion/common/src/utils/mod.rs
@@ -26,16 +26,16 @@ use crate::assert_or_internal_err;
use crate::error::{_exec_datafusion_err, _internal_datafusion_err};
use crate::{DataFusionError, Result, ScalarValue};
use arrow::array::{
- cast::AsArray, Array, ArrayRef, FixedSizeListArray, LargeListArray,
ListArray,
- OffsetSizeTrait,
+ Array, ArrayRef, FixedSizeListArray, LargeListArray, ListArray,
OffsetSizeTrait,
+ cast::AsArray,
};
use arrow::buffer::OffsetBuffer;
-use arrow::compute::{partition, SortColumn, SortOptions};
+use arrow::compute::{SortColumn, SortOptions, partition};
use arrow::datatypes::{DataType, Field, SchemaRef};
#[cfg(feature = "sql")]
use sqlparser::{ast::Ident, dialect::GenericDialect, parser::Parser};
use std::borrow::{Borrow, Cow};
-use std::cmp::{min, Ordering};
+use std::cmp::{Ordering, min};
use std::collections::HashSet;
use std::num::NonZero;
use std::ops::Range;
@@ -266,10 +266,10 @@ fn needs_quotes(s: &str) -> bool {
let mut chars = s.chars();
// first char can not be a number unless escaped
- if let Some(first_char) = chars.next() {
- if !(first_char.is_ascii_lowercase() || first_char == '_') {
- return true;
- }
+ if let Some(first_char) = chars.next()
+ && !(first_char.is_ascii_lowercase() || first_char == '_')
+ {
+ return true;
}
!chars.all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_')
@@ -943,8 +943,6 @@ mod tests {
use super::*;
use crate::ScalarValue::Null;
use arrow::array::Float64Array;
- use sqlparser::ast::Ident;
- use sqlparser::tokenizer::Span;
#[test]
fn test_bisect_linear_left_and_right() -> Result<()> {
@@ -1173,7 +1171,7 @@ mod tests {
let expected_parsed = vec![Ident {
value: identifier.to_string(),
quote_style,
- span: Span::empty(),
+ span: sqlparser::tokenizer::Span::empty(),
}];
assert_eq!(
diff --git a/datafusion/doc/Cargo.toml b/datafusion/doc/Cargo.toml
index c1368c1531..94edf70bc7 100644
--- a/datafusion/doc/Cargo.toml
+++ b/datafusion/doc/Cargo.toml
@@ -21,7 +21,7 @@ description = "Documentation module for DataFusion query
engine"
keywords = ["datafusion", "query", "sql"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/doc/src/udf.rs b/datafusion/doc/src/udf.rs
index 3d18c9ac27..d1f51d9194 100644
--- a/datafusion/doc/src/udf.rs
+++ b/datafusion/doc/src/udf.rs
@@ -127,6 +127,8 @@ The following regular expression functions are supported:"#,
pub const DOC_SECTION_UNION: DocSection = DocSection {
include: true,
label: "Union Functions",
- description: Some("Functions to work with the union data type, also
know as tagged unions, variant types, enums or sum types. Note: Not related to
the SQL UNION operator"),
+ description: Some(
+ "Functions to work with the union data type, also know as tagged
unions, variant types, enums or sum types. Note: Not related to the SQL UNION
operator",
+ ),
};
}
diff --git a/datafusion/expr-common/Cargo.toml
b/datafusion/expr-common/Cargo.toml
index 5ee46b454e..7b13334a6a 100644
--- a/datafusion/expr-common/Cargo.toml
+++ b/datafusion/expr-common/Cargo.toml
@@ -21,7 +21,7 @@ description = "Logical plan and expression representation for
DataFusion query e
keywords = ["datafusion", "logical", "plan", "expressions"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/expr-common/src/accumulator.rs
b/datafusion/expr-common/src/accumulator.rs
index 2829a9416f..fc4e90114b 100644
--- a/datafusion/expr-common/src/accumulator.rs
+++ b/datafusion/expr-common/src/accumulator.rs
@@ -18,7 +18,7 @@
//! Accumulator module contains the trait definition for aggregation
function's accumulators.
use arrow::array::ArrayRef;
-use datafusion_common::{internal_err, Result, ScalarValue};
+use datafusion_common::{Result, ScalarValue, internal_err};
use std::fmt::Debug;
/// Tracks an aggregate function's state.
diff --git a/datafusion/expr-common/src/casts.rs
b/datafusion/expr-common/src/casts.rs
index 8939ff1371..dc0bd74b1f 100644
--- a/datafusion/expr-common/src/casts.rs
+++ b/datafusion/expr-common/src/casts.rs
@@ -24,10 +24,9 @@
use std::cmp::Ordering;
use arrow::datatypes::{
- DataType, TimeUnit, MAX_DECIMAL128_FOR_EACH_PRECISION,
- MAX_DECIMAL32_FOR_EACH_PRECISION, MAX_DECIMAL64_FOR_EACH_PRECISION,
- MIN_DECIMAL128_FOR_EACH_PRECISION, MIN_DECIMAL32_FOR_EACH_PRECISION,
- MIN_DECIMAL64_FOR_EACH_PRECISION,
+ DataType, MAX_DECIMAL32_FOR_EACH_PRECISION,
MAX_DECIMAL64_FOR_EACH_PRECISION,
+ MAX_DECIMAL128_FOR_EACH_PRECISION, MIN_DECIMAL32_FOR_EACH_PRECISION,
+ MIN_DECIMAL64_FOR_EACH_PRECISION, MIN_DECIMAL128_FOR_EACH_PRECISION,
TimeUnit,
};
use arrow::temporal_conversions::{MICROSECONDS, MILLISECONDS, NANOSECONDS};
use datafusion_common::ScalarValue;
@@ -382,7 +381,7 @@ fn try_cast_binary(
#[cfg(test)]
mod tests {
use super::*;
- use arrow::compute::{cast_with_options, CastOptions};
+ use arrow::compute::{CastOptions, cast_with_options};
use arrow::datatypes::{Field, Fields, TimeUnit};
use std::sync::Arc;
diff --git a/datafusion/expr-common/src/columnar_value.rs
b/datafusion/expr-common/src/columnar_value.rs
index 585b47a980..99c21d4abd 100644
--- a/datafusion/expr-common/src/columnar_value.rs
+++ b/datafusion/expr-common/src/columnar_value.rs
@@ -19,16 +19,16 @@
use arrow::{
array::{Array, ArrayRef, Date32Array, Date64Array, NullArray},
- compute::{kernels, max, min, CastOptions},
+ compute::{CastOptions, kernels, max, min},
datatypes::DataType,
util::pretty::pretty_format_columns,
};
use datafusion_common::internal_datafusion_err;
use datafusion_common::{
+ Result, ScalarValue,
format::DEFAULT_CAST_OPTIONS,
internal_err,
scalar::{date_to_timestamp_multiplier, ensure_timestamp_in_bounds},
- Result, ScalarValue,
};
use std::fmt;
use std::sync::Arc;
diff --git a/datafusion/expr-common/src/groups_accumulator.rs
b/datafusion/expr-common/src/groups_accumulator.rs
index 9bcc1edff8..860e69245a 100644
--- a/datafusion/expr-common/src/groups_accumulator.rs
+++ b/datafusion/expr-common/src/groups_accumulator.rs
@@ -18,7 +18,7 @@
//! Vectorized [`GroupsAccumulator`]
use arrow::array::{ArrayRef, BooleanArray};
-use datafusion_common::{not_impl_err, Result};
+use datafusion_common::{Result, not_impl_err};
/// Describes how many rows should be emitted during grouping.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
diff --git a/datafusion/expr-common/src/interval_arithmetic.rs
b/datafusion/expr-common/src/interval_arithmetic.rs
index b9f8102f34..a43fe8c415 100644
--- a/datafusion/expr-common/src/interval_arithmetic.rs
+++ b/datafusion/expr-common/src/interval_arithmetic.rs
@@ -22,18 +22,18 @@ use std::fmt::{self, Display, Formatter};
use std::ops::{AddAssign, SubAssign};
use crate::operator::Operator;
-use crate::type_coercion::binary::{comparison_coercion_numeric,
BinaryTypeCoercer};
+use crate::type_coercion::binary::{BinaryTypeCoercer,
comparison_coercion_numeric};
-use arrow::compute::{cast_with_options, CastOptions};
+use arrow::compute::{CastOptions, cast_with_options};
use arrow::datatypes::{
- DataType, IntervalDayTime, IntervalMonthDayNano, IntervalUnit, TimeUnit,
+ DataType, IntervalDayTime, IntervalMonthDayNano, IntervalUnit,
MAX_DECIMAL128_FOR_EACH_PRECISION, MAX_DECIMAL256_FOR_EACH_PRECISION,
- MIN_DECIMAL128_FOR_EACH_PRECISION, MIN_DECIMAL256_FOR_EACH_PRECISION,
+ MIN_DECIMAL128_FOR_EACH_PRECISION, MIN_DECIMAL256_FOR_EACH_PRECISION,
TimeUnit,
};
use datafusion_common::rounding::{alter_fp_rounding_mode, next_down, next_up};
use datafusion_common::{
- assert_eq_or_internal_err, assert_or_internal_err, internal_err,
DataFusionError,
- Result, ScalarValue,
+ DataFusionError, Result, ScalarValue, assert_eq_or_internal_err,
+ assert_or_internal_err, internal_err,
};
macro_rules! get_extreme_value {
@@ -2202,7 +2202,7 @@ impl NullableInterval {
mod tests {
use crate::{
interval_arithmetic::{
- handle_overflow, next_value, prev_value, satisfy_greater, Interval,
+ Interval, handle_overflow, next_value, prev_value, satisfy_greater,
},
operator::Operator,
};
@@ -2248,10 +2248,12 @@ mod tests {
ScalarValue::Float64(Some(1e-6)),
];
values.into_iter().zip(eps).for_each(|(value, eps)| {
- assert!(next_value(value.clone())
- .sub(value.clone())
- .unwrap()
- .lt(&eps));
+ assert!(
+ next_value(value.clone())
+ .sub(value.clone())
+ .unwrap()
+ .lt(&eps)
+ );
assert!(value.sub(prev_value(value.clone())).unwrap().lt(&eps));
assert_ne!(next_value(value.clone()), value);
assert_ne!(prev_value(value.clone()), value);
@@ -2841,18 +2843,26 @@ mod tests {
// not contain `null`.
#[test]
fn test_uncertain_boolean_interval() {
- assert!(Interval::TRUE_OR_FALSE
- .contains_value(ScalarValue::Boolean(Some(true)))
- .unwrap());
- assert!(Interval::TRUE_OR_FALSE
- .contains_value(ScalarValue::Boolean(Some(false)))
- .unwrap());
- assert!(!Interval::TRUE_OR_FALSE
- .contains_value(ScalarValue::Boolean(None))
- .unwrap());
- assert!(!Interval::TRUE_OR_FALSE
- .contains_value(ScalarValue::Null)
- .unwrap());
+ assert!(
+ Interval::TRUE_OR_FALSE
+ .contains_value(ScalarValue::Boolean(Some(true)))
+ .unwrap()
+ );
+ assert!(
+ Interval::TRUE_OR_FALSE
+ .contains_value(ScalarValue::Boolean(Some(false)))
+ .unwrap()
+ );
+ assert!(
+ !Interval::TRUE_OR_FALSE
+ .contains_value(ScalarValue::Boolean(None))
+ .unwrap()
+ );
+ assert!(
+ !Interval::TRUE_OR_FALSE
+ .contains_value(ScalarValue::Null)
+ .unwrap()
+ );
}
#[test]
diff --git a/datafusion/expr-common/src/signature.rs
b/datafusion/expr-common/src/signature.rs
index 6ee1c4a2a4..0c20bf0e86 100644
--- a/datafusion/expr-common/src/signature.rs
+++ b/datafusion/expr-common/src/signature.rs
@@ -24,7 +24,7 @@ use crate::type_coercion::aggregates::NUMERICS;
use arrow::datatypes::{DataType, Decimal128Type, DecimalType, IntervalUnit,
TimeUnit};
use datafusion_common::types::{LogicalType, LogicalTypeRef, NativeType};
use datafusion_common::utils::ListCoercion;
-use datafusion_common::{internal_err, plan_err, Result};
+use datafusion_common::{Result, internal_err, plan_err};
use indexmap::IndexSet;
use itertools::Itertools;
@@ -558,9 +558,11 @@ impl TypeSignature {
vec![Self::join_types(types, ", ")]
}
TypeSignature::Any(arg_count) => {
- vec![std::iter::repeat_n("Any", *arg_count)
- .collect::<Vec<&str>>()
- .join(", ")]
+ vec![
+ std::iter::repeat_n("Any", *arg_count)
+ .collect::<Vec<&str>>()
+ .join(", "),
+ ]
}
TypeSignature::UserDefined => {
vec!["UserDefined".to_string()]
@@ -607,87 +609,103 @@ impl TypeSignature {
match self {
TypeSignature::Exact(types) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .zip(types.iter())
- .map(|(name, typ)| format!("{name}: {typ}"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .zip(types.iter())
+ .map(|(name, typ)| format!("{name}: {typ}"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
vec![Self::join_types(types, ", ")]
}
}
TypeSignature::Any(count) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .take(*count)
- .map(|name| format!("{name}: Any"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(*count)
+ .map(|name| format!("{name}: Any"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
- vec![std::iter::repeat_n("Any", *count)
- .collect::<Vec<&str>>()
- .join(", ")]
+ vec![
+ std::iter::repeat_n("Any", *count)
+ .collect::<Vec<&str>>()
+ .join(", "),
+ ]
}
}
TypeSignature::Uniform(count, types) => {
if let Some(names) = parameter_names {
let type_str = Self::join_types(types, "/");
- vec![names
- .iter()
- .take(*count)
- .map(|name| format!("{name}: {type_str}"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(*count)
+ .map(|name| format!("{name}: {type_str}"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
self.to_string_repr()
}
}
TypeSignature::Coercible(coercions) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .zip(coercions.iter())
- .map(|(name, coercion)| format!("{name}: {coercion}"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .zip(coercions.iter())
+ .map(|(name, coercion)| format!("{name}:
{coercion}"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
vec![Self::join_types(coercions, ", ")]
}
}
TypeSignature::Comparable(count) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .take(*count)
- .map(|name| format!("{name}: Comparable"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(*count)
+ .map(|name| format!("{name}: Comparable"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
self.to_string_repr()
}
}
TypeSignature::Numeric(count) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .take(*count)
- .map(|name| format!("{name}: Numeric"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(*count)
+ .map(|name| format!("{name}: Numeric"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
self.to_string_repr()
}
}
TypeSignature::String(count) => {
if let Some(names) = parameter_names {
- vec![names
- .iter()
- .take(*count)
- .map(|name| format!("{name}: String"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(*count)
+ .map(|name| format!("{name}: String"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
} else {
self.to_string_repr()
}
@@ -697,28 +715,34 @@ impl TypeSignature {
if let Some(names) = parameter_names {
match array_sig {
ArrayFunctionSignature::Array { arguments, .. } => {
- vec![names
- .iter()
- .zip(arguments.iter())
- .map(|(name, arg_type)| format!("{name}:
{arg_type}"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .zip(arguments.iter())
+ .map(|(name, arg_type)| format!("{name}:
{arg_type}"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
}
ArrayFunctionSignature::RecursiveArray => {
- vec![names
- .iter()
- .take(1)
- .map(|name| format!("{name}: recursive_array"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(1)
+ .map(|name| format!("{name}:
recursive_array"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
}
ArrayFunctionSignature::MapArray => {
- vec![names
- .iter()
- .take(1)
- .map(|name| format!("{name}: map_array"))
- .collect::<Vec<_>>()
- .join(", ")]
+ vec![
+ names
+ .iter()
+ .take(1)
+ .map(|name| format!("{name}: map_array"))
+ .collect::<Vec<_>>()
+ .join(", "),
+ ]
}
}
} else {
@@ -1538,10 +1562,12 @@ mod tests {
.with_parameter_names(vec!["count".to_string()]); // Only 1 name for 2
args
assert!(result.is_err());
- assert!(result
- .unwrap_err()
- .to_string()
- .contains("does not match signature arity"));
+ assert!(
+ result
+ .unwrap_err()
+ .to_string()
+ .contains("does not match signature arity")
+ );
}
#[test]
@@ -1553,10 +1579,12 @@ mod tests {
.with_parameter_names(vec!["count".to_string(), "count".to_string()]);
assert!(result.is_err());
- assert!(result
- .unwrap_err()
- .to_string()
- .contains("Duplicate parameter name"));
+ assert!(
+ result
+ .unwrap_err()
+ .to_string()
+ .contains("Duplicate parameter name")
+ );
}
#[test]
@@ -1565,10 +1593,12 @@ mod tests {
.with_parameter_names(vec!["arg".to_string()]);
assert!(result.is_err());
- assert!(result
- .unwrap_err()
- .to_string()
- .contains("variable arity signature"));
+ assert!(
+ result
+ .unwrap_err()
+ .to_string()
+ .contains("variable arity signature")
+ );
}
#[test]
diff --git a/datafusion/expr-common/src/statistics.rs
b/datafusion/expr-common/src/statistics.rs
index 7961bf0872..72da2caa93 100644
--- a/datafusion/expr-common/src/statistics.rs
+++ b/datafusion/expr-common/src/statistics.rs
@@ -17,7 +17,7 @@
use std::f64::consts::LN_2;
-use crate::interval_arithmetic::{apply_operator, Interval};
+use crate::interval_arithmetic::{Interval, apply_operator};
use crate::operator::Operator;
use crate::type_coercion::binary::binary_numeric_coercion;
@@ -25,8 +25,8 @@ use arrow::array::ArrowNativeTypeOp;
use arrow::datatypes::DataType;
use datafusion_common::rounding::alter_fp_rounding_mode;
use datafusion_common::{
- assert_eq_or_internal_err, assert_ne_or_internal_err,
assert_or_internal_err,
- internal_err, not_impl_err, DataFusionError, Result, ScalarValue,
+ DataFusionError, Result, ScalarValue, assert_eq_or_internal_err,
+ assert_ne_or_internal_err, assert_or_internal_err, internal_err,
not_impl_err,
};
/// This object defines probabilistic distributions that encode uncertain
@@ -878,11 +878,11 @@ pub fn compute_variance(
#[cfg(test)]
mod tests {
use super::{
+ BernoulliDistribution, Distribution, GaussianDistribution,
UniformDistribution,
combine_bernoullis, combine_gaussians, compute_mean, compute_median,
compute_variance, create_bernoulli_from_comparison,
new_generic_from_binary_op,
- BernoulliDistribution, Distribution, GaussianDistribution,
UniformDistribution,
};
- use crate::interval_arithmetic::{apply_operator, Interval};
+ use crate::interval_arithmetic::{Interval, apply_operator};
use crate::operator::Operator;
use arrow::datatypes::DataType;
diff --git a/datafusion/expr-common/src/type_coercion/aggregates.rs
b/datafusion/expr-common/src/type_coercion/aggregates.rs
index 55a8843394..01d093950d 100644
--- a/datafusion/expr-common/src/type_coercion/aggregates.rs
+++ b/datafusion/expr-common/src/type_coercion/aggregates.rs
@@ -18,7 +18,7 @@
use crate::signature::TypeSignature;
use arrow::datatypes::{DataType, FieldRef};
-use datafusion_common::{internal_err, plan_err, Result};
+use datafusion_common::{Result, internal_err, plan_err};
// TODO: remove usage of these (INTEGERS and NUMERICS) in favour of signatures
// see https://github.com/apache/datafusion/issues/18092
diff --git a/datafusion/expr-common/src/type_coercion/binary.rs
b/datafusion/expr-common/src/type_coercion/binary.rs
index 4aacc7533c..18603991ae 100644
--- a/datafusion/expr-common/src/type_coercion/binary.rs
+++ b/datafusion/expr-common/src/type_coercion/binary.rs
@@ -22,18 +22,18 @@ use std::sync::Arc;
use crate::operator::Operator;
-use arrow::array::{new_empty_array, Array};
+use arrow::array::{Array, new_empty_array};
use arrow::compute::can_cast_types;
use arrow::datatypes::{
- DataType, Field, FieldRef, Fields, TimeUnit, DECIMAL128_MAX_PRECISION,
- DECIMAL128_MAX_SCALE, DECIMAL256_MAX_PRECISION, DECIMAL256_MAX_SCALE,
DECIMAL32_MAX_PRECISION, DECIMAL32_MAX_SCALE, DECIMAL64_MAX_PRECISION,
- DECIMAL64_MAX_SCALE,
+ DECIMAL64_MAX_SCALE, DECIMAL128_MAX_PRECISION, DECIMAL128_MAX_SCALE,
+ DECIMAL256_MAX_PRECISION, DECIMAL256_MAX_SCALE, DataType, Field, FieldRef,
Fields,
+ TimeUnit,
};
use datafusion_common::types::NativeType;
use datafusion_common::{
- exec_err, internal_err, not_impl_err, plan_datafusion_err, plan_err,
Diagnostic,
- Result, Span, Spans,
+ Diagnostic, Result, Span, Spans, exec_err, internal_err, not_impl_err,
+ plan_datafusion_err, plan_err,
};
use itertools::Itertools;
@@ -184,8 +184,8 @@ impl<'a> BinaryTypeCoercer<'a> {
}
fn signature_inner(&'a self, lhs: &DataType, rhs: &DataType) ->
Result<Signature> {
- use arrow::datatypes::DataType::*;
use Operator::*;
+ use arrow::datatypes::DataType::*;
let result = match self.op {
Eq |
NotEq |
@@ -751,7 +751,11 @@ pub fn try_type_union_resolution_with_struct(
let keys = fields.iter().map(|f| f.name().to_owned()).join(",");
if let Some(ref k) = keys_string {
if *k != keys {
- return exec_err!("Expect same keys for struct type but got
mismatched pair {} and {}", *k, keys);
+ return exec_err!(
+ "Expect same keys for struct type but got mismatched
pair {} and {}",
+ *k,
+ keys
+ );
}
} else {
keys_string = Some(keys);
@@ -765,7 +769,9 @@ pub fn try_type_union_resolution_with_struct(
{
fields.iter().map(|f| f.data_type().to_owned()).collect()
} else {
- return internal_err!("Struct type is checked is the previous function,
so this should be unreachable");
+ return internal_err!(
+ "Struct type is checked is the previous function, so this should
be unreachable"
+ );
};
for data_type in data_types.iter().skip(1) {
diff --git
a/datafusion/expr-common/src/type_coercion/binary/tests/arithmetic.rs
b/datafusion/expr-common/src/type_coercion/binary/tests/arithmetic.rs
index 63945a4dab..4a3ccf7bb7 100644
--- a/datafusion/expr-common/src/type_coercion/binary/tests/arithmetic.rs
+++ b/datafusion/expr-common/src/type_coercion/binary/tests/arithmetic.rs
@@ -25,7 +25,10 @@ fn test_coercion_error() -> Result<()> {
let result_type = coercer.get_input_types();
let e = result_type.unwrap_err();
- assert_eq!(e.strip_backtrace(), "Error during planning: Cannot coerce
arithmetic expression Float32 + Utf8 to valid types");
+ assert_eq!(
+ e.strip_backtrace(),
+ "Error during planning: Cannot coerce arithmetic expression Float32 +
Utf8 to valid types"
+ );
Ok(())
}
@@ -146,14 +149,18 @@ fn test_type_coercion_arithmetic() -> Result<()> {
// (_, Float32) | (Float32, _) => Some(Float32)
test_coercion_binary_rule_multiple!(
Float32,
- [Float32, Float16, Int64, UInt64, Int32, UInt32, Int16, UInt16, Int8,
UInt8],
+ [
+ Float32, Float16, Int64, UInt64, Int32, UInt32, Int16, UInt16,
Int8, UInt8
+ ],
Operator::Plus,
Float32
);
// (_, Float16) | (Float16, _) => Some(Float16)
test_coercion_binary_rule_multiple!(
Float16,
- [Float16, Int64, UInt64, Int32, UInt32, Int16, UInt16, Int8, UInt8],
+ [
+ Float16, Int64, UInt64, Int32, UInt32, Int16, UInt16, Int8, UInt8
+ ],
Operator::Plus,
Float16
);
diff --git
a/datafusion/expr-common/src/type_coercion/binary/tests/comparison.rs
b/datafusion/expr-common/src/type_coercion/binary/tests/comparison.rs
index 5401264e43..d19b2c7ba9 100644
--- a/datafusion/expr-common/src/type_coercion/binary/tests/comparison.rs
+++ b/datafusion/expr-common/src/type_coercion/binary/tests/comparison.rs
@@ -778,8 +778,14 @@ fn test_decimal_cross_variant_comparison_coercion() ->
Result<()> {
for op in comparison_op_types {
let (lhs, rhs) =
BinaryTypeCoercer::new(&lhs_type, &op,
&rhs_type).get_input_types()?;
- assert_eq!(expected_type, lhs, "Coercion of type {lhs_type:?} with
{rhs_type:?} resulted in unexpected type: {lhs:?}");
- assert_eq!(expected_type, rhs, "Coercion of type {rhs_type:?} with
{lhs_type:?} resulted in unexpected type: {rhs:?}");
+ assert_eq!(
+ expected_type, lhs,
+ "Coercion of type {lhs_type:?} with {rhs_type:?} resulted in
unexpected type: {lhs:?}"
+ );
+ assert_eq!(
+ expected_type, rhs,
+ "Coercion of type {rhs_type:?} with {lhs_type:?} resulted in
unexpected type: {rhs:?}"
+ );
}
}
diff --git a/datafusion/macros/Cargo.toml b/datafusion/macros/Cargo.toml
index 35714bfe96..ba7368b0fe 100644
--- a/datafusion/macros/Cargo.toml
+++ b/datafusion/macros/Cargo.toml
@@ -21,7 +21,7 @@ description = "Procedural macros for DataFusion query engine"
keywords = ["datafusion", "query", "sql"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/macros/src/user_doc.rs
b/datafusion/macros/src/user_doc.rs
index 58c2cc2b1b..ce9e7d55ef 100644
--- a/datafusion/macros/src/user_doc.rs
+++ b/datafusion/macros/src/user_doc.rs
@@ -25,7 +25,7 @@ extern crate proc_macro;
use datafusion_doc::scalar_doc_sections::doc_sections_const;
use proc_macro::TokenStream;
use quote::quote;
-use syn::{parse_macro_input, DeriveInput, LitStr};
+use syn::{DeriveInput, LitStr, parse_macro_input};
/// This procedural macro is intended to parse a rust custom attribute and
create user documentation
/// from it by constructing a `DocumentBuilder()` automatically. The
`Documentation` can be
diff --git a/datafusion/proto-common/Cargo.toml
b/datafusion/proto-common/Cargo.toml
index c67c8892a3..f92ee554c4 100644
--- a/datafusion/proto-common/Cargo.toml
+++ b/datafusion/proto-common/Cargo.toml
@@ -21,7 +21,7 @@ description = "Protobuf serialization of DataFusion common
types"
keywords = ["arrow", "query", "sql"]
readme = "README.md"
version = { workspace = true }
-edition = { workspace = true }
+edition = "2024"
homepage = { workspace = true }
repository = { workspace = true }
license = { workspace = true }
diff --git a/datafusion/proto-common/src/common.rs
b/datafusion/proto-common/src/common.rs
index 9af63e3b07..d5046aee2e 100644
--- a/datafusion/proto-common/src/common.rs
+++ b/datafusion/proto-common/src/common.rs
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-use datafusion_common::{internal_datafusion_err, DataFusionError};
+use datafusion_common::{DataFusionError, internal_datafusion_err};
/// Return a `DataFusionError::Internal` with the given message
pub fn proto_error<S: Into<String>>(message: S) -> DataFusionError {
diff --git a/datafusion/proto-common/src/from_proto/mod.rs
b/datafusion/proto-common/src/from_proto/mod.rs
index 2d65a55d37..1a38ed4363 100644
--- a/datafusion/proto-common/src/from_proto/mod.rs
+++ b/datafusion/proto-common/src/from_proto/mod.rs
@@ -25,12 +25,14 @@ use arrow::array::{ArrayRef, AsArray};
use arrow::buffer::Buffer;
use arrow::csv::WriterBuilder;
use arrow::datatypes::{
- i256, DataType, Field, IntervalDayTimeType, IntervalMonthDayNanoType,
IntervalUnit,
- Schema, TimeUnit, UnionFields, UnionMode,
+ DataType, Field, IntervalDayTimeType, IntervalMonthDayNanoType,
IntervalUnit, Schema,
+ TimeUnit, UnionFields, UnionMode, i256,
};
use arrow::ipc::{reader::read_record_batch, root_as_message};
use datafusion_common::{
+ Column, ColumnStatistics, Constraint, Constraints, DFSchema, DFSchemaRef,
+ DataFusionError, JoinSide, ScalarValue, Statistics, TableReference,
arrow_datafusion_err,
config::{
CsvOptions, JsonOptions, ParquetColumnOptions, ParquetOptions,
@@ -40,8 +42,6 @@ use datafusion_common::{
parsers::CompressionTypeVariant,
plan_datafusion_err,
stats::Precision,
- Column, ColumnStatistics, Constraint, Constraints, DFSchema, DFSchemaRef,
- DataFusionError, JoinSide, ScalarValue, Statistics, TableReference,
};
#[derive(Debug)]
diff --git a/datafusion/proto-common/src/to_proto/mod.rs
b/datafusion/proto-common/src/to_proto/mod.rs
index e9de1d9e9a..0152d57832 100644
--- a/datafusion/proto-common/src/to_proto/mod.rs
+++ b/datafusion/proto-common/src/to_proto/mod.rs
@@ -20,7 +20,7 @@ use std::sync::Arc;
use crate::protobuf_common as protobuf;
use crate::protobuf_common::{
- arrow_type::ArrowTypeEnum, scalar_value::Value, EmptyMessage,
+ EmptyMessage, arrow_type::ArrowTypeEnum, scalar_value::Value,
};
use arrow::array::{ArrayRef, RecordBatch};
use arrow::csv::WriterBuilder;
@@ -32,6 +32,8 @@ use arrow::ipc::writer::{
CompressionContext, DictionaryTracker, IpcDataGenerator, IpcWriteOptions,
};
use datafusion_common::{
+ Column, ColumnStatistics, Constraint, Constraints, DFSchema, DFSchemaRef,
+ DataFusionError, JoinSide, ScalarValue, Statistics,
config::{
CsvOptions, JsonOptions, ParquetColumnOptions, ParquetOptions,
TableParquetOptions,
@@ -40,8 +42,6 @@ use datafusion_common::{
parsers::CompressionTypeVariant,
plan_datafusion_err,
stats::Precision,
- Column, ColumnStatistics, Constraint, Constraints, DFSchema, DFSchemaRef,
- DataFusionError, JoinSide, ScalarValue, Statistics,
};
#[derive(Debug)]
@@ -1018,11 +1018,11 @@ fn encode_scalar_nested_value(
))
})?;
- let gen = IpcDataGenerator {};
+ let ipc_gen = IpcDataGenerator {};
let mut dict_tracker = DictionaryTracker::new(false);
let write_options = IpcWriteOptions::default();
let mut compression_context = CompressionContext::default();
- let (encoded_dictionaries, encoded_message) = gen
+ let (encoded_dictionaries, encoded_message) = ipc_gen
.encode(
&batch,
&mut dict_tracker,
diff --git a/dev/depcheck/Cargo.toml b/dev/depcheck/Cargo.toml
index 23cefaec43..3e4bf39cce 100644
--- a/dev/depcheck/Cargo.toml
+++ b/dev/depcheck/Cargo.toml
@@ -18,8 +18,9 @@
# Circular dependency checker for DataFusion
[package]
name = "depcheck"
+edition = "2024"
# See more keys and their definitions at
https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-cargo = "0.81.0"
+cargo = "0.92.0"
diff --git a/dev/depcheck/Cargo.toml b/dev/depcheck/rust-toolchain.toml
similarity index 79%
copy from dev/depcheck/Cargo.toml
copy to dev/depcheck/rust-toolchain.toml
index 23cefaec43..55d572362d 100644
--- a/dev/depcheck/Cargo.toml
+++ b/dev/depcheck/rust-toolchain.toml
@@ -15,11 +15,9 @@
# specific language governing permissions and limitations
# under the License.
-# Circular dependency checker for DataFusion
-[package]
-name = "depcheck"
+# This file specifies the default version of Rust used
+# to compile this workspace and run CI jobs.
-# See more keys and their definitions at
https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-cargo = "0.81.0"
+[toolchain]
+channel = "1.89.0"
+components = ["rustfmt", "clippy"]
diff --git a/dev/depcheck/src/main.rs b/dev/depcheck/src/main.rs
index 80feefcd1b..ebd79faa6f 100644
--- a/dev/depcheck/src/main.rs
+++ b/dev/depcheck/src/main.rs
@@ -48,7 +48,7 @@ fn main() -> CargoResult<()> {
root_cargo_toml.display()
);
let workspace = cargo::core::Workspace::new(&root_cargo_toml, &gctx)?;
- let (_, resolve) = cargo::ops::resolve_ws(&workspace)?;
+ let (_, resolve) = cargo::ops::resolve_ws(&workspace, false)?;
let mut package_deps = HashMap::new();
for package_id in resolve
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]