Skip to content

Commit 254792d

Browse files
authored
Parenthesize in expressions used as operands (#760)
1 parent bf126d6 commit 254792d

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

‎lib/ecto/adapters/myxql/connection.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,9 @@ if Code.ensure_loaded?(MyXQL) do
950950
defp op_to_binary({:not, _, [_]} = expr, sources, query),
951951
do: paren_expr(expr, sources, query)
952952

953+
defp op_to_binary({:in, _, [_, _]} = expr, sources, query),
954+
do: paren_expr(expr, sources, query)
955+
953956
defp op_to_binary(expr, sources, query),
954957
do: expr(expr, sources, query)
955958

‎lib/ecto/adapters/postgres/connection.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,9 @@ if Code.ensure_loaded?(Postgrex) do
12151215
defp maybe_paren({:not, _, [_]} = expr, sources, query),
12161216
do: paren_expr(expr, sources, query)
12171217

1218+
defp maybe_paren({:in, _, [_, _]} = expr, sources, query),
1219+
do: paren_expr(expr, sources, query)
1220+
12181221
defp maybe_paren(expr, sources, query),
12191222
do: expr(expr, sources, query)
12201223

‎test/ecto/adapters/myxql_test.exs‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,13 @@ defmodule Ecto.Adapters.MyXQLTest do
854854
query = Schema |> select([e], e.x == ^0 or e.x in ^[1, 2, 3] or e.x == ^4) |> plan()
855855

856856
assert all(query) ==
857-
~s{SELECT ((s0.`x` = ?) OR s0.`x` IN (?,?,?)) OR (s0.`x` = ?) FROM `schema` AS s0}
857+
~s{SELECT ((s0.`x` = ?) OR (s0.`x` IN (?,?,?))) OR (s0.`x` = ?) FROM `schema` AS s0}
858+
859+
query = "schema" |> select([e], e.x in [1, 2] in [true]) |> plan()
860+
assert all(query) == ~s{SELECT (s0.`x` IN (1,2)) IN (TRUE) FROM `schema` AS s0}
861+
862+
query = "schema" |> select([e], e.x in ^[1, 2] in [true]) |> plan()
863+
assert all(query) == ~s{SELECT (s0.`x` IN (?,?)) IN (TRUE) FROM `schema` AS s0}
858864
end
859865

860866
test "in subquery" do

‎test/ecto/adapters/postgres_test.exs‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ defmodule Ecto.Adapters.PostgresTest do
11231123
query = Schema |> select([e], e.x == ^0 or e.x in ^[1, 2, 3] or e.x == ^4) |> plan()
11241124

11251125
assert all(query) ==
1126-
~s{SELECT ((s0."x" = $1) OR s0."x" = ANY($2)) OR (s0."x" = $3) FROM "schema" AS s0}
1126+
~s{SELECT ((s0."x" = $1) OR (s0."x" = ANY($2))) OR (s0."x" = $3) FROM "schema" AS s0}
11271127

11281128
query = "schema" |> select([e], (not e.x) in [true, false]) |> plan()
11291129
assert all(query) == ~s{SELECT (NOT (s0."x")) IN (TRUE,FALSE) FROM "schema" AS s0}
@@ -1133,6 +1133,15 @@ defmodule Ecto.Adapters.PostgresTest do
11331133

11341134
query = "schema" |> select([e], (not e.x) in e.w) |> plan()
11351135
assert all(query) == ~s{SELECT (NOT (s0."x")) = ANY(s0."w") FROM "schema" AS s0}
1136+
1137+
query = "schema" |> select([e], e.x == e.y in ^[1, 2]) |> plan()
1138+
assert all(query) == ~s{SELECT s0."x" = (s0."y" = ANY($1)) FROM "schema" AS s0}
1139+
1140+
query = "schema" |> select([e], e.x == e.y in e.w) |> plan()
1141+
assert all(query) == ~s{SELECT s0."x" = (s0."y" = ANY(s0."w")) FROM "schema" AS s0}
1142+
1143+
query = "schema" |> select([e], e.x in [1, 2] in [true]) |> plan()
1144+
assert all(query) == ~s{SELECT (s0."x" IN (1,2)) IN (TRUE) FROM "schema" AS s0}
11361145
end
11371146

11381147
test "in subquery" do

0 commit comments

Comments
 (0)