improvement: simpler and/or short circuiting

This commit is contained in:
Zach Daniel 2024-07-12 19:17:27 -04:00
parent cafacee02b
commit 67044646c1

View file

@ -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,