From 5cf8bf83495fcde34029a2dc49b454f9610d0231 Mon Sep 17 00:00:00 2001
From: metamben <103100869+metamben@users.noreply.github.com>
Date: Tue, 26 Jul 2022 23:29:03 +0300
Subject: [PATCH] Preserve false as default value in case clauses (#24274)

This change makes sure that false as the default value in a case statement is not ignored.
---
 src/metabase/driver/sql/query_processor.clj       |  2 +-
 test/metabase/driver/sql/query_processor_test.clj | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/metabase/driver/sql/query_processor.clj b/src/metabase/driver/sql/query_processor.clj
index 65363499810..a05365a748b 100644
--- a/src/metabase/driver/sql/query_processor.clj
+++ b/src/metabase/driver/sql/query_processor.clj
@@ -518,7 +518,7 @@
 (defmethod ->honeysql [:sql :case]
   [driver [_ cases options]]
   (->> (concat cases
-               (when (:default options)
+               (when (some? (:default options))
                  [[:else (:default options)]]))
        (apply concat)
        (mapv (partial ->honeysql driver))
diff --git a/test/metabase/driver/sql/query_processor_test.clj b/test/metabase/driver/sql/query_processor_test.clj
index 3b35833b2e5..17cf559a156 100644
--- a/test/metabase/driver/sql/query_processor_test.clj
+++ b/test/metabase/driver/sql/query_processor_test.clj
@@ -67,6 +67,19 @@
              mbql->native
              sql.qp-test-util/sql->sql-map))))
 
+(deftest case-test
+  (testing "Test that boolean case defaults are kept (#24100)"
+    (is (= [[1 1 true]
+            [2 0 false]]
+           (mt/rows
+            (mt/run-mbql-query venues
+              {:source-table $$venues
+               :order-by     [[:asc $id]]
+               :expressions  {"First int"  [:case [[[:= $id 1] 1]]    {:default 0}]
+                              "First bool" [:case [[[:= $id 1] true]] {:default false}]}
+               :fields       [$id [:expression "First int" nil] [:expression "First bool" nil]]
+               :limit        2}))))))
+
 (deftest join-test
   (testing "Test that correct identifiers are used for joins"
     (is (= '{:select    [VENUES.ID          AS ID
-- 
GitLab