Skip to content

Commit c426d66

Browse files
committed
Bugfix when passing empty list to where
1 parent 4db96f0 commit c426d66

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

lib/query_builder.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ defmodule QueryBuilder do
242242
"""
243243
def where(query, assoc_fields, filters, or_filters \\ [])
244244

245+
def where(%QueryBuilder.Query{} = query, _assoc_fields, [], []) do
246+
query
247+
end
248+
245249
def where(%QueryBuilder.Query{} = query, assoc_fields, filters, or_filters) do
246250
%{query | operations: [%{type: :where, assocs: assoc_fields, args: [filters, or_filters]} | query.operations]}
247251
end
@@ -293,6 +297,10 @@ defmodule QueryBuilder do
293297
QueryBuilder.order_by(query, :articles, asc: :title@articles)
294298
```
295299
"""
300+
def order_by(%QueryBuilder.Query{} = query, _assoc_fields, []) do
301+
query
302+
end
303+
296304
def order_by(%QueryBuilder.Query{} = query, assoc_fields, value) do
297305
%{query | operations: [%{type: :order_by, assocs: assoc_fields, args: [value]} | query.operations]}
298306
end

test/query_builder_test.exs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,22 @@ defmodule QueryBuilderTest do
228228
assert 2 == length(articles_excluding_tags)
229229
end
230230

231+
test "empty where" do
232+
all_users =
233+
User
234+
|> QueryBuilder.where([])
235+
|> Repo.all()
236+
237+
assert 9 == length(all_users)
238+
239+
result =
240+
User
241+
|> QueryBuilder.where([], [], or: [name: "Bob", deleted: false])
242+
|> Repo.all()
243+
244+
assert 1 == length(result)
245+
end
246+
231247
test "where with or groups" do
232248
result =
233249
User
@@ -426,6 +442,15 @@ defmodule QueryBuilderTest do
426442
assert hd(alice.authored_articles).title == "MINT, A NEW HTTP CLIENT FOR ELIXIR"
427443
end
428444

445+
test "empty order_by" do
446+
all_users =
447+
User
448+
|> QueryBuilder.order_by([])
449+
|> Repo.all()
450+
451+
assert 9 == length(all_users)
452+
end
453+
429454
test "order_by with fragment" do
430455
character_length = fn (field, get_binding_fun) ->
431456
{field, binding} = get_binding_fun.(field)

0 commit comments

Comments
 (0)