Error with empty text filter

I created a question in native query (for MongoDB). At a certain point, I calculate a new field "deadline".

Then I would like to filter on that field based on a variable in input, if provided. So basically I try to do this :

    {
        "$match" : {"deadline" : {{deadline}} }
    }

The {{deadline}} variable is of type "text". I cannot choose "Field Filter", because the field "deadline" was computed in the query, but it didn't exist in the original collection. The text filter is associated to a dropdown list, with a custom list of values : "On time", and "Overdue".

When the filter is filled in with one of the 2 possible values, everything works fine. But when I let the filter empty, I have the following error :
image

I think it's because when we use a text filter, it is interpreted as something like : "deadline $in : [ ] ", but since there's no value provided in input of the $in, the error occurs. Actually, I would expect that when the filter is let empty by the user, no filtering is done. This is the case when using the filter is of type Field Filter (but as already said, I cannot use such type of filter).

Is it a known issue ?
Is there any workaround for this ?

Here under I put the complete log :

[528a3ed5-bf8c-4874-aeba-b042746c13aa] 2023-09-20T16:32:29+02:00 ERROR metabase.query-processor.middleware.catch-exceptions Error processing query: Cannot run query: missing required parameters: #{"deadline"}
{:database_id 2,
 :started_at #t "2023-09-20T14:32:28.871400Z[GMT]",
 :error_type :invalid-query,
 :json_query
 {:database 2,
  :native
  {:query
   "[\n    {\n        \"$match\" : {{priority}}\n    },\n    {\n        \"$match\" : {{type}}\n    },\n    {\n        \"$project\" :{\n            \"_id\" : 0,\n            \"id\" : 1,\n            \"type\" : 1,\n            \"priority\" : 1,\n            \"creationDateTime\" : {\n                \"$dateTrunc\" : {\n                    \"date\" : \"$creationDateTime\",\n                    \"unit\" : \"day\"\n                }\n            },\n            \"completionDateTime\" : {\n                \"$dateTrunc\" : {\n                    \"date\" : \"$completionDateTime\",\n                    \"unit\" : \"day\"\n                }\n            }\n            \"dueDate\" : {\n                \"$ifNull\" : [\"$dueDate\", {\"$toDate\": \"29991231\"}]\n            }\n        }\n    },\n    {\n        \"$addFields\" : {\n            \"period\" : {        \n                \"$regexFindAll\": {\n                    \"input\": '{{dateStart}}',\n                    \"regex\": /(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z)/\n                }\n            }\n        }\n    },\n    {\n        \"$addFields\": {\n            \"lowerBound\" : { \n                \"$toDate\" : {\n                    \"$arrayElemAt\" : [\"$period.match\", 0] \n                }\n            },\n            \"upperBound\" : {\n                \"$toDate\" :{\n                    \"$arrayElemAt\" : [\"$period.match\", 1] \n                }\n            }\n        }\n    },\n    {\n        \"$match\" :{\n            \"$and\" :[\n                { \"$expr\": { \"$lte\": [\"$creationDateTime\", \"$upperBound\" ] } },\n                { \n                    \"$or\" :[\n                        { \"$expr\": { \"$eq\": [ {\"$ifNull\" : [\"$completionDateTime\", \"null\" ] }, \"null\" ] } },\n                        { \"$expr\": { \"$gte\": [\"$completionDateTime\", \"$lowerBound\" ] } },\n                    ]\n                }\n            ]\n        }\n    },\n    {\n        \"$addFields\" :{\n            \"range_length\": {\n                \"$dateDiff\": {\n                    \"startDate\": \"$lowerBound\",\n                    \"endDate\": \"$upperBound\",\n                    \"unit\": \"day\"\n                }\n            }\n        }\n    },\n    {\n        \"$addFields\" :{\n            \"days_to_add\": {\n                \"$range\": [0, \"$range_length\"]\n            }\n        }\n    },\n    {\n        \"$addFields\" :{\n            \"date\": {\n                \"$map\": {\n                    \"input\": \"$days_to_add\",\n                    \"as\": \"number\",\n                    \"in\": {\n                        \"$dateAdd\": {\n                            \"startDate\": \"$lowerBound\"\n                            \"unit\": \"day\",\n                            \"amount\": \"$$number\"\n                        }\n                    }\n                }\n            }\n        }\n    },\n    {\n        \"$unset\" :[\"days_to_add\", \"range_length\", \"lowerBound\", \"upperBound\", \"period\"]\n    },\n    {\n        \"$unwind\" : {\n            \"path\": \"$date\"\n        }\n    },\n    {\n        \"$addFields\" :{\n            \"status\": {\n                \"$cond\": [\n                    {\n                        \"$and\": [\n                            {\"$lte\": [\"$creationDateTime\", \"$date\"]},\n                            {\n                                \"$or\" :[\n                                    { \"$eq\": [ {\"$ifNull\" : [\"$completionDateTime\", \"null\" ] }, \"null\" ] },\n                                    { \"$gt\": [\"$completionDateTime\", \"$date\"]}\n                                ]\n                            }\n                        ]\n                    },\n                    \"ACTIVE\",\n                    \"INACTIVE\"\n                ]\n            },\n        }\n    },\n    {\n        \"$addFields\" :{\n            \"deadline\" :{\n                \"$cond\": [\n                    {\"$eq\": [\"$status\", \"ACTIVE\"]},\n                    {\n                        \"$cond\" : [\n                            {\"$gte\": [\"$dueDate\", \"$date\"]},\n                            \"On time\",\n                            \"Overdue\"\n                        ]\n                    },\n                    \"\"\n                ]                \n            }\n        }\n    },\n    {\n        \"$match\" : {\"status\" : \"ACTIVE\"}\n    },\n\n    {\n        \"$match\" : {\"deadline\" : {{deadline}} }\n    }\n\n\n]\n",
   :template-tags
   {:priority
    {:id "0d7a384e-48e5-6dc0-997e-2140702deed3",
     :name "priority",
     :display-name "Priority",
     :type "dimension",
     :dimension ["field" 266408 nil],
     :widget-type "string/="},
    :type
    {:id "533f06fc-428f-2f80-6932-9d69f44119f2",
     :name "type",
     :display-name "Type",
     :type "dimension",
     :dimension ["field" 266402 nil],
     :widget-type "string/="},
    :dateStart
    {:id "0a531779-6cae-ed1a-f774-06a9ff8f4bc1",
     :name "dateStart",
     :display-name "Datestart",
     :type "dimension",
     :dimension ["field" 266409 nil],
     :widget-type "date/all-options",
     :required true,
     :default "past30days"},
    :deadline {:id "c985dea1-a8bd-671b-05f7-876adf62fba5", :name "deadline", :display-name "Deadline", :type "text"}},
   :collection "tasks_raw"},
  :type "native",
  :parameters
  [{:id "0a531779-6cae-ed1a-f774-06a9ff8f4bc1",
    :type "date/all-options",
    :value "past30days",
    :target ["dimension" ["template-tag" "dateStart"]]}],
  :middleware {:js-int-to-string? true, :add-default-userland-constraints? true}},
 :status :failed,
 :class clojure.lang.ExceptionInfo,
 :stacktrace
 ["--> driver.mongo.parameters$substitute.invokeStatic(parameters.clj:204)"
  "driver.mongo.parameters$substitute.invoke(parameters.clj:201)"
  "driver.mongo.parameters$parse_and_substitute.invokeStatic(parameters.clj:212)"
  "driver.mongo.parameters$parse_and_substitute.invoke(parameters.clj:209)"
  "driver.mongo.parameters$substitute_native_parameters.invokeStatic(parameters.clj:220)"
  "driver.mongo.parameters$substitute_native_parameters.invoke(parameters.clj:216)"
  "driver.mongo$fn__120785.invokeStatic(mongo.clj:317)"
  "driver.mongo$fn__120785.invoke(mongo.clj:315)"
  "query_processor.middleware.parameters.native$expand_inner.invokeStatic(native.clj:40)"
  "query_processor.middleware.parameters.native$expand_inner.invoke(native.clj:31)"
  "query_processor.middleware.parameters$expand_one.invokeStatic(parameters.clj:50)"
  "query_processor.middleware.parameters$expand_one.invoke(parameters.clj:41)"
  "query_processor.middleware.parameters$expand_all$replace_66990__66991.invoke(parameters.clj:59)"
  "mbql.util.match.impl$replace_in_collection$iter__27031__27035$fn__27036.invoke(impl.cljc:44)"
  "mbql.util.match.impl$replace_in_collection.invokeStatic(impl.cljc:43)"
  "mbql.util.match.impl$replace_in_collection.invoke(impl.cljc:38)"
  "query_processor.middleware.parameters$expand_all$replace_66990__66991.invoke(parameters.clj:59)"
  "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:59)"
  "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
  "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:56)"
  "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
  "query_processor.middleware.parameters$expand_parameters.invokeStatic(parameters.clj:77)"
  "query_processor.middleware.parameters$expand_parameters.invoke(parameters.clj:73)"
  "query_processor.middleware.parameters$fn__67007$substitute_parameters_STAR___67012$fn__67013.invoke(parameters.clj:82)"
  "query_processor.middleware.parameters$fn__67007$substitute_parameters_STAR___67012.invoke(parameters.clj:79)"
  "query_processor.middleware.parameters$substitute_parameters.invokeStatic(parameters.clj:109)"
  "query_processor.middleware.parameters$substitute_parameters.invoke(parameters.clj:101)"
  "query_processor$preprocess_STAR_$fn__70750.invoke(query_processor.clj:158)"
  "query_processor$preprocess_STAR_.invokeStatic(query_processor.clj:156)"
  "query_processor$preprocess_STAR_.invoke(query_processor.clj:151)"
  "query_processor$fn__70758$combined_pre_process__70759$combined_pre_process_STAR___70760.invoke(query_processor.clj:240)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__69150$fn__69155.invoke(resolve_database_and_driver.clj:36)"
  "driver$do_with_driver.invokeStatic(driver.clj:92)"
  "driver$do_with_driver.invoke(driver.clj:88)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__69150.invoke(resolve_database_and_driver.clj:35)"
  "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__65021.invoke(fetch_source_query.clj:316)"
  "query_processor.middleware.store$initialize_store$fn__65199$fn__65200.invoke(store.clj:12)"
  "query_processor.store$do_with_store.invokeStatic(store.clj:47)"
  "query_processor.store$do_with_store.invoke(store.clj:41)"
  "query_processor.middleware.store$initialize_store$fn__65199.invoke(store.clj:11)"
  "query_processor.middleware.normalize_query$normalize$fn__69439.invoke(normalize_query.clj:25)"
  "query_processor.middleware.constraints$add_default_userland_constraints$fn__66377.invoke(constraints.clj:54)"
  "query_processor.middleware.process_userland_query$process_userland_query$fn__69375.invoke(process_userland_query.clj:151)"
  "query_processor.middleware.catch_exceptions$catch_exceptions$fn__69752.invoke(catch_exceptions.clj:171)"
  "query_processor.reducible$async_qp$qp_STAR___59520$thunk__59522.invoke(reducible.clj:103)"
  "query_processor.reducible$async_qp$qp_STAR___59520.invoke(reducible.clj:109)"
  "query_processor.reducible$async_qp$qp_STAR___59520.invoke(reducible.clj:94)"
  "query_processor.reducible$sync_qp$qp_STAR___59532.doInvoke(reducible.clj:129)"
  "query_processor$process_userland_query.invokeStatic(query_processor.clj:366)"
  "query_processor$process_userland_query.doInvoke(query_processor.clj:362)"
  "query_processor$fn__70807$process_query_and_save_execution_BANG___70816$fn__70819.invoke(query_processor.clj:377)"
  "query_processor$fn__70807$process_query_and_save_execution_BANG___70816.invoke(query_processor.clj:370)"
  "query_processor$fn__70852$process_query_and_save_with_max_results_constraints_BANG___70861$fn__70864.invoke(query_processor.clj:389)"
  "query_processor$fn__70852$process_query_and_save_with_max_results_constraints_BANG___70861.invoke(query_processor.clj:382)"
  "api.dataset$run_query_async$fn__86959.invoke(dataset.clj:73)"
  "query_processor.streaming$streaming_response_STAR_$fn__54383$fn__54384.invoke(streaming.clj:166)"
  "query_processor.streaming$streaming_response_STAR_$fn__54383.invoke(streaming.clj:165)"
  "async.streaming_response$do_f_STAR_.invokeStatic(streaming_response.clj:69)"
  "async.streaming_response$do_f_STAR_.invoke(streaming_response.clj:67)"
  "async.streaming_response$do_f_async$task__36968.invoke(streaming_response.clj:88)"],
 :card_id nil,
 :context :ad-hoc,
 :error "Cannot run query: missing required parameters: #{\"deadline\"}",
 :row_count 0,
 :running_time 0,
 :ex-data {:type :invalid-query},
 :data {:rows [], :cols []}}

mmm, unfortunately that can't be done, as normal filters will populate if there's a value and stay empty when there's none :frowning: