Кажется, что сопоставление со всеми, если переменная равна нулю, является поведением по умолчанию, если используется _eq
boolExp. Я не видел этого, потому что этот запрос использовал _in
.
Переход к этому дает все элементы, если $ setId передается как null
:
query getUsers ($setId: Int) {
user(where: { user_sets: { set_id: { _eq: $setId } } }) {
id
name
status
user_sets {
set {
name
}
}
# more fields...
}
}
Это потому, что Hasura следует SQL, имея null
, не сопоставимую ни с чем (только _is_null
может совпадать со значениями, которые установлены как пустые в обнуляемых столбцах).
Следовательно, { _eq: null }
логически не может ничего сопоставить, поэтому он просто оптимизирован. Это:
(where: { user_sets: { set_id: { _eq: $setId } } })
... становится таким:
(where: { user_sets: { set_id: {} } }
... и поскольку {}
равно trueExp
, считая его истинным, оно оптимизируется, чтобы быть эффективным WHERE 'true'
.