From 6a5efe5e7bacc5ed25824653ddd740e42900f04e Mon Sep 17 00:00:00 2001 From: Tim Macdonald <tim@metabase.com> Date: Mon, 29 Apr 2024 15:40:57 +0100 Subject: [PATCH] Native Query Analyzer cleanup (#41950) * Missing sentence for NQA documentation * Add a test for optional field filter parsing --- src/metabase/native_query_analyzer.clj | 3 ++- .../native_query_analyzer/parameter_substitution_test.clj | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/metabase/native_query_analyzer.clj b/src/metabase/native_query_analyzer.clj index dd0c93d3de6..b455a34bb09 100644 --- a/src/metabase/native_query_analyzer.clj +++ b/src/metabase/native_query_analyzer.clj @@ -6,7 +6,8 @@ 2. Contain Metabase-specific business logic. The primary way of interacting with parsed queries is through their associated QueryFields (see model - file). QueryFields are maintained through the `update-query-fields-for-card!` function. + file). QueryFields are maintained through the `update-query-fields-for-card!` function. This is invoked as part of + the lifecycle of a card (see Card model). Query rewriting happens with the `replace-names` function." (:require diff --git a/test/metabase/native_query_analyzer/parameter_substitution_test.clj b/test/metabase/native_query_analyzer/parameter_substitution_test.clj index 3bc1d365fe8..b584f977ca9 100644 --- a/test/metabase/native_query_analyzer/parameter_substitution_test.clj +++ b/test/metabase/native_query_analyzer/parameter_substitution_test.clj @@ -166,6 +166,11 @@ (->sql (mt/native-query {:template-tags (tags "num_between") :query "SELECT * FROM orders WHERE {{num_between}}"}))))) +(deftest optional-field-filter-test + (is (= "SELECT * FROM orders WHERE \"PUBLIC\".\"ORDERS\".\"TOTAL\" BETWEEN 1 AND 2 AND (\"PUBLIC\".\"ORDERS\".\"TOTAL\" = 1)" + (->sql (mt/native-query {:template-tags (tags "num_between" "num_eq") + :query "SELECT * FROM orders WHERE {{num_between}} [[AND {{num_eq}}]]"}))))) + (deftest field-filter-string-test (is (= "SELECT * FROM people WHERE ((\"PUBLIC\".\"PEOPLE\".\"NAME\" <> ?) OR (\"PUBLIC\".\"PEOPLE\".\"NAME\" IS NULL))" (->sql (mt/native-query {:template-tags (tags "str_not_eq") -- GitLab