This is an automated email from the ASF dual-hosted git repository.
dheres 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 585504a31f Enable clone_on_ref_ptr clippy lint on common (#11384)
585504a31f is described below
commit 585504a31fd7d9a44c97f3f19af42bace08b8cc3
Author: 张林伟 <[email protected]>
AuthorDate: Thu Jul 11 00:58:53 2024 +0800
Enable clone_on_ref_ptr clippy lint on common (#11384)
---
datafusion/common-runtime/src/lib.rs | 2 +
datafusion/common/src/dfschema.rs | 12 ++--
datafusion/common/src/hash_utils.rs | 19 +++--
datafusion/common/src/lib.rs | 2 +
datafusion/common/src/scalar/mod.rs | 97 +++++++++++++-------------
datafusion/common/src/scalar/struct_builder.rs | 2 +-
datafusion/common/src/utils/mod.rs | 5 +-
7 files changed, 77 insertions(+), 62 deletions(-)
diff --git a/datafusion/common-runtime/src/lib.rs
b/datafusion/common-runtime/src/lib.rs
index e8624163f2..8145bb1104 100644
--- a/datafusion/common-runtime/src/lib.rs
+++ b/datafusion/common-runtime/src/lib.rs
@@ -14,6 +14,8 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
+// Make cheap clones clear: https://github.com/apache/datafusion/issues/11143
+#![deny(clippy::clone_on_ref_ptr)]
pub mod common;
diff --git a/datafusion/common/src/dfschema.rs
b/datafusion/common/src/dfschema.rs
index 3c2cc89fc0..7598cbc4d8 100644
--- a/datafusion/common/src/dfschema.rs
+++ b/datafusion/common/src/dfschema.rs
@@ -211,7 +211,7 @@ impl DFSchema {
schema: &SchemaRef,
) -> Result<Self> {
let dfschema = Self {
- inner: schema.clone(),
+ inner: Arc::clone(schema),
field_qualifiers: qualifiers,
functional_dependencies: FunctionalDependencies::empty(),
};
@@ -311,7 +311,7 @@ impl DFSchema {
};
if !duplicated_field {
// self.inner.fields.push(field.clone());
- schema_builder.push(field.clone());
+ schema_builder.push(Arc::clone(field));
qualifiers.push(qualifier.cloned());
}
}
@@ -1276,7 +1276,7 @@ mod tests {
let arrow_schema_ref = Arc::new(arrow_schema.clone());
let df_schema = DFSchema {
- inner: arrow_schema_ref.clone(),
+ inner: Arc::clone(&arrow_schema_ref),
field_qualifiers: vec![None; arrow_schema_ref.fields.len()],
functional_dependencies: FunctionalDependencies::empty(),
};
@@ -1284,7 +1284,7 @@ mod tests {
{
let arrow_schema = arrow_schema.clone();
- let arrow_schema_ref = arrow_schema_ref.clone();
+ let arrow_schema_ref = Arc::clone(&arrow_schema_ref);
assert_eq!(df_schema, arrow_schema.to_dfschema().unwrap());
assert_eq!(df_schema, arrow_schema_ref.to_dfschema().unwrap());
@@ -1292,7 +1292,7 @@ mod tests {
{
let arrow_schema = arrow_schema.clone();
- let arrow_schema_ref = arrow_schema_ref.clone();
+ let arrow_schema_ref = Arc::clone(&arrow_schema_ref);
assert_eq!(df_schema_ref, arrow_schema.to_dfschema_ref().unwrap());
assert_eq!(df_schema_ref,
arrow_schema_ref.to_dfschema_ref().unwrap());
@@ -1322,7 +1322,7 @@ mod tests {
let schema = Arc::new(Schema::new(vec![a_field, b_field]));
let df_schema = DFSchema {
- inner: schema.clone(),
+ inner: Arc::clone(&schema),
field_qualifiers: vec![None; schema.fields.len()],
functional_dependencies: FunctionalDependencies::empty(),
};
diff --git a/datafusion/common/src/hash_utils.rs
b/datafusion/common/src/hash_utils.rs
index c972536c4d..c8adae34f6 100644
--- a/datafusion/common/src/hash_utils.rs
+++ b/datafusion/common/src/hash_utils.rs
@@ -244,7 +244,7 @@ fn hash_list_array<OffsetSize>(
where
OffsetSize: OffsetSizeTrait,
{
- let values = array.values().clone();
+ let values = Arc::clone(array.values());
let offsets = array.value_offsets();
let nulls = array.nulls();
let mut values_hashes = vec![0u64; values.len()];
@@ -274,7 +274,7 @@ fn hash_fixed_list_array(
random_state: &RandomState,
hashes_buffer: &mut [u64],
) -> Result<()> {
- let values = array.values().clone();
+ let values = Arc::clone(array.values());
let value_len = array.value_length();
let offset_size = value_len as usize / array.len();
let nulls = array.nulls();
@@ -622,19 +622,19 @@ mod tests {
vec![
(
Arc::new(Field::new("bool", DataType::Boolean, false)),
- boolarr.clone() as ArrayRef,
+ Arc::clone(&boolarr) as ArrayRef,
),
(
Arc::new(Field::new("i32", DataType::Int32, false)),
- i32arr.clone() as ArrayRef,
+ Arc::clone(&i32arr) as ArrayRef,
),
(
Arc::new(Field::new("i32", DataType::Int32, false)),
- i32arr.clone() as ArrayRef,
+ Arc::clone(&i32arr) as ArrayRef,
),
(
Arc::new(Field::new("bool", DataType::Boolean, false)),
- boolarr.clone() as ArrayRef,
+ Arc::clone(&boolarr) as ArrayRef,
),
],
Buffer::from(&[0b001011]),
@@ -710,7 +710,12 @@ mod tests {
let random_state = RandomState::with_seeds(0, 0, 0, 0);
let mut one_col_hashes = vec![0; strings1.len()];
- create_hashes(&[dict_array.clone()], &random_state, &mut
one_col_hashes).unwrap();
+ create_hashes(
+ &[Arc::clone(&dict_array) as ArrayRef],
+ &random_state,
+ &mut one_col_hashes,
+ )
+ .unwrap();
let mut two_col_hashes = vec![0; strings1.len()];
create_hashes(
diff --git a/datafusion/common/src/lib.rs b/datafusion/common/src/lib.rs
index c275152642..8cd64e7d16 100644
--- a/datafusion/common/src/lib.rs
+++ b/datafusion/common/src/lib.rs
@@ -14,6 +14,8 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
+// Make cheap clones clear: https://github.com/apache/datafusion/issues/11143
+#![deny(clippy::clone_on_ref_ptr)]
mod column;
mod dfschema;
diff --git a/datafusion/common/src/scalar/mod.rs
b/datafusion/common/src/scalar/mod.rs
index 26e03a3b98..c8f21788cb 100644
--- a/datafusion/common/src/scalar/mod.rs
+++ b/datafusion/common/src/scalar/mod.rs
@@ -1758,8 +1758,11 @@ impl ScalarValue {
if let Some(DataType::FixedSizeList(f, l)) =
first_non_null_data_type {
for array in arrays.iter_mut() {
if array.is_null(0) {
- *array =
-
Arc::new(FixedSizeListArray::new_null(f.clone(), l, 1));
+ *array = Arc::new(FixedSizeListArray::new_null(
+ Arc::clone(&f),
+ l,
+ 1,
+ ));
}
}
}
@@ -3298,16 +3301,16 @@ impl TryFrom<&DataType> for ScalarValue {
),
// `ScalaValue::List` contains single element `ListArray`.
DataType::List(field_ref) => ScalarValue::List(Arc::new(
- GenericListArray::new_null(field_ref.clone(), 1),
+ GenericListArray::new_null(Arc::clone(field_ref), 1),
)),
// `ScalarValue::LargeList` contains single element
`LargeListArray`.
DataType::LargeList(field_ref) => ScalarValue::LargeList(Arc::new(
- GenericListArray::new_null(field_ref.clone(), 1),
+ GenericListArray::new_null(Arc::clone(field_ref), 1),
)),
// `ScalaValue::FixedSizeList` contains single element
`FixedSizeList`.
DataType::FixedSizeList(field_ref, fixed_length) => {
ScalarValue::FixedSizeList(Arc::new(FixedSizeListArray::new_null(
- field_ref.clone(),
+ Arc::clone(field_ref),
*fixed_length,
1,
)))
@@ -3746,11 +3749,11 @@ mod tests {
let expected = StructArray::from(vec![
(
Arc::new(Field::new("b", DataType::Boolean, false)),
- boolean.clone() as ArrayRef,
+ Arc::clone(&boolean) as ArrayRef,
),
(
Arc::new(Field::new("c", DataType::Int32, false)),
- int.clone() as ArrayRef,
+ Arc::clone(&int) as ArrayRef,
),
]);
@@ -3792,11 +3795,11 @@ mod tests {
let struct_array = StructArray::from(vec![
(
Arc::new(Field::new("b", DataType::Boolean, false)),
- boolean.clone() as ArrayRef,
+ Arc::clone(&boolean) as ArrayRef,
),
(
Arc::new(Field::new("c", DataType::Int32, false)),
- int.clone() as ArrayRef,
+ Arc::clone(&int) as ArrayRef,
),
]);
let sv = ScalarValue::Struct(Arc::new(struct_array));
@@ -3810,11 +3813,11 @@ mod tests {
let struct_array = StructArray::from(vec![
(
Arc::new(Field::new("b", DataType::Boolean, false)),
- boolean.clone() as ArrayRef,
+ Arc::clone(&boolean) as ArrayRef,
),
(
Arc::new(Field::new("c", DataType::Int32, false)),
- int.clone() as ArrayRef,
+ Arc::clone(&int) as ArrayRef,
),
]);
@@ -3846,7 +3849,7 @@ mod tests {
fn test_to_array_of_size_for_fsl() {
let values = Int32Array::from_iter([Some(1), None, Some(2)]);
let field = Arc::new(Field::new("item", DataType::Int32, true));
- let arr = FixedSizeListArray::new(field.clone(), 3, Arc::new(values),
None);
+ let arr = FixedSizeListArray::new(Arc::clone(&field), 3,
Arc::new(values), None);
let sv = ScalarValue::FixedSizeList(Arc::new(arr));
let actual_arr = sv
.to_array_of_size(2)
@@ -3932,13 +3935,13 @@ mod tests {
fn test_iter_to_array_fixed_size_list() {
let field = Arc::new(Field::new("item", DataType::Int32, true));
let f1 = Arc::new(FixedSizeListArray::new(
- field.clone(),
+ Arc::clone(&field),
3,
Arc::new(Int32Array::from(vec![1, 2, 3])),
None,
));
let f2 = Arc::new(FixedSizeListArray::new(
- field.clone(),
+ Arc::clone(&field),
3,
Arc::new(Int32Array::from(vec![4, 5, 6])),
None,
@@ -3946,7 +3949,7 @@ mod tests {
let f_nulls = Arc::new(FixedSizeListArray::new_null(field, 1, 1));
let scalars = vec![
- ScalarValue::FixedSizeList(f_nulls.clone()),
+ ScalarValue::FixedSizeList(Arc::clone(&f_nulls)),
ScalarValue::FixedSizeList(f1),
ScalarValue::FixedSizeList(f2),
ScalarValue::FixedSizeList(f_nulls),
@@ -4780,7 +4783,7 @@ mod tests {
let inner_field = Arc::new(Field::new("item", DataType::Int32, true));
// Test for List
- let data_type = &DataType::List(inner_field.clone());
+ let data_type = &DataType::List(Arc::clone(&inner_field));
let scalar: ScalarValue = data_type.try_into().unwrap();
let expected = ScalarValue::List(
new_null_array(data_type, 1)
@@ -4792,7 +4795,7 @@ mod tests {
assert!(expected.is_null());
// Test for LargeList
- let data_type = &DataType::LargeList(inner_field.clone());
+ let data_type = &DataType::LargeList(Arc::clone(&inner_field));
let scalar: ScalarValue = data_type.try_into().unwrap();
let expected = ScalarValue::LargeList(
new_null_array(data_type, 1)
@@ -4804,7 +4807,7 @@ mod tests {
assert!(expected.is_null());
// Test for FixedSizeList(5)
- let data_type = &DataType::FixedSizeList(inner_field.clone(), 5);
+ let data_type = &DataType::FixedSizeList(Arc::clone(&inner_field), 5);
let scalar: ScalarValue = data_type.try_into().unwrap();
let expected = ScalarValue::FixedSizeList(
new_null_array(data_type, 1)
@@ -5212,35 +5215,35 @@ mod tests {
let field_f = Arc::new(Field::new("f", DataType::Int64, false));
let field_d = Arc::new(Field::new(
"D",
- DataType::Struct(vec![field_e.clone(), field_f.clone()].into()),
+ DataType::Struct(vec![Arc::clone(&field_e),
Arc::clone(&field_f)].into()),
false,
));
let struct_array = StructArray::from(vec![
(
- field_e.clone(),
+ Arc::clone(&field_e),
Arc::new(Int16Array::from(vec![2])) as ArrayRef,
),
(
- field_f.clone(),
+ Arc::clone(&field_f),
Arc::new(Int64Array::from(vec![3])) as ArrayRef,
),
]);
let struct_array = StructArray::from(vec![
(
- field_a.clone(),
+ Arc::clone(&field_a),
Arc::new(Int32Array::from(vec![23])) as ArrayRef,
),
(
- field_b.clone(),
+ Arc::clone(&field_b),
Arc::new(BooleanArray::from(vec![false])) as ArrayRef,
),
(
- field_c.clone(),
+ Arc::clone(&field_c),
Arc::new(StringArray::from(vec!["Hello"])) as ArrayRef,
),
- (field_d.clone(), Arc::new(struct_array) as ArrayRef),
+ (Arc::clone(&field_d), Arc::new(struct_array) as ArrayRef),
]);
let scalar = ScalarValue::Struct(Arc::new(struct_array));
@@ -5250,26 +5253,26 @@ mod tests {
let expected = Arc::new(StructArray::from(vec![
(
- field_a.clone(),
+ Arc::clone(&field_a),
Arc::new(Int32Array::from(vec![23, 23])) as ArrayRef,
),
(
- field_b.clone(),
+ Arc::clone(&field_b),
Arc::new(BooleanArray::from(vec![false, false])) as ArrayRef,
),
(
- field_c.clone(),
+ Arc::clone(&field_c),
Arc::new(StringArray::from(vec!["Hello", "Hello"])) as
ArrayRef,
),
(
- field_d.clone(),
+ Arc::clone(&field_d),
Arc::new(StructArray::from(vec![
(
- field_e.clone(),
+ Arc::clone(&field_e),
Arc::new(Int16Array::from(vec![2, 2])) as ArrayRef,
),
(
- field_f.clone(),
+ Arc::clone(&field_f),
Arc::new(Int64Array::from(vec![3, 3])) as ArrayRef,
),
])) as ArrayRef,
@@ -5348,26 +5351,26 @@ mod tests {
let expected = Arc::new(StructArray::from(vec![
(
- field_a.clone(),
+ Arc::clone(&field_a),
Arc::new(Int32Array::from(vec![23, 7, -1000])) as ArrayRef,
),
(
- field_b.clone(),
+ Arc::clone(&field_b),
Arc::new(BooleanArray::from(vec![false, true, true])) as
ArrayRef,
),
(
- field_c.clone(),
+ Arc::clone(&field_c),
Arc::new(StringArray::from(vec!["Hello", "World", "!!!!!"]))
as ArrayRef,
),
(
- field_d.clone(),
+ Arc::clone(&field_d),
Arc::new(StructArray::from(vec![
(
- field_e.clone(),
+ Arc::clone(&field_e),
Arc::new(Int16Array::from(vec![2, 4, 6])) as ArrayRef,
),
(
- field_f.clone(),
+ Arc::clone(&field_f),
Arc::new(Int64Array::from(vec![3, 5, 7])) as ArrayRef,
),
])) as ArrayRef,
@@ -5431,11 +5434,11 @@ mod tests {
let array = as_struct_array(&array).unwrap();
let expected = StructArray::from(vec![
(
- field_a.clone(),
+ Arc::clone(&field_a),
Arc::new(StringArray::from(vec!["First", "Second", "Third"]))
as ArrayRef,
),
(
- field_primitive_list.clone(),
+ Arc::clone(&field_primitive_list),
Arc::new(ListArray::from_iter_primitive::<Int32Type, _,
_>(vec![
Some(vec![Some(1), Some(2), Some(3)]),
Some(vec![Some(4), Some(5)]),
@@ -6195,18 +6198,18 @@ mod tests {
let struct_value = vec![
(
- fields[0].clone(),
+ Arc::clone(&fields[0]),
Arc::new(UInt64Array::from(vec![Some(1)])) as ArrayRef,
),
(
- fields[1].clone(),
+ Arc::clone(&fields[1]),
Arc::new(StructArray::from(vec![
(
- fields_b[0].clone(),
+ Arc::clone(&fields_b[0]),
Arc::new(UInt64Array::from(vec![Some(2)])) as ArrayRef,
),
(
- fields_b[1].clone(),
+ Arc::clone(&fields_b[1]),
Arc::new(UInt64Array::from(vec![Some(3)])) as ArrayRef,
),
])) as ArrayRef,
@@ -6215,19 +6218,19 @@ mod tests {
let struct_value_with_nulls = vec![
(
- fields[0].clone(),
+ Arc::clone(&fields[0]),
Arc::new(UInt64Array::from(vec![Some(1)])) as ArrayRef,
),
(
- fields[1].clone(),
+ Arc::clone(&fields[1]),
Arc::new(StructArray::from((
vec![
(
- fields_b[0].clone(),
+ Arc::clone(&fields_b[0]),
Arc::new(UInt64Array::from(vec![Some(2)])) as
ArrayRef,
),
(
- fields_b[1].clone(),
+ Arc::clone(&fields_b[1]),
Arc::new(UInt64Array::from(vec![Some(3)])) as
ArrayRef,
),
],
diff --git a/datafusion/common/src/scalar/struct_builder.rs
b/datafusion/common/src/scalar/struct_builder.rs
index b1a34e4a61..4a6a8f0289 100644
--- a/datafusion/common/src/scalar/struct_builder.rs
+++ b/datafusion/common/src/scalar/struct_builder.rs
@@ -144,7 +144,7 @@ impl IntoFieldRef for FieldRef {
impl IntoFieldRef for &FieldRef {
fn into_field_ref(self) -> FieldRef {
- self.clone()
+ Arc::clone(self)
}
}
diff --git a/datafusion/common/src/utils/mod.rs
b/datafusion/common/src/utils/mod.rs
index dd7b80333c..8264b48725 100644
--- a/datafusion/common/src/utils/mod.rs
+++ b/datafusion/common/src/utils/mod.rs
@@ -245,7 +245,10 @@ pub fn evaluate_partition_ranges(
end: num_rows,
}]
} else {
- let cols: Vec<_> = partition_columns.iter().map(|x|
x.values.clone()).collect();
+ let cols: Vec<_> = partition_columns
+ .iter()
+ .map(|x| Arc::clone(&x.values))
+ .collect();
partition(&cols)?.ranges()
})
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]