Skip to content

Commit ee2edee

Browse files
committed
Support inequality operators in query parsing
Very rudimentary but works great so far
1 parent 1409440 commit ee2edee

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

lib/feeb/db/query/binding.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ defmodule Feeb.DB.Query.Binding do
4242

4343
defp parse_kv(sql) do
4444
sql
45-
|> String.split(" = ?")
45+
|> String.split(" ?")
4646
|> List.delete_at(-1)
4747
|> Enum.map(fn expr ->
4848
expr
4949
|> String.split(" ")
50-
|> Enum.at(-1)
50+
|> Enum.at(-2)
5151
|> String.to_atom()
5252
end)
5353
end

test/db/query/binding_test.exs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
defmodule Feeb.DB.Query.BindingTest do
2+
use ExUnit.Case, async: true
3+
4+
alias Feeb.DB.Query.Binding
5+
6+
describe "parse_params/3" do
7+
test "returns the expected params bindings (SELECT)" do
8+
[
9+
{"select * from users where id = ?;", [:id]},
10+
{"select * from users where id = ? and name = ?;", [:id, :name]},
11+
{"select * from users where inserted_at >= ?", [:inserted_at]},
12+
{"select * from foo where id > ? and id < ?", [:id, :id]},
13+
{"select * from foo where bar <= ? or id = ?", [:bar, :id]}
14+
]
15+
|> Enum.each(fn {sql, expected_bindings} ->
16+
assert expected_bindings == Binding.parse_params(:select, sql, [])
17+
end)
18+
end
19+
end
20+
end

0 commit comments

Comments
 (0)