diff --git a/lib/ash/query/boolean_expression.ex b/lib/ash/query/boolean_expression.ex index 5fbcf48b..eb572d6f 100644 --- a/lib/ash/query/boolean_expression.ex +++ b/lib/ash/query/boolean_expression.ex @@ -7,11 +7,11 @@ defmodule Ash.Query.BooleanExpression do alias Ash.Query.Operator.{Eq, In, NotEq} alias Ash.Query.Ref - def new(_, nil, nil), do: nil + def new(_, nil, nil), do: false def new(:or, left, nil), do: left def new(:or, nil, right), do: right - def new(:and, _, nil), do: nil - def new(:and, nil, _), do: nil + def new(:and, _, nil), do: false + def new(:and, nil, _), do: false def new(op, left, right) do %__MODULE__{op: op, left: left, right: right} @@ -24,17 +24,17 @@ defmodule Ash.Query.BooleanExpression do # statements where possible, which helps with authorization logic that leverages the query # For example, `x in [1, 2] or x == 3` becomes `x in [1, 2, 3]`, and `x in [1, 2, 3] and x != 1` # becomes `x in [2, 3]` - def optimized_new(_, nil, nil), do: nil + def optimized_new(_, nil, nil), do: false def optimized_new(:and, false, _), do: false def optimized_new(:and, _, false), do: false + def optimized_new(:and, nil, _), do: false + def optimized_new(:and, _, nil), do: false + def optimized_new(:and, true, right), do: right + def optimized_new(:and, left, true), do: left def optimized_new(:or, true, _), do: true def optimized_new(:or, _, true), do: true def optimized_new(:or, nil, right), do: right def optimized_new(:or, left, nil), do: left - def optimized_new(:and, true, right), do: right - def optimized_new(:and, left, true), do: left - def optimized_new(:and, nil, _), do: nil - def optimized_new(:and, _, nil), do: nil def optimized_new( op,