diff --git a/src/metabase/native_query_analyzer.clj b/src/metabase/native_query_analyzer.clj index dd0c93d3de69a1818dde89d63992e8a72054f8c3..b455a34bb0905dd06c5c88860f40868c784f1e16 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 3bc1d365fe84ba006d4fad9edcc47800bef79508..b584f977ca937126b5ea9bb4710994101e31c319 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")