Skip to content

Commit 404ce4d

Browse files
committed
feat(query): add a barebones query structure (copied from myxql)
1 parent a8979f4 commit 404ce4d

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

lib/exqlite/query.ex

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
defmodule Exqlite.Query do
2+
@moduledoc """
3+
Query struct returned from a successfully prepared query.
4+
"""
5+
@type t :: %__MODULE__{
6+
statement: iodata(),
7+
ref: reference() | nil
8+
}
9+
10+
defstruct statement: nil,
11+
ref: nil
12+
13+
defimpl DBConnection.Query do
14+
def parse(query, _opts) do
15+
query
16+
end
17+
18+
def describe(query, _opts) do
19+
query
20+
end
21+
22+
def encode(%{ref: nil} = query, _params, _opts) do
23+
raise ArgumentError, "query #{inspect(query)} has not been prepared"
24+
end
25+
26+
def encode(%{num_params: nil} = query, _params, _opts) do
27+
raise ArgumentError, "query #{inspect(query)} has not been prepared"
28+
end
29+
30+
def encode(%{num_params: num_params} = query, params, _opts)
31+
when num_params != length(params) do
32+
message =
33+
"expected params count: #{inspect(num_params)}, got values: #{inspect(params)}" <>
34+
" for query: #{inspect(query)}"
35+
36+
raise ArgumentError, message
37+
end
38+
39+
def encode(_query, params, _opts) do
40+
# TODO. See also Connection.bind/3
41+
params
42+
#Protocol.encode_params(params)
43+
end
44+
45+
def decode(_query, result, _opts) do
46+
result
47+
end
48+
end
49+
50+
defimpl String.Chars do
51+
def to_string(%{statement: statement}) do
52+
IO.iodata_to_binary(statement)
53+
end
54+
end
55+
end

0 commit comments

Comments
 (0)