Lines Matching +refs:do +refs:p

1 defmodule Ecto.Query.Builder.SelectTest do
8 describe "escape" do
9 test "handles expressions and params" do
10 assert {Macro.escape(quote do &0 end), {%{}, %{}}} ==
11 escape(quote do x end, [x: 0], __ENV__)
13 assert {Macro.escape(quote do &0.y end), {%{}, %{}}} ==
14 escape(quote do x.y end, [x: 0], __ENV__)
16 assert {Macro.escape(quote do &0 end), {%{}, %{0 => {:any, [:foo, :bar, baz: :bat]}}}} ==
17 escape(quote do [:foo, :bar, baz: :bat] end, [x: 0], __ENV__)
19 assert {Macro.escape(quote do &0 end), {%{}, %{0 => {:struct, [:foo, :bar, baz: :bat]}}}} ==
20 escape(quote do struct(x, [:foo, :bar, baz: :bat]) end, [x: 0], __ENV__)
22 assert {Macro.escape(quote do &0 end), {%{}, %{0 => {:map, [:foo, :bar, baz: :bat]}}}} ==
23 escape(quote do map(x, [:foo, :bar, baz: :bat]) end, [x: 0], __ENV__)
26 escape(quote do {0, 1, 2} end, [], __ENV__)
29 escape(quote do %{a: a} end, [a: 0], __ENV__)
32 escape(quote do %{a => b} end, [a: 0, b: 1], __ENV__)
34 assert {[Macro.escape(quote do &0.y end), Macro.escape(quote do &0.z end)], {%{}, %{}}} ==
35 escape(quote do [x.y, x.z] end, [x: 0], __ENV__)
39 escape(quote do [x.y, ^1] end, [x: 0], __ENV__)
42 escape(quote do %Foo{a: a} end, [a: 0], __ENV__)
45 test "on conflicting take" do
47 escape(quote do {map(x, [:foo, :bar]), map(x, [baz: :bat])} end, [x: 0], __ENV__)
52 escape(quote do {map(x, [:foo, :bar]), struct(x, [baz: :bat])} end, [x: 0], __ENV__)
58 test "supports sigils/attributes" do
65 describe "at runtime" do
66 test "supports interpolation" do
73 test "raises on multiple selects" do
81 describe "select_merge" do
82 test "merges at compile time" do
84 from p in "posts",
86 select_merge: %{a: map(p, [:title]), b: ^0},
87 select_merge: %{c: map(p, [:title, :body]), d: ^1}
96 test "merges at runtime" do
100 |> select_merge([p], %{a: map(p, [:title]), b: ^0})
101 |> select_merge([p], %{c: map(p, [:title, :body]), d: ^1})
111 test "defaults to struct" do
112 query = select_merge("posts", [p], %{title: nil})
118 test "with take" do
120 query = from p in "posts", select: p, select_merge: [:title]
127 query = from p in "posts", select: [:body], select_merge: [:title]
134 test "on conflicting take" do
135 _ = from p in "posts", select: %{}, select_merge: map(p, [:title]), select_merge: [:body]
136 … _ = from p in "posts", select: %{}, select_merge: map(p, [:title]), select_merge: map(p, [:body])
137 _ = from p in "posts", select: %{}, select_merge: [:title], select_merge: map(p, [:body])
138 _ = from p in "posts", select: %{}, select_merge: [:title], select_merge: struct(p, [:body])
139 _ = from p in "posts", select: %{}, select_merge: struct(p, [:title]), select_merge: [:body]
140 …_ = from p in "posts", select: %{}, select_merge: struct(p, [:title]), select_merge: struct(p, [:b…
145 … from p in "posts", select: %{}, select_merge: map(p, [:title]), select_merge: struct(p, [:body])
149 test "optimizes map/struct merges" do
151 from p in "posts",
152 select: %{t: {p.title, p.body}},
153 select_merge: %{t: p.title, b: p.body}
157 from p in "posts",
158 select: %Post{title: p.title},
164 from p in "posts",
165 select: %{title: p.title},
171 from p in "posts",
172 select: %{t: {p.title, ^0}},
173 select_merge: %{t: p.title, b: p.body}