Skip to content

Commit

Permalink
fix: ensure today has properly configured returns type
Browse files Browse the repository at this point in the history
  • Loading branch information
zachdaniel committed Jul 14, 2024
1 parent 2c37e71 commit 84d76b3
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 deletions.
16 changes: 11 additions & 5 deletions lib/ash/expr/expr.ex
Original file line number Diff line number Diff line change
Expand Up @@ -825,17 +825,23 @@ defmodule Ash.Expr do

def do_expr(other, _), do: other

def determine_types(Ash.Query.Function.Type, [_, type]) do
def determine_types(mod, args, returns \\ :any)

def determine_types(Ash.Query.Function.Type, [_, type], _returns) do
{type, []}
end

def determine_types(Ash.Query.Function.Type, [_, type, constraints]) do
def determine_types(Ash.Query.Function.Type, [_, type, constraints], _returns) do
{type, constraints}
end

def determine_types(mod, values) do
def determine_types(mod, values, returns) do
Code.ensure_compiled(mod)

basis = if returns && returns != [:any, :same, {:array, :any}, {:array, :same}] do
returns
end

name =
cond do
function_exported?(mod, :operator, 0) ->
Expand Down Expand Up @@ -895,7 +901,7 @@ defmodule Ash.Expr do

types_and_values
|> Enum.with_index()
|> Enum.reduce_while(%{must_adopt_basis: [], basis: nil, types: [], fallback_basis: nil}, fn
|> Enum.reduce_while(%{must_adopt_basis: [], basis: basis, types: [], fallback_basis: nil}, fn
{{vague_type, value}, index}, acc when vague_type in [:any, :same] ->
case determine_type(value) do
{:ok, {type, constraints}} ->
Expand Down Expand Up @@ -1052,7 +1058,7 @@ defmodule Ash.Expr do
end)
end

defp determine_type(value) do
def determine_type(value) do
case value do
%{__struct__: Ash.Query.Function.Type, arguments: [_, type, constraints]} ->
if Ash.Type.ash_type?(type) do
Expand Down
2 changes: 1 addition & 1 deletion lib/ash/query/function/today.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ defmodule Ash.Query.Function.Today do

def args, do: [[]]

def returns, do: :date
def returns, do: [:date]

def evaluate(_), do: {:known, Date.utc_today()}

Expand Down
3 changes: 2 additions & 1 deletion lib/ash/query/operator/eq.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ defmodule Ash.Query.Operator.Eq do
operator: :==,
name: :eq,
predicate?: true,
types: [:same, :any]
types: [:any, :same],
returns: [:boolean]

def new(left, right) do
{:ok, struct(__MODULE__, left: left, right: right)}
Expand Down

0 comments on commit 84d76b3

Please sign in to comment.