This is an automated email from the ASF dual-hosted git repository.

agrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/main by this push:
     new c79bd5cc feat: Add xxhash64 function support (#424)
c79bd5cc is described below

commit c79bd5cc71be81d67309467a455026324aa05e44
Author: advancedxy <[email protected]>
AuthorDate: Mon Jun 3 23:57:53 2024 +0800

    feat: Add xxhash64 function support (#424)
    
    * feat: Add xxhash64 function support
    
    * Update related docs
    
    * Update core/src/execution/datafusion/spark_hash.rs
    
    Co-authored-by: Liang-Chi Hsieh <[email protected]>
    
    * Update QueriesList results
    
    ---------
    
    Co-authored-by: Liang-Chi Hsieh <[email protected]>
    Co-authored-by: Parth Chandra <[email protected]>
---
 core/Cargo.lock                                    |   2 +
 core/Cargo.toml                                    |   1 +
 .../datafusion/expressions/scalar_funcs.rs         |  51 +-
 core/src/execution/datafusion/shuffle_writer.rs    |   4 +-
 core/src/execution/datafusion/spark_hash.rs        | 519 +++++++++++++-----
 docs/source/user-guide/expressions.md              |   5 +
 .../inspections/CometTPCDSQueriesList-results.txt  | 583 ++++++++++++---------
 spark/inspections/CometTPCHQueriesList-results.txt | 113 ++--
 .../org/apache/comet/serde/QueryPlanSerde.scala    |  15 +
 .../org/apache/comet/CometExpressionSuite.scala    |  17 +-
 10 files changed, 862 insertions(+), 448 deletions(-)

diff --git a/core/Cargo.lock b/core/Cargo.lock
index 52f10559..105bcaf7 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -637,6 +637,7 @@ dependencies = [
  "thrift 0.17.0",
  "tokio",
  "tokio-stream",
+ "twox-hash",
  "unicode-segmentation",
  "zstd",
 ]
@@ -2823,6 +2824,7 @@ source = 
"registry+https://github.com/rust-lang/crates.io-index";
 checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
 dependencies = [
  "cfg-if",
+ "rand",
  "static_assertions",
 ]
 
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 5e3e0ee7..6a179a6e 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -75,6 +75,7 @@ once_cell = "1.18.0"
 regex = "1.9.6"
 crc32fast = "1.3.2"
 simd-adler32 = "0.3.7"
+twox-hash = "1.6.3"
 
 [build-dependencies]
 prost-build = "0.9.0"
diff --git a/core/src/execution/datafusion/expressions/scalar_funcs.rs 
b/core/src/execution/datafusion/expressions/scalar_funcs.rs
index 8c5e1f39..0f254004 100644
--- a/core/src/execution/datafusion/expressions/scalar_funcs.rs
+++ b/core/src/execution/datafusion/expressions/scalar_funcs.rs
@@ -23,7 +23,7 @@ use std::{
     sync::Arc,
 };
 
-use crate::execution::datafusion::spark_hash::create_hashes;
+use crate::execution::datafusion::spark_hash::{create_murmur3_hashes, 
create_xxhash64_hashes};
 use arrow::{
     array::{
         ArrayRef, AsArray, Decimal128Builder, Float32Array, Float64Array, 
GenericStringArray,
@@ -119,6 +119,10 @@ pub fn create_comet_physical_fun(
             let func = Arc::new(spark_murmur3_hash);
             make_comet_scalar_udf!("murmur3_hash", func, without data_type)
         }
+        "xxhash64" => {
+            let func = Arc::new(spark_xxhash64);
+            make_comet_scalar_udf!("xxhash64", func, without data_type)
+        }
         sha if sha2_functions.contains(&sha) => {
             // Spark requires hex string as the result of sha2 functions, we 
have to wrap the
             // result of digest functions as hex string
@@ -653,7 +657,7 @@ fn spark_murmur3_hash(args: &[ColumnarValue]) -> 
Result<ColumnarValue, DataFusio
                     }
                 })
                 .collect::<Vec<ArrayRef>>();
-            create_hashes(&arrays, &mut hashes)?;
+            create_murmur3_hashes(&arrays, &mut hashes)?;
             if num_rows == 1 {
                 Ok(ColumnarValue::Scalar(ScalarValue::Int32(Some(
                     hashes[0] as i32,
@@ -672,6 +676,49 @@ fn spark_murmur3_hash(args: &[ColumnarValue]) -> 
Result<ColumnarValue, DataFusio
     }
 }
 
+fn spark_xxhash64(args: &[ColumnarValue]) -> Result<ColumnarValue, 
DataFusionError> {
+    let length = args.len();
+    let seed = &args[length - 1];
+    match seed {
+        ColumnarValue::Scalar(ScalarValue::Int64(Some(seed))) => {
+            // iterate over the arguments to find out the length of the array
+            let num_rows = args[0..args.len() - 1]
+                .iter()
+                .find_map(|arg| match arg {
+                    ColumnarValue::Array(array) => Some(array.len()),
+                    ColumnarValue::Scalar(_) => None,
+                })
+                .unwrap_or(1);
+            let mut hashes: Vec<u64> = vec![0_u64; num_rows];
+            hashes.fill(*seed as u64);
+            let arrays = args[0..args.len() - 1]
+                .iter()
+                .map(|arg| match arg {
+                    ColumnarValue::Array(array) => array.clone(),
+                    ColumnarValue::Scalar(scalar) => {
+                        scalar.clone().to_array_of_size(num_rows).unwrap()
+                    }
+                })
+                .collect::<Vec<ArrayRef>>();
+            create_xxhash64_hashes(&arrays, &mut hashes)?;
+            if num_rows == 1 {
+                Ok(ColumnarValue::Scalar(ScalarValue::Int64(Some(
+                    hashes[0] as i64,
+                ))))
+            } else {
+                let hashes: Vec<i64> = hashes.into_iter().map(|x| x as 
i64).collect();
+                Ok(ColumnarValue::Array(Arc::new(Int64Array::from(hashes))))
+            }
+        }
+        _ => {
+            internal_err!(
+                "The seed of function xxhash64 must be an Int64 scalar value, 
but got: {:?}.",
+                seed
+            )
+        }
+    }
+}
+
 #[inline]
 fn hex_encode<T: AsRef<[u8]>>(data: T) -> String {
     let mut s = String::with_capacity(data.as_ref().len() * 2);
diff --git a/core/src/execution/datafusion/shuffle_writer.rs 
b/core/src/execution/datafusion/shuffle_writer.rs
index 3b92abbd..96734097 100644
--- a/core/src/execution/datafusion/shuffle_writer.rs
+++ b/core/src/execution/datafusion/shuffle_writer.rs
@@ -62,7 +62,7 @@ use tokio::task;
 use crate::{
     common::bit::ceil,
     errors::{CometError, CometResult},
-    execution::datafusion::spark_hash::{create_hashes, pmod},
+    execution::datafusion::spark_hash::{create_murmur3_hashes, pmod},
 };
 
 /// The shuffle writer operator maps each input partition to M output 
partitions based on a
@@ -673,7 +673,7 @@ impl ShuffleRepartitioner {
 
                 // Hash arrays and compute buckets based on number of 
partitions
                 let partition_ids = &mut self.partition_ids[..arrays[0].len()];
-                create_hashes(&arrays, hashes_buf)?
+                create_murmur3_hashes(&arrays, hashes_buf)?
                     .iter()
                     .enumerate()
                     .for_each(|(idx, hash)| {
diff --git a/core/src/execution/datafusion/spark_hash.rs 
b/core/src/execution/datafusion/spark_hash.rs
index 6d25a72f..15d3a502 100644
--- a/core/src/execution/datafusion/spark_hash.rs
+++ b/core/src/execution/datafusion/spark_hash.rs
@@ -21,7 +21,8 @@ use arrow::{
     compute::take,
     datatypes::{ArrowNativeTypeOp, UInt16Type, UInt32Type, UInt64Type, 
UInt8Type},
 };
-use std::sync::Arc;
+use std::{hash::Hasher, sync::Arc};
+use twox_hash::XxHash64;
 
 use datafusion::{
     arrow::{
@@ -98,17 +99,25 @@ pub(crate) fn spark_compatible_murmur3_hash<T: 
AsRef<[u8]>>(data: T, seed: u32)
     }
 }
 
+#[inline]
+pub(crate) fn spark_compatible_xxhash64<T: AsRef<[u8]>>(data: T, seed: u64) -> 
u64 {
+    // TODO: Rewrite with a stateless hasher to reduce stack allocation?
+    let mut hasher = XxHash64::with_seed(seed);
+    hasher.write(data.as_ref());
+    hasher.finish()
+}
+
 macro_rules! hash_array {
-    ($array_type: ident, $column: ident, $hashes: ident) => {
+    ($array_type: ident, $column: ident, $hashes: ident, $hash_method: ident) 
=> {
         let array = $column.as_any().downcast_ref::<$array_type>().unwrap();
         if array.null_count() == 0 {
             for (i, hash) in $hashes.iter_mut().enumerate() {
-                *hash = spark_compatible_murmur3_hash(&array.value(i), *hash);
+                *hash = $hash_method(&array.value(i), *hash);
             }
         } else {
             for (i, hash) in $hashes.iter_mut().enumerate() {
                 if !array.is_null(i) {
-                    *hash = spark_compatible_murmur3_hash(&array.value(i), 
*hash);
+                    *hash = $hash_method(&array.value(i), *hash);
                 }
             }
         }
@@ -116,22 +125,17 @@ macro_rules! hash_array {
 }
 
 macro_rules! hash_array_boolean {
-    ($array_type: ident, $column: ident, $hash_input_type: ident, $hashes: 
ident) => {
+    ($array_type: ident, $column: ident, $hash_input_type: ident, $hashes: 
ident, $hash_method: ident) => {
         let array = $column.as_any().downcast_ref::<$array_type>().unwrap();
         if array.null_count() == 0 {
             for (i, hash) in $hashes.iter_mut().enumerate() {
-                *hash = spark_compatible_murmur3_hash(
-                    $hash_input_type::from(array.value(i)).to_le_bytes(),
-                    *hash,
-                );
+                *hash = 
$hash_method($hash_input_type::from(array.value(i)).to_le_bytes(), *hash);
             }
         } else {
             for (i, hash) in $hashes.iter_mut().enumerate() {
                 if !array.is_null(i) {
-                    *hash = spark_compatible_murmur3_hash(
-                        $hash_input_type::from(array.value(i)).to_le_bytes(),
-                        *hash,
-                    );
+                    *hash =
+                        
$hash_method($hash_input_type::from(array.value(i)).to_le_bytes(), *hash);
                 }
             }
         }
@@ -139,18 +143,18 @@ macro_rules! hash_array_boolean {
 }
 
 macro_rules! hash_array_primitive {
-    ($array_type: ident, $column: ident, $ty: ident, $hashes: ident) => {
+    ($array_type: ident, $column: ident, $ty: ident, $hashes: ident, 
$hash_method: ident) => {
         let array = $column.as_any().downcast_ref::<$array_type>().unwrap();
         let values = array.values();
 
         if array.null_count() == 0 {
             for (hash, value) in $hashes.iter_mut().zip(values.iter()) {
-                *hash = spark_compatible_murmur3_hash((*value as 
$ty).to_le_bytes(), *hash);
+                *hash = $hash_method((*value as $ty).to_le_bytes(), *hash);
             }
         } else {
             for (i, (hash, value)) in 
$hashes.iter_mut().zip(values.iter()).enumerate() {
                 if !array.is_null(i) {
-                    *hash = spark_compatible_murmur3_hash((*value as 
$ty).to_le_bytes(), *hash);
+                    *hash = $hash_method((*value as $ty).to_le_bytes(), *hash);
                 }
             }
         }
@@ -158,7 +162,7 @@ macro_rules! hash_array_primitive {
 }
 
 macro_rules! hash_array_primitive_float {
-    ($array_type: ident, $column: ident, $ty: ident, $ty2: ident, $hashes: 
ident) => {
+    ($array_type: ident, $column: ident, $ty: ident, $ty2: ident, $hashes: 
ident, $hash_method: ident) => {
         let array = $column.as_any().downcast_ref::<$array_type>().unwrap();
         let values = array.values();
 
@@ -166,9 +170,9 @@ macro_rules! hash_array_primitive_float {
             for (hash, value) in $hashes.iter_mut().zip(values.iter()) {
                 // Spark uses 0 as hash for -0.0, see `Murmur3Hash` expression.
                 if *value == 0.0 && value.is_sign_negative() {
-                    *hash = spark_compatible_murmur3_hash((0 as 
$ty2).to_le_bytes(), *hash);
+                    *hash = $hash_method((0 as $ty2).to_le_bytes(), *hash);
                 } else {
-                    *hash = spark_compatible_murmur3_hash((*value as 
$ty).to_le_bytes(), *hash);
+                    *hash = $hash_method((*value as $ty).to_le_bytes(), *hash);
                 }
             }
         } else {
@@ -176,9 +180,9 @@ macro_rules! hash_array_primitive_float {
                 if !array.is_null(i) {
                     // Spark uses 0 as hash for -0.0, see `Murmur3Hash` 
expression.
                     if *value == 0.0 && value.is_sign_negative() {
-                        *hash = spark_compatible_murmur3_hash((0 as 
$ty2).to_le_bytes(), *hash);
+                        *hash = $hash_method((0 as $ty2).to_le_bytes(), *hash);
                     } else {
-                        *hash = spark_compatible_murmur3_hash((*value as 
$ty).to_le_bytes(), *hash);
+                        *hash = $hash_method((*value as $ty).to_le_bytes(), 
*hash);
                     }
                 }
             }
@@ -187,17 +191,17 @@ macro_rules! hash_array_primitive_float {
 }
 
 macro_rules! hash_array_decimal {
-    ($array_type: ident, $column: ident, $hashes: ident) => {
+    ($array_type:ident, $column: ident, $hashes: ident, $hash_method: ident) 
=> {
         let array = $column.as_any().downcast_ref::<$array_type>().unwrap();
 
         if array.null_count() == 0 {
             for (i, hash) in $hashes.iter_mut().enumerate() {
-                *hash = 
spark_compatible_murmur3_hash(array.value(i).to_le_bytes(), *hash);
+                *hash = $hash_method(array.value(i).to_le_bytes(), *hash);
             }
         } else {
             for (i, hash) in $hashes.iter_mut().enumerate() {
                 if !array.is_null(i) {
-                    *hash = 
spark_compatible_murmur3_hash(array.value(i).to_le_bytes(), *hash);
+                    *hash = $hash_method(array.value(i).to_le_bytes(), *hash);
                 }
             }
         }
@@ -214,7 +218,7 @@ fn create_hashes_dictionary<K: ArrowDictionaryKeyType>(
     if !first_col {
         // unpack the dictionary array as each row may have a different hash 
input
         let unpacked = take(dict_array.values().as_ref(), dict_array.keys(), 
None)?;
-        create_hashes(&[unpacked], hashes_buffer)?;
+        create_murmur3_hashes(&[unpacked], hashes_buffer)?;
     } else {
         // For the first column, hash each dictionary value once, and then use
         // that computed hash for each key value to avoid a potentially
@@ -222,7 +226,42 @@ fn create_hashes_dictionary<K: ArrowDictionaryKeyType>(
         let dict_values = Arc::clone(dict_array.values());
         // same initial seed as Spark
         let mut dict_hashes = vec![42; dict_values.len()];
-        create_hashes(&[dict_values], &mut dict_hashes)?;
+        create_murmur3_hashes(&[dict_values], &mut dict_hashes)?;
+        for (hash, key) in 
hashes_buffer.iter_mut().zip(dict_array.keys().iter()) {
+            if let Some(key) = key {
+                let idx = key.to_usize().ok_or_else(|| {
+                    DataFusionError::Internal(format!(
+                        "Can not convert key value {:?} to usize in dictionary 
of type {:?}",
+                        key,
+                        dict_array.data_type()
+                    ))
+                })?;
+                *hash = dict_hashes[idx]
+            } // no update for Null, consistent with other hashes
+        }
+    }
+    Ok(())
+}
+
+// Hash the values in a dictionary array using xxhash64
+fn create_xxhash64_hashes_dictionary<K: ArrowDictionaryKeyType>(
+    array: &ArrayRef,
+    hashes_buffer: &mut [u64],
+    first_col: bool,
+) -> Result<()> {
+    let dict_array = 
array.as_any().downcast_ref::<DictionaryArray<K>>().unwrap();
+    if !first_col {
+        let unpacked = take(dict_array.values().as_ref(), dict_array.keys(), 
None)?;
+        create_xxhash64_hashes(&[unpacked], hashes_buffer)?;
+    } else {
+        // Hash each dictionary value once, and then use that computed
+        // hash for each key value to avoid a potentially expensive
+        // redundant hashing for large dictionary elements (e.g. strings)
+        let dict_values = Arc::clone(dict_array.values());
+        // same initial seed as Spark
+        let mut dict_hashes = vec![42u64; dict_values.len()];
+        create_xxhash64_hashes(&[dict_values], &mut dict_hashes)?;
+
         for (hash, key) in 
hashes_buffer.iter_mut().zip(dict_array.keys().iter()) {
             if let Some(key) = key {
                 let idx = key.to_usize().ok_or_else(|| {
@@ -244,111 +283,214 @@ fn create_hashes_dictionary<K: ArrowDictionaryKeyType>(
 ///
 /// The number of rows to hash is determined by `hashes_buffer.len()`.
 /// `hashes_buffer` should be pre-sized appropriately
-pub fn create_hashes<'a>(
-    arrays: &[ArrayRef],
-    hashes_buffer: &'a mut [u32],
-) -> Result<&'a mut [u32]> {
-    for (i, col) in arrays.iter().enumerate() {
-        let first_col = i == 0;
-        match col.data_type() {
-            DataType::Boolean => {
-                hash_array_boolean!(BooleanArray, col, i32, hashes_buffer);
-            }
-            DataType::Int8 => {
-                hash_array_primitive!(Int8Array, col, i32, hashes_buffer);
-            }
-            DataType::Int16 => {
-                hash_array_primitive!(Int16Array, col, i32, hashes_buffer);
-            }
-            DataType::Int32 => {
-                hash_array_primitive!(Int32Array, col, i32, hashes_buffer);
-            }
-            DataType::Int64 => {
-                hash_array_primitive!(Int64Array, col, i64, hashes_buffer);
-            }
-            DataType::Float32 => {
-                hash_array_primitive_float!(Float32Array, col, f32, i32, 
hashes_buffer);
-            }
-            DataType::Float64 => {
-                hash_array_primitive_float!(Float64Array, col, f64, i64, 
hashes_buffer);
-            }
-            DataType::Timestamp(TimeUnit::Second, _) => {
-                hash_array_primitive!(TimestampSecondArray, col, i64, 
hashes_buffer);
-            }
-            DataType::Timestamp(TimeUnit::Millisecond, _) => {
-                hash_array_primitive!(TimestampMillisecondArray, col, i64, 
hashes_buffer);
-            }
-            DataType::Timestamp(TimeUnit::Microsecond, _) => {
-                hash_array_primitive!(TimestampMicrosecondArray, col, i64, 
hashes_buffer);
-            }
-            DataType::Timestamp(TimeUnit::Nanosecond, _) => {
-                hash_array_primitive!(TimestampNanosecondArray, col, i64, 
hashes_buffer);
-            }
-            DataType::Date32 => {
-                hash_array_primitive!(Date32Array, col, i32, hashes_buffer);
-            }
-            DataType::Date64 => {
-                hash_array_primitive!(Date64Array, col, i64, hashes_buffer);
-            }
-            DataType::Utf8 => {
-                hash_array!(StringArray, col, hashes_buffer);
-            }
-            DataType::LargeUtf8 => {
-                hash_array!(LargeStringArray, col, hashes_buffer);
-            }
-            DataType::Binary => {
-                hash_array!(BinaryArray, col, hashes_buffer);
-            }
-            DataType::LargeBinary => {
-                hash_array!(LargeBinaryArray, col, hashes_buffer);
-            }
-            DataType::FixedSizeBinary(_) => {
-                hash_array!(FixedSizeBinaryArray, col, hashes_buffer);
-            }
-            DataType::Decimal128(_, _) => {
-                hash_array_decimal!(Decimal128Array, col, hashes_buffer);
-            }
-            DataType::Dictionary(index_type, _) => match **index_type {
+///
+/// `hash_method` is the hash function to use.
+/// `create_dictionary_hash_method` is the function to create hashes for 
dictionary arrays input.
+macro_rules! create_hashes_internal {
+    ($arrays: ident, $hashes_buffer: ident, $hash_method: ident, 
$create_dictionary_hash_method: ident) => {
+        for (i, col) in $arrays.iter().enumerate() {
+            let first_col = i == 0;
+            match col.data_type() {
+                DataType::Boolean => {
+                    hash_array_boolean!(BooleanArray, col, i32, 
$hashes_buffer, $hash_method);
+                }
                 DataType::Int8 => {
-                    create_hashes_dictionary::<Int8Type>(col, hashes_buffer, 
first_col)?;
+                    hash_array_primitive!(Int8Array, col, i32, $hashes_buffer, 
$hash_method);
                 }
                 DataType::Int16 => {
-                    create_hashes_dictionary::<Int16Type>(col, hashes_buffer, 
first_col)?;
+                    hash_array_primitive!(Int16Array, col, i32, 
$hashes_buffer, $hash_method);
                 }
                 DataType::Int32 => {
-                    create_hashes_dictionary::<Int32Type>(col, hashes_buffer, 
first_col)?;
+                    hash_array_primitive!(Int32Array, col, i32, 
$hashes_buffer, $hash_method);
                 }
                 DataType::Int64 => {
-                    create_hashes_dictionary::<Int64Type>(col, hashes_buffer, 
first_col)?;
+                    hash_array_primitive!(Int64Array, col, i64, 
$hashes_buffer, $hash_method);
                 }
-                DataType::UInt8 => {
-                    create_hashes_dictionary::<UInt8Type>(col, hashes_buffer, 
first_col)?;
+                DataType::Float32 => {
+                    hash_array_primitive_float!(
+                        Float32Array,
+                        col,
+                        f32,
+                        i32,
+                        $hashes_buffer,
+                        $hash_method
+                    );
                 }
-                DataType::UInt16 => {
-                    create_hashes_dictionary::<UInt16Type>(col, hashes_buffer, 
first_col)?;
+                DataType::Float64 => {
+                    hash_array_primitive_float!(
+                        Float64Array,
+                        col,
+                        f64,
+                        i64,
+                        $hashes_buffer,
+                        $hash_method
+                    );
                 }
-                DataType::UInt32 => {
-                    create_hashes_dictionary::<UInt32Type>(col, hashes_buffer, 
first_col)?;
+                DataType::Timestamp(TimeUnit::Second, _) => {
+                    hash_array_primitive!(
+                        TimestampSecondArray,
+                        col,
+                        i64,
+                        $hashes_buffer,
+                        $hash_method
+                    );
+                }
+                DataType::Timestamp(TimeUnit::Millisecond, _) => {
+                    hash_array_primitive!(
+                        TimestampMillisecondArray,
+                        col,
+                        i64,
+                        $hashes_buffer,
+                        $hash_method
+                    );
+                }
+                DataType::Timestamp(TimeUnit::Microsecond, _) => {
+                    hash_array_primitive!(
+                        TimestampMicrosecondArray,
+                        col,
+                        i64,
+                        $hashes_buffer,
+                        $hash_method
+                    );
+                }
+                DataType::Timestamp(TimeUnit::Nanosecond, _) => {
+                    hash_array_primitive!(
+                        TimestampNanosecondArray,
+                        col,
+                        i64,
+                        $hashes_buffer,
+                        $hash_method
+                    );
                 }
-                DataType::UInt64 => {
-                    create_hashes_dictionary::<UInt64Type>(col, hashes_buffer, 
first_col)?;
+                DataType::Date32 => {
+                    hash_array_primitive!(Date32Array, col, i32, 
$hashes_buffer, $hash_method);
                 }
+                DataType::Date64 => {
+                    hash_array_primitive!(Date64Array, col, i64, 
$hashes_buffer, $hash_method);
+                }
+                DataType::Utf8 => {
+                    hash_array!(StringArray, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::LargeUtf8 => {
+                    hash_array!(LargeStringArray, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::Binary => {
+                    hash_array!(BinaryArray, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::LargeBinary => {
+                    hash_array!(LargeBinaryArray, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::FixedSizeBinary(_) => {
+                    hash_array!(FixedSizeBinaryArray, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::Decimal128(_, _) => {
+                    hash_array_decimal!(Decimal128Array, col, $hashes_buffer, 
$hash_method);
+                }
+                DataType::Dictionary(index_type, _) => match **index_type {
+                    DataType::Int8 => {
+                        $create_dictionary_hash_method::<Int8Type>(col, 
$hashes_buffer, first_col)?;
+                    }
+                    DataType::Int16 => {
+                        $create_dictionary_hash_method::<Int16Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::Int32 => {
+                        $create_dictionary_hash_method::<Int32Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::Int64 => {
+                        $create_dictionary_hash_method::<Int64Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::UInt8 => {
+                        $create_dictionary_hash_method::<UInt8Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::UInt16 => {
+                        $create_dictionary_hash_method::<UInt16Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::UInt32 => {
+                        $create_dictionary_hash_method::<UInt32Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    DataType::UInt64 => {
+                        $create_dictionary_hash_method::<UInt64Type>(
+                            col,
+                            $hashes_buffer,
+                            first_col,
+                        )?;
+                    }
+                    _ => {
+                        return Err(DataFusionError::Internal(format!(
+                            "Unsupported dictionary type in hasher hashing: 
{}",
+                            col.data_type(),
+                        )))
+                    }
+                },
                 _ => {
+                    // This is internal because we should have caught this 
before.
                     return Err(DataFusionError::Internal(format!(
-                        "Unsupported dictionary type in hasher hashing: {}",
-                        col.data_type(),
-                    )))
+                        "Unsupported data type in hasher: {}",
+                        col.data_type()
+                    )));
                 }
-            },
-            _ => {
-                // This is internal because we should have caught this before.
-                return Err(DataFusionError::Internal(format!(
-                    "Unsupported data type in hasher: {}",
-                    col.data_type()
-                )));
             }
         }
-    }
+    };
+}
+
+/// Creates hash values for every row, based on the values in the
+/// columns.
+///
+/// The number of rows to hash is determined by `hashes_buffer.len()`.
+/// `hashes_buffer` should be pre-sized appropriately
+pub(crate) fn create_murmur3_hashes<'a>(
+    arrays: &[ArrayRef],
+    hashes_buffer: &'a mut [u32],
+) -> Result<&'a mut [u32]> {
+    create_hashes_internal!(
+        arrays,
+        hashes_buffer,
+        spark_compatible_murmur3_hash,
+        create_hashes_dictionary
+    );
+    Ok(hashes_buffer)
+}
+
+/// Creates xxhash64 hash values for every row, based on the values in the
+/// columns.
+///
+/// The number of rows to hash is determined by `hashes_buffer.len()`.
+/// `hashes_buffer` should be pre-sized appropriately
+pub(crate) fn create_xxhash64_hashes<'a>(
+    arrays: &[ArrayRef],
+    hashes_buffer: &'a mut [u64],
+) -> Result<&'a mut [u64]> {
+    create_hashes_internal!(
+        arrays,
+        hashes_buffer,
+        spark_compatible_xxhash64,
+        create_xxhash64_hashes_dictionary
+    );
     Ok(hashes_buffer)
 }
 
@@ -365,38 +507,61 @@ mod tests {
     use arrow::array::{Float32Array, Float64Array};
     use std::sync::Arc;
 
-    use crate::execution::datafusion::spark_hash::{create_hashes, pmod};
+    use crate::execution::datafusion::spark_hash::{
+        create_murmur3_hashes, create_xxhash64_hashes, pmod,
+    };
     use datafusion::arrow::array::{ArrayRef, Int32Array, Int64Array, 
Int8Array, StringArray};
 
     macro_rules! test_hashes_internal {
-        ($input: expr, $len: expr, $expected: expr) => {
-            let i = $input as ArrayRef;
-            let mut hashes = vec![42; $len];
-            create_hashes(&[i], &mut hashes).unwrap();
+        ($hash_method: ident, $input: expr, $initial_seeds: expr, $expected: 
expr) => {
+            let i = $input;
+            let mut hashes = $initial_seeds.clone();
+            $hash_method(&[i], &mut hashes).unwrap();
             assert_eq!(hashes, $expected);
         };
     }
 
+    macro_rules! test_hashes_with_nulls {
+        ($method: ident, $t: ty, $values: ident, $expected: ident, $seed_type: 
ty) => {
+            // copied before inserting nulls
+            let mut input_with_nulls = $values.clone();
+            let mut expected_with_nulls = $expected.clone();
+            // test before inserting nulls
+            let len = $values.len();
+            let initial_seeds = vec![42 as $seed_type; len];
+            let i = Arc::new(<$t>::from($values)) as ArrayRef;
+            test_hashes_internal!($method, i, initial_seeds, $expected);
+
+            // test with nulls
+            let median = len / 2;
+            input_with_nulls.insert(0, None);
+            input_with_nulls.insert(median, None);
+            expected_with_nulls.insert(0, 42 as $seed_type);
+            expected_with_nulls.insert(median, 42 as $seed_type);
+            let len_with_nulls = len + 2;
+            let initial_seeds_with_nulls = vec![42 as $seed_type; 
len_with_nulls];
+            let nullable_input = Arc::new(<$t>::from(input_with_nulls)) as 
ArrayRef;
+            test_hashes_internal!(
+                $method,
+                nullable_input,
+                initial_seeds_with_nulls,
+                expected_with_nulls
+            );
+        };
+    }
+
     fn test_murmur3_hash<I: Clone, T: arrow_array::Array + 
From<Vec<Option<I>>> + 'static>(
         values: Vec<Option<I>>,
         expected: Vec<u32>,
     ) {
-        // copied before inserting nulls
-        let mut input_with_nulls = values.clone();
-        let mut expected_with_nulls = expected.clone();
-        let len = values.len();
-        let i = Arc::new(T::from(values)) as ArrayRef;
-        test_hashes_internal!(i, len, expected);
-
-        // test with nulls
-        let median = len / 2;
-        input_with_nulls.insert(0, None);
-        input_with_nulls.insert(median, None);
-        expected_with_nulls.insert(0, 42);
-        expected_with_nulls.insert(median, 42);
-        let with_nulls_len = len + 2;
-        let nullable_input = Arc::new(T::from(input_with_nulls)) as ArrayRef;
-        test_hashes_internal!(nullable_input, with_nulls_len, 
expected_with_nulls);
+        test_hashes_with_nulls!(create_murmur3_hashes, T, values, expected, 
u32);
+    }
+
+    fn test_xxhash64_hash<I: Clone, T: arrow_array::Array + 
From<Vec<Option<I>>> + 'static>(
+        values: Vec<Option<I>>,
+        expected: Vec<u64>,
+    ) {
+        test_hashes_with_nulls!(create_xxhash64_hashes, T, values, expected, 
u64);
     }
 
     #[test]
@@ -405,6 +570,16 @@ mod tests {
             vec![Some(1), Some(0), Some(-1), Some(i8::MAX), Some(i8::MIN)],
             vec![0xdea578e3, 0x379fae8f, 0xa0590e3d, 0x43b4d8ed, 0x422a1365],
         );
+        test_xxhash64_hash::<i8, Int8Array>(
+            vec![Some(1), Some(0), Some(-1), Some(i8::MAX), Some(i8::MIN)],
+            vec![
+                0xa309b38455455929,
+                0x3229fbc4681e48f3,
+                0x1bfdda8861c06e45,
+                0x77cc15d9f9f2cdc2,
+                0x39bc22b9e94d81d0,
+            ],
+        );
     }
 
     #[test]
@@ -413,6 +588,16 @@ mod tests {
             vec![Some(1), Some(0), Some(-1), Some(i32::MAX), Some(i32::MIN)],
             vec![0xdea578e3, 0x379fae8f, 0xa0590e3d, 0x07fb67e7, 0x2b1f0fc6],
         );
+        test_xxhash64_hash::<i32, Int32Array>(
+            vec![Some(1), Some(0), Some(-1), Some(i32::MAX), Some(i32::MIN)],
+            vec![
+                0xa309b38455455929,
+                0x3229fbc4681e48f3,
+                0x1bfdda8861c06e45,
+                0x14f0ac009c21721c,
+                0x1cc7cb8d034769cd,
+            ],
+        );
     }
 
     #[test]
@@ -421,6 +606,16 @@ mod tests {
             vec![Some(1), Some(0), Some(-1), Some(i64::MAX), Some(i64::MIN)],
             vec![0x99f0149d, 0x9c67b85d, 0xc8008529, 0xa05b5d7b, 0xcd1e64fb],
         );
+        test_xxhash64_hash::<i64, Int64Array>(
+            vec![Some(1), Some(0), Some(-1), Some(i64::MAX), Some(i64::MIN)],
+            vec![
+                0x9ed50fd59358d232,
+                0xb71b47ebda15746c,
+                0x358ae035bfb46fd2,
+                0xd2f1c616ae7eb306,
+                0x88608019c494c1f4,
+            ],
+        );
     }
 
     #[test]
@@ -438,6 +633,24 @@ mod tests {
                 0xe434cc39, 0x379fae8f, 0x379fae8f, 0xdc0da8eb, 0xcbdc340f, 
0xc0361c86,
             ],
         );
+        test_xxhash64_hash::<f32, Float32Array>(
+            vec![
+                Some(1.0),
+                Some(0.0),
+                Some(-0.0),
+                Some(-1.0),
+                Some(99999999999.99999999999),
+                Some(-99999999999.99999999999),
+            ],
+            vec![
+                0x9b92689757fcdbd,
+                0x3229fbc4681e48f3,
+                0x3229fbc4681e48f3,
+                0xa2becc0e61bb3823,
+                0x8f20ab82d4f3687f,
+                0xdce4982d97f7ac4,
+            ],
+        )
     }
 
     #[test]
@@ -455,6 +668,25 @@ mod tests {
                 0xe4876492, 0x9c67b85d, 0x9c67b85d, 0x13d81357, 0xb87e1595, 
0xa0eef9f9,
             ],
         );
+
+        test_xxhash64_hash::<f64, Float64Array>(
+            vec![
+                Some(1.0),
+                Some(0.0),
+                Some(-0.0),
+                Some(-1.0),
+                Some(99999999999.99999999999),
+                Some(-99999999999.99999999999),
+            ],
+            vec![
+                0xe1fd6e07fee8ad53,
+                0xb71b47ebda15746c,
+                0xb71b47ebda15746c,
+                0x8cdde022746f8f1f,
+                0x793c5c88d313eac7,
+                0xc5e60e7b75d9b232,
+            ],
+        )
     }
 
     #[test]
@@ -470,7 +702,22 @@ mod tests {
             1322437556, 0xe860e5cc, 814637928,
         ];
 
-        test_murmur3_hash::<String, StringArray>(input, expected);
+        test_murmur3_hash::<String, StringArray>(input.clone(), expected);
+        test_xxhash64_hash::<String, StringArray>(
+            input,
+            vec![
+                0xc3629e6318d53932,
+                0xe7097b6a54378d8a,
+                0x98b1582b0977e704,
+                0xa80d9d5a6a523bd5,
+                0xfcba5f61ac666c61,
+                0x88e4fe59adf7b0cc,
+                0x259dd873209a3fe3,
+                0x13c1d910702770e6,
+                0xa17b5eb5dc364dff,
+                0xf241303e4a90f299,
+            ],
+        )
     }
 
     #[test]
diff --git a/docs/source/user-guide/expressions.md 
b/docs/source/user-guide/expressions.md
index 521699d3..775ebedb 100644
--- a/docs/source/user-guide/expressions.md
+++ b/docs/source/user-guide/expressions.md
@@ -71,6 +71,11 @@ The following Spark expressions are currently available:
   - Shiftright/Shiftleft
 - Date/Time functions
   - Year/Hour/Minute/Second
+- Hash functions
+  - Md5
+  - Sha2
+  - Hash
+  - Xxhash64
 - Math functions
   - Abs
   - Acos
diff --git a/spark/inspections/CometTPCDSQueriesList-results.txt 
b/spark/inspections/CometTPCDSQueriesList-results.txt
index 13f99a1a..cf1af9be 100644
--- a/spark/inspections/CometTPCDSQueriesList-results.txt
+++ b/spark/inspections/CometTPCDSQueriesList-results.txt
@@ -1,838 +1,941 @@
 Query: q1. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q1: ExplainInfo:
-ObjectHashAggregate is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q2. Comet Exec: Enabled (CometFilter, CometProject, CometUnion)
 Query: q2: ExplainInfo:
-ObjectHashAggregate is not supported
-xxhash64 is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
-Query: q3. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q3. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q3: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q4. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q4: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q5. Comet Exec: Enabled (CometFilter, CometProject, CometUnion)
 Query: q5: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q6. Comet Exec: Enabled (CometHashAggregate, CometFilter, CometProject)
+Query: q6. Comet Exec: Enabled (CometHashAggregate, CometBroadcastHashJoin, 
CometFilter, CometProject)
 Query: q6: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q8. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q8. Comet Exec: Enabled (CometHashAggregate, CometBroadcastHashJoin, 
CometFilter, CometProject)
 Query: q8: ExplainInfo:
-ObjectHashAggregate is not supported
-getstructfield is not supported
-xxhash64 is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q9. Comet Exec: Enabled (CometFilter)
 Query: q9: ExplainInfo:
-named_struct is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 getstructfield is not supported
 
 Query: q10. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q10: ExplainInfo:
-ObjectHashAggregate is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q11. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q11: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q12. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q12: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q13. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q13: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
-Query: q14a. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q14a. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q14a: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q14b. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q14b. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q14b: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q15. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q15: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q16. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q16: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q17. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q17: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q18. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q18: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q19. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q19. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q19: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q20. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q20: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q21. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q21: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q22. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q22: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q23a. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q23a: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 Union disabled because not all child plans are native
 
-Query: q23b. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q23b. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q23b: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q24a. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q24a: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q24b. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q24b: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q25. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q25: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q26. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q26: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q27. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q27: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q28. Comet Exec: Enabled (CometHashAggregate, CometFilter, CometProject)
 Query: q28: ExplainInfo:
-Unsupported aggregation mode PartialMerge
 BroadcastExchange is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
 Query: q29. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q29: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q30. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q30: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q31. Comet Exec: Enabled (CometFilter)
 Query: q31: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q32. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q32: ExplainInfo:
-ObjectHashAggregate is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q33. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q33: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q34. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q34: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
-Query: q35. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q35. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q35: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q36. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q36: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
-Query: q37. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q37. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q37: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q38. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q38: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q39a. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q39a: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q39b. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q39b: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q40. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q40: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q41. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q41. Comet Exec: Enabled (CometHashAggregate, CometFilter, CometProject)
 Query: q41: ExplainInfo:
-ObjectHashAggregate is not supported
-xxhash64 is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q42. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q42. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q42: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q43. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q43. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q43: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q44. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject, CometSort)
+Query: q44. Comet Exec: Enabled (CometHashAggregate, CometFilter, CometProject)
 Query: q44: ExplainInfo:
-Window is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q45. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q45: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q46. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q46: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q47. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q47. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q47: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q48. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q48: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
 Query: q49. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q49: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
+Window is not supported
 
 Query: q50. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q50: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q51. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q51: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
-Query: q52. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q52. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q52: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q53. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q53. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q53: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q54. Comet Exec: Enabled (CometFilter, CometProject, CometUnion)
 Query: q54: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q55. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q55. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q55: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q56. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q56: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q57. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q57. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q57: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q58. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q58: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q59. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q59: ExplainInfo:
-ObjectHashAggregate is not supported
-xxhash64 is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q60. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q60: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q61. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q61: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q62. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q62: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q63. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q63. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q63: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q64. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q64: ExplainInfo:
 BroadcastExchange is not supported
-ObjectHashAggregate is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q65. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q65: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q66. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q66: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q67. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q67: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q68. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q68: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q69. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q69. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q69: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q70. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q70. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q70: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q71. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q71: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 Union disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q72. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q72: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q73. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q73: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q74. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q74: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q75. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q75: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Union disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Union disabled because not all child plans are native
 
 Query: q76. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q76: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q77. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q77: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q78. Comet Exec: Enabled (CometFilter)
+Query: q78. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q78: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q79. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q79: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q80. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q80: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q81. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q81: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q82. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q82. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q82: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q83. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q83: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q84. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q84: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q85. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q85: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q86. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q86: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q87. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q87: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q88. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q88: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
-Query: q89. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q89. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q89: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q90. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q90: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
-Query: q91. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q91. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q91: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q92. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q92: ExplainInfo:
-ObjectHashAggregate is not supported
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q93. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q93: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q94. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q94: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
-Query: q95. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q95. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q95: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
 
 Query: q96. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q96: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
 Query: q97. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q97: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q98. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q98: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 Window is not supported
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q99. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q99: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q5a-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometUnion)
 Query: q5a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q6-v2.7. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
+Query: q6-v2.7. Comet Exec: Enabled (CometHashAggregate, 
CometBroadcastHashJoin, CometFilter, CometProject)
 Query: q6-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q10a-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q10a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q10a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Union disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Union disabled because not all child plans are native
 
 Query: q11-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q11-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q12-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q12-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
-Query: q14-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q14-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q14-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q14a-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q14a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q14a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-ObjectHashAggregate is not supported
-xxhash64 is not supported
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q18a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q18a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q20-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q20-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Window is not supported
 
 Query: q22-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q22-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Native Broadcast is not enabled
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q22a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q22a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q24-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q24-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q27a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q27a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q34-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q34-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
-Query: q35-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q35-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q35-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q35a-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q35a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q35a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Union disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Union disabled because not all child plans are native
 
 Query: q36a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q36a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 Window is not supported
 
-Query: q47-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q47-v2.7. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q47-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q49-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q49-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
+Window is not supported
 
 Query: q51a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q51a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
-Query: q57-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
+Query: q57-v2.7. Comet Exec: Enabled (CometBroadcastHashJoin, CometFilter, 
CometProject)
 Query: q57-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Window is not supported
 
 Query: q64-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q64-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-ObjectHashAggregate is not supported
-BroadcastHashJoin disabled because not all child plans are native
-xxhash64 is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q67a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q67a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 Window is not supported
 
-Query: q70a-v2.7. Comet Exec: Enabled (CometFilter, CometProject, CometSort)
+Query: q70a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q70a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Window is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
+Window is not supported
 
 Query: q72-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q72-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q74-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q74-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q75-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q75-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Union disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
+Union disabled because not all child plans are native
 
 Query: q77a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q77a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
-Query: q78-v2.7. Comet Exec: Enabled (CometFilter)
+Query: q78-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q78-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q80a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q80a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 
 Query: q86a-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q86a-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+TakeOrderedAndProject requires shuffle to be enabled
 Union disabled because not all child plans are native
 Window is not supported
 
 Query: q98-v2.7. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q98-v2.7: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 Window is not supported
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
diff --git a/spark/inspections/CometTPCHQueriesList-results.txt 
b/spark/inspections/CometTPCHQueriesList-results.txt
index b51286d8..ce896ba8 100644
--- a/spark/inspections/CometTPCHQueriesList-results.txt
+++ b/spark/inspections/CometTPCHQueriesList-results.txt
@@ -1,142 +1,135 @@
-Query: q1 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
+Query: q1 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometProject)
 Query: q1 TPCH Snappy: ExplainInfo:
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
 Query: q2 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q2 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
-xxhash64 is not supported
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q3 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject, 
CometSort)
+Query: q3 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q3 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q4 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q4 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
-Query: q5 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject, 
CometSort)
+Query: q5 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q5 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
-xxhash64 is not supported
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
 Query: q6 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
 Query: q6 TPCH Snappy: ExplainInfo:
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
-
-Query: q7 TPCH Snappy. Comet Exec: Enabled (CometFilter)
+Query: q7 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q7 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q8 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q8 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
-Query: q9 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject, 
CometSort)
+Query: q9 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q9 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
-Query: q10 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject, 
CometSort)
+Query: q10 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q10 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q11 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q11 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+ObjectHashAggregate is not supported
+SortMergeJoin disabled because not all child plans are native
 
 Query: q12 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q12 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q13 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q13 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q14 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q14 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q15 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
 Query: q15 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q16 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q16 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
-Query: q17 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject, CometSort)
+Query: q17 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
 Query: q17 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
 
 Query: q18 TPCH Snappy. Comet Exec: Enabled (CometHashAggregate, CometFilter, 
CometProject)
 Query: q18 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 SortMergeJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
 Query: q19 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q19 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q20 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q20 TPCH Snappy: ExplainInfo:
 BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 ObjectHashAggregate is not supported
 SortMergeJoin disabled because not all child plans are native
-xxhash64 is not supported
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
 
-Query: q21 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject, 
CometSort)
+Query: q21 TPCH Snappy. Comet Exec: Enabled (CometFilter, CometProject)
 Query: q21 TPCH Snappy: ExplainInfo:
+BroadcastExchange is not supported
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 ObjectHashAggregate is not supported
-Sort merge join with a join condition is not supported
-xxhash64 is not supported
 SortMergeJoin disabled because not all child plans are native
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
+TakeOrderedAndProject requires shuffle to be enabled
 
-Query: q22 TPCH Snappy. Comet Exec: Enabled (CometFilter)
+Query: q22 TPCH Snappy. Comet Exec: Enabled (CometProject)
 Query: q22 TPCH Snappy: ExplainInfo:
-BroadcastExchange is not supported
-BroadcastHashJoin disabled because not all child plans are native
-Shuffle: unsupported Spark partitioning: 
org.apache.spark.sql.catalyst.plans.physical.RangePartitioning
+Comet does not guarantee correct results for cast from DecimalType(12,2) to 
DecimalType(16,6) with timezone Some(America/Los_Angeles) and evalMode LEGACY. 
To enable all incompatible casts, set spark.comet.cast.allowIncompatible=true
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
+SortMergeJoin disabled because not all child plans are native
 
 Query: q1 TPCH Extended Snappy. Comet Exec: Enabled (CometHashAggregate, 
CometFilter, CometProject)
 Query: q1 TPCH Extended Snappy: ExplainInfo:
-
+Comet shuffle is not enabled: spark.sql.adaptive.coalescePartitions.enabled is 
enabled and spark.comet.shuffle.enforceMode.enabled is not enabled
 
diff --git a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala 
b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
index 06b9bc7f..fe60e9ba 100644
--- a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
+++ b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala
@@ -2090,6 +2090,21 @@ object QueryPlanSerde extends Logging with 
ShimQueryPlanSerde with CometExprShim
           // the seed is put at the end of the arguments
           scalarExprToProtoWithReturnType("murmur3_hash", IntegerType, exprs 
:+ seedExpr: _*)
 
+        case XxHash64(children, seed) =>
+          val firstUnSupportedInput = children.find(c => 
!supportedDataType(c.dataType))
+          if (firstUnSupportedInput.isDefined) {
+            withInfo(expr, s"Unsupported datatype 
${firstUnSupportedInput.get.dataType}")
+            return None
+          }
+          val exprs = children.map(exprToProtoInternal(_, inputs))
+          val seedBuilder = ExprOuterClass.Literal
+            .newBuilder()
+            .setDatatype(serializeDataType(LongType).get)
+            .setLongVal(seed)
+          val seedExpr = 
Some(ExprOuterClass.Expr.newBuilder().setLiteral(seedBuilder).build())
+          // the seed is put at the end of the arguments
+          scalarExprToProtoWithReturnType("xxhash64", LongType, exprs :+ 
seedExpr: _*)
+
         case Sha2(left, numBits) =>
           if (!numBits.foldable) {
             withInfo(expr, "non literal numBits is not supported")
diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala 
b/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
index 34c794eb..d418ec87 100644
--- a/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
@@ -1486,6 +1486,7 @@ class CometExpressionSuite extends CometTestBase with 
AdaptiveSparkPlanHelper {
               |select
               |md5(col), md5(cast(a as string)), md5(cast(b as string)),
               |hash(col), hash(col, 1), hash(col, 0), hash(col, a, b), hash(b, 
a, col),
+              |xxhash64(col), xxhash64(col, 1), xxhash64(col, 0), 
xxhash64(col, a, b), xxhash64(b, a, col),
               |sha2(col, 0), sha2(col, 256), sha2(col, 224), sha2(col, 384), 
sha2(col, 512), sha2(col, 128)
               |from test
               |""".stripMargin)
@@ -1508,14 +1509,13 @@ class CometExpressionSuite extends CometTestBase with 
AdaptiveSparkPlanHelper {
         val table = "test"
         withTable(table) {
           sql(s"create table $table(col string, a int, b float) using parquet")
-          // TODO: Add a Row generator in the data gen class and replace th 
following code
-          val col = dataGen.generateStrings(randomNumRows, timestampPattern, 6)
-          val colA = dataGen.generateInts(randomNumRows)
-          val colB = dataGen.generateFloats(randomNumRows)
-          val data = col.zip(colA).zip(colB).map { case ((a, b), c) => (a, b, 
c) }
-          data
-            .toDF("col", "a", "b")
-            .write
+          val tableSchema = spark.table(table).schema
+          val rows = dataGen.generateRows(
+            randomNumRows,
+            tableSchema,
+            Some(() => dataGen.generateString(timestampPattern, 6)))
+          val data = 
spark.createDataFrame(spark.sparkContext.parallelize(rows), tableSchema)
+          data.write
             .mode("append")
             .insertInto(table)
           // with random generated data
@@ -1524,6 +1524,7 @@ class CometExpressionSuite extends CometTestBase with 
AdaptiveSparkPlanHelper {
               |select
               |md5(col), md5(cast(a as string)), --md5(cast(b as string)),
               |hash(col), hash(col, 1), hash(col, 0), hash(col, a, b), hash(b, 
a, col),
+              |xxhash64(col), xxhash64(col, 1), xxhash64(col, 0), 
xxhash64(col, a, b), xxhash64(b, a, col),
               |sha2(col, 0), sha2(col, 256), sha2(col, 224), sha2(col, 384), 
sha2(col, 512), sha2(col, 128)
               |from test
               |""".stripMargin)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to