Skip to content

Commit a9aa81b

Browse files
committed
fix: properly type cast inpust to intersects function
1 parent 7c2807d commit a9aa81b

File tree

1 file changed

+51
-17
lines changed

1 file changed

+51
-17
lines changed

lib/expr.ex

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -762,23 +762,57 @@ defmodule AshSql.Expr do
762762
) do
763763
if bindings.sql_behaviour.array_overlap_operator?() do
764764
# Postgres
765-
do_dynamic_expr(
766-
query,
767-
%Fragment{
768-
embedded?: pred_embedded?,
769-
arguments: [
770-
raw: "((",
771-
expr: left,
772-
raw: ") && (",
773-
expr: right,
774-
raw: "))"
775-
]
776-
},
777-
bindings,
778-
embedded?,
779-
acc,
780-
:boolean
781-
)
765+
{[left_type, right_type], _type} =
766+
determine_types(
767+
bindings.sql_behaviour,
768+
Ash.Query.Function.Intersects,
769+
[left, right],
770+
:boolean
771+
)
772+
773+
{left_expr, acc} =
774+
if left_type do
775+
maybe_type_expr(
776+
query,
777+
left,
778+
set_location(bindings, :sub_expr),
779+
pred_embedded? || embedded?,
780+
acc,
781+
left_type
782+
)
783+
else
784+
do_dynamic_expr(
785+
query,
786+
left,
787+
set_location(bindings, :sub_expr),
788+
pred_embedded? || embedded?,
789+
acc,
790+
nil
791+
)
792+
end
793+
794+
{right_expr, acc} =
795+
if right_type do
796+
maybe_type_expr(
797+
query,
798+
right,
799+
set_location(bindings, :sub_expr),
800+
pred_embedded? || embedded?,
801+
acc,
802+
right_type
803+
)
804+
else
805+
do_dynamic_expr(
806+
query,
807+
right,
808+
set_location(bindings, :sub_expr),
809+
pred_embedded? || embedded?,
810+
acc,
811+
nil
812+
)
813+
end
814+
815+
{Ecto.Query.dynamic(fragment("(? && ?)", ^left_expr, ^right_expr)), acc}
782816
else
783817
# SQLite
784818
do_dynamic_expr(

0 commit comments

Comments
 (0)