fix: fix nested boolean expression optimization

This commit is contained in:
Zach Daniel 2021-02-26 15:11:14 -05:00
parent 9c685feeda
commit 2f8074ff88
2 changed files with 11 additions and 7 deletions

View file

@ -720,6 +720,9 @@ defmodule Ash.Engine.Request do
request.changeset.data
|> Map.take(pkey)
|> Map.to_list()
|> IO.inspect()
IO.inspect(filter)
new_query =
request.resource
@ -728,6 +731,7 @@ defmodule Ash.Engine.Request do
|> Ash.Query.filter(^pkey)
|> Ash.Query.filter(^filter)
|> Ash.Query.limit(1)
|> IO.inspect()
new_query
|> Ash.Actions.Read.unpaginated_read()

View file

@ -123,10 +123,10 @@ defmodule Ash.Query.BooleanExpression do
if MapSet.member?(mapset, value) do
left_expr
else
do_new(:or, left_expr, right)
do_new(:and, left_expr, right)
end
else
do_new(:or, left_expr, right)
do_new(:and, left_expr, right)
end
end
@ -139,7 +139,7 @@ defmodule Ash.Query.BooleanExpression do
if can_optimize?(value) do
%{right_expr | right: MapSet.delete(mapset, value)}
else
do_new(:or, left_op, right_expr)
do_new(:and, left_op, right_expr)
end
end
@ -232,10 +232,10 @@ defmodule Ash.Query.BooleanExpression do
do_new(op, left_expr, in_op)
else
{:left, _} ->
%{left_expr | left: optimized_new(:or, left, in_op)}
%{left_expr | left: optimized_new(op, left, in_op)}
{:right, _} ->
%{left_expr | right: optimized_new(:or, right, in_op)}
%{left_expr | right: optimized_new(op, right, in_op)}
end
%Eq{} = eq_op ->
@ -244,10 +244,10 @@ defmodule Ash.Query.BooleanExpression do
do_new(op, left_expr, eq_op)
else
{:left, _} ->
%{left_expr | left: optimized_new(:or, left, eq_op)}
%{left_expr | left: optimized_new(op, left, eq_op)}
{:right, _} ->
%{left_expr | right: optimized_new(:or, right, eq_op)}
%{left_expr | right: optimized_new(op, right, eq_op)}
end
_ ->