From ee2edeee8e43536ab9ebc700cf86648d29b6cd2a Mon Sep 17 00:00:00 2001 From: Renato Massaro Date: Sat, 11 Oct 2025 20:14:22 -0300 Subject: [PATCH] Support inequality operators in query parsing Very rudimentary but works great so far --- lib/feeb/db/query/binding.ex | 4 ++-- test/db/query/binding_test.exs | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 test/db/query/binding_test.exs diff --git a/lib/feeb/db/query/binding.ex b/lib/feeb/db/query/binding.ex index e1e20d3..c220a6d 100644 --- a/lib/feeb/db/query/binding.ex +++ b/lib/feeb/db/query/binding.ex @@ -42,12 +42,12 @@ defmodule Feeb.DB.Query.Binding do defp parse_kv(sql) do sql - |> String.split(" = ?") + |> String.split(" ?") |> List.delete_at(-1) |> Enum.map(fn expr -> expr |> String.split(" ") - |> Enum.at(-1) + |> Enum.at(-2) |> String.to_atom() end) end diff --git a/test/db/query/binding_test.exs b/test/db/query/binding_test.exs new file mode 100644 index 0000000..5c25c2c --- /dev/null +++ b/test/db/query/binding_test.exs @@ -0,0 +1,20 @@ +defmodule Feeb.DB.Query.BindingTest do + use ExUnit.Case, async: true + + alias Feeb.DB.Query.Binding + + describe "parse_params/3" do + test "returns the expected params bindings (SELECT)" do + [ + {"select * from users where id = ?;", [:id]}, + {"select * from users where id = ? and name = ?;", [:id, :name]}, + {"select * from users where inserted_at >= ?", [:inserted_at]}, + {"select * from foo where id > ? and id < ?", [:id, :id]}, + {"select * from foo where bar <= ? or id = ?", [:bar, :id]} + ] + |> Enum.each(fn {sql, expected_bindings} -> + assert expected_bindings == Binding.parse_params(:select, sql, []) + end) + end + end +end