vikrantmehta123 commented on code in PR #27064:
URL: https://github.com/apache/datafusion/pull/27064#discussion_r4535376653


##########
datafusion/functions-aggregate/src/approx_distinct.rs:
##########
@@ -913,75 +926,69 @@ fn is_fixed_domain_type(data_type: &DataType) -> bool {
     )
 }
 
+/// Returns true if `approx_distinct` can run on this data type
 fn is_supported_type(data_type: &DataType) -> bool {
-    let value_type = encoded_value_type(data_type);
-    matches!(value_type, DataType::Null)
-        || is_fixed_domain_type(value_type)
-        || is_hll_groups_type(value_type)
-}
+    if has_float_leaf(data_type) {
+        return false;
+    }
 
-fn encoded_value_type(data_type: &DataType) -> &DataType {
-    let mut value_type = data_type;
-    loop {
-        match value_type {
-            DataType::Dictionary(_, inner) => value_type = inner,
-            DataType::RunEndEncoded(_, values) => value_type = 
values.data_type(),
-            _ => return value_type,
-        }
+    match data_type {
+        DataType::Dictionary(_, values) => is_supported_type(values),
+        DataType::RunEndEncoded(_, values) => 
is_supported_type(values.data_type()),
+        DataType::Null
+        | DataType::Boolean
+        | DataType::UInt8
+        | DataType::Int8
+        | DataType::UInt16
+        | DataType::Int16
+        | DataType::UInt32
+        | DataType::UInt64
+        | DataType::Int32
+        | DataType::Int64
+        | DataType::Date32
+        | DataType::Date64
+        | DataType::Time32(TimeUnit::Second)
+        | DataType::Time32(TimeUnit::Millisecond)
+        | DataType::Time64(TimeUnit::Microsecond)
+        | DataType::Time64(TimeUnit::Nanosecond)
+        | DataType::Timestamp(TimeUnit::Second, _)
+        | DataType::Timestamp(TimeUnit::Millisecond, _)
+        | DataType::Timestamp(TimeUnit::Microsecond, _)
+        | DataType::Timestamp(TimeUnit::Nanosecond, _)
+        | DataType::Interval(IntervalUnit::YearMonth)
+        | DataType::Interval(IntervalUnit::DayTime)
+        | DataType::Interval(IntervalUnit::MonthDayNano)
+        | DataType::Decimal32(_, _)
+        | DataType::Decimal64(_, _)
+        | DataType::Decimal128(_, _)
+        | DataType::Decimal256(_, _)
+        | DataType::Duration(_)
+        | DataType::Utf8
+        | DataType::LargeUtf8
+        | DataType::Utf8View
+        | DataType::Binary
+        | DataType::BinaryView
+        | DataType::FixedSizeBinary(_)
+        | DataType::LargeBinary
+        | DataType::List(_)
+        | DataType::LargeList(_)
+        | DataType::FixedSizeList(_, _)
+        | DataType::ListView(_)
+        | DataType::LargeListView(_)
+        | DataType::Map(_, _)
+        | DataType::Struct(_)
+        | DataType::Union(_, _) => true,
+        _ => false,
     }
 }
 
 /// Returns true for the data types backed by the HyperLogLog
 /// [`HllGroupsAccumulator`]. The fixed-domain types (booleans / small ints) 
and
 /// `Null` fall back to the per-group [`Accumulator`] path.
 fn is_hll_groups_type(data_type: &DataType) -> bool {
-    if matches!(

Review Comment:
   Any specific reason for doing this change? I felt that since the check is 
already present in the is_supported_type method we don't need to duplicate it 
here. And also, I felt that when reading the code, the reader would have to pay 
extra attention to realize that the list in is_supported_type is different than 
the list in is_hll_groups_type. Here, by reusing the check, we make it a bit 
more explicit.
   
   Please suggest if I still need to make the change.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to