From 81781ff27a1f5a01a5dc875848cf11d22f265689 Mon Sep 17 00:00:00 2001 From: Marko Grujic Date: Fri, 26 Jan 2024 12:27:17 +0100 Subject: [PATCH] Safeguard against potential inexact row count being smaller than exact null count --- datafusion/physical-plan/src/joins/utils.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/datafusion/physical-plan/src/joins/utils.rs b/datafusion/physical-plan/src/joins/utils.rs index 6ab08d3db022..9b65496187a5 100644 --- a/datafusion/physical-plan/src/joins/utils.rs +++ b/datafusion/physical-plan/src/joins/utils.rs @@ -955,7 +955,12 @@ fn max_distinct_count( let result = match num_rows { Precision::Absent => Precision::Absent, Precision::Inexact(count) => { - Precision::Inexact(count - stats.null_count.get_value().unwrap_or(&0)) + // To safeguard against inexact number of rows (e.g. 0) being smaller than + // an exact null count we need to do a checked subtraction. + match count.checked_sub(*stats.null_count.get_value().unwrap_or(&0)) { + None => Precision::Inexact(0), + Some(non_null_count) => Precision::Inexact(non_null_count), + } } Precision::Exact(count) => { let count = count - stats.null_count.get_value().unwrap_or(&0);