From 801445b1e1c710ed3862b89c544db40d0d0d9625 Mon Sep 17 00:00:00 2001
From: Alexander Solovyov <alexander@solovyov.net>
Date: Tue, 16 Apr 2024 13:21:49 +0300
Subject: [PATCH] global setting to enable/disable native sql parsing (#41315)

---
 src/metabase/native_query_analyzer.clj       |  8 +++++---
 src/metabase/public_settings.clj             |  7 +++++++
 test/metabase/native_query_analyzer_test.clj | 17 +++++++++++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 test/metabase/native_query_analyzer_test.clj

diff --git a/src/metabase/native_query_analyzer.clj b/src/metabase/native_query_analyzer.clj
index 94bd457965a..be0bd201ded 100644
--- a/src/metabase/native_query_analyzer.clj
+++ b/src/metabase/native_query_analyzer.clj
@@ -10,6 +10,7 @@
    [macaw.core :as mac]
    [metabase.config :as config]
    [metabase.native-query-analyzer.parameter-substitution :as nqa.sub]
+   [metabase.public-settings :as public-settings]
    [metabase.util :as u]
    [metabase.util.log :as log]
    [toucan2.core :as t2]))
@@ -24,10 +25,11 @@
 (defn- active?
   "Should the query run? Either we're not testing or it's been explicitly turned on.
 
-  c.f. [[*parse-queries-in-test?*]]"
+  c.f. [[*parse-queries-in-test?*]], [[public-settings/sql-parsing-enabled]]"
   []
-  (or (not config/is-test?)
-      *parse-queries-in-test?*))
+  (and (public-settings/sql-parsing-enabled)
+       (or (not config/is-test?)
+           *parse-queries-in-test?*)))
 
 (defn- normalize-name
   ;; TODO: This is wildly naive and will be revisited once the rest of the plumbing is sorted out
diff --git a/src/metabase/public_settings.clj b/src/metabase/public_settings.clj
index b9643120ef0..15731f1b9bd 100644
--- a/src/metabase/public_settings.clj
+++ b/src/metabase/public_settings.clj
@@ -859,3 +859,10 @@
                   (when (and id (t2/exists? :model/Dashboard :id id :archived false))
                     id)))
   :doc        false)
+
+(defsetting sql-parsing-enabled
+  (deferred-tru "SQL Parsing is disabled")
+  :visibility :internal
+  :export?    false
+  :default    true
+  :type       :boolean)
diff --git a/test/metabase/native_query_analyzer_test.clj b/test/metabase/native_query_analyzer_test.clj
new file mode 100644
index 00000000000..be19fda8df1
--- /dev/null
+++ b/test/metabase/native_query_analyzer_test.clj
@@ -0,0 +1,17 @@
+(ns metabase.native-query-analyzer-test
+  (:require
+   [clojure.test :refer :all]
+   [metabase.native-query-analyzer :as query-analyzer]
+   [metabase.public-settings :as public-settings]
+   [metabase.test :as mt]))
+
+(deftest active-test
+  (mt/discard-setting-changes [sql-parsing-enabled]
+    (testing "sql parsing enabled"
+      (public-settings/sql-parsing-enabled! true)
+      (binding [query-analyzer/*parse-queries-in-test?* true]
+        (is (true? (#'query-analyzer/active?)))))
+    (testing "sql parsing disabled"
+      (public-settings/sql-parsing-enabled! false)
+      (binding [query-analyzer/*parse-queries-in-test?* true]
+        (is (false? (#'query-analyzer/active?)))))))
-- 
GitLab