@@ -3,8 +3,6 @@ defmodule Sqlite do
33 SQLite3 driver for Elixir.
44 """
55
6- alias Sqlite.Query
7-
86 defmodule Connection do
97 @ moduledoc false
108 defstruct [
@@ -73,19 +71,16 @@ defmodule Sqlite do
7371 Sqlite.query(conn, "INSERT INTO posts (title) VALUES ('my title')", [])
7472 Sqlite.query(conn, "SELECT title FROM posts", [])
7573 Sqlite.query(conn, "SELECT id FROM posts WHERE title like $1", ["%my%"])
76- Sqlite.query(conn, "COPY posts TO STDOUT", [])
7774 """
7875 @ spec query ( conn , iodata , list , Keyword . t ( ) ) ::
7976 { :ok , Sqlite.Result . t ( ) } | { :error , Sqlite.Error . t ( ) }
80- def query ( conn , statement , params , opts \\ [ ] ) do
81- query = % Query { name: "" , statement: statement }
77+ def query ( conn , sql , params , opts \\ [ ] ) do
8278 opts = opts |> defaults ( )
8379
84- GenServer . call ( conn . pid , { :query , query , params , opts } , call_timeout ( opts ) )
80+ GenServer . call ( conn . pid , { :query , sql , params , opts } , call_timeout ( opts ) )
8581 |> case do
8682 { :ok , % Sqlite.Result { } } = ok -> ok
8783 { :error , % Sqlite.Error { } } = ok -> ok
88- err -> unexpected_response ( err , :query )
8984 end
9085 end
9186
@@ -94,46 +89,78 @@ defmodule Sqlite do
9489 there was an error. See `query/3`.
9590 """
9691 @ spec query! ( conn , iodata , list , Keyword . t ( ) ) :: Sqlite.Result . t ( )
97- def query! ( conn , statement , params , opts \\ [ ] ) do
98- case query ( conn , statement , params , opts ) do
92+ def query! ( conn , sql , params , opts \\ [ ] ) do
93+ case query ( conn , sql , params , opts ) do
9994 { :ok , result } -> result
100- { :error , reason } -> raise Sqlite.Error , % { reason: reason }
95+ { :error , reason } -> raise Sqlite.Error , reason . message
10196 end
10297 end
10398
10499 @ doc """
105100 Prepares an (extended) query and returns the result as
106101 `{:ok, %Sqlite.Query{}}` or `{:error, %Sqlite.Error{}}` if there was an
107102 error. Parameters can be set in the query as `$1` embedded in the query
108- string. To execute the query call `execute/4`. To close the prepared query
109- call `close/3`. See `Sqlite.Query` for the query data.
103+ string. To execute the query call `execute/4`.
110104
111105 ## Examples
112- Sqlite.prepare(conn, "", " CREATE TABLE posts (id serial, title text)")
106+ Sqlite.prepare(conn, "CREATE TABLE posts (id serial, title text)")
113107 """
114- @ spec prepare ( conn , iodata , iodata , Keyword . t ( ) ) ::
115- { :ok , Sqlite.Query . t ( ) } | { :error , Sqlite.Error . t ( ) }
116- def prepare ( conn , name , statement , opts \\ [ ] ) do
117- query = % Query { name: name , statement: statement }
108+ @ spec prepare ( conn , iodata , Keyword . t ( ) ) :: { :ok , Sqlite.Query . t ( ) } | { :error , Sqlite.Error . t ( ) }
109+ def prepare ( conn , sql , opts \\ [ ] ) do
118110 opts = opts |> defaults ( )
119111
120- GenServer . call ( conn . pid , { :prepare , query , opts } , call_timeout ( opts ) )
112+ GenServer . call ( conn . pid , { :prepare , sql , opts } , call_timeout ( opts ) )
121113 |> case do
122114 { :ok , % Sqlite.Query { } } = ok -> ok
123115 { :error , % Sqlite.Error { } } = ok -> ok
124- err -> unexpected_response ( err , :prepare )
125116 end
126117 end
127118
128119 @ doc """
129120 Prepares an (extended) query and returns the prepared query or raises
130- `Sqlite.Error` if there was an error. See `prepare/4 `.
121+ `Sqlite.Error` if there was an error. See `prepare/3 `.
131122 """
132- @ spec prepare! ( conn , iodata , iodata , Keyword . t ( ) ) :: Sqlite.Query . t ( )
133- def prepare! ( conn , name , statement , opts \\ [ ] ) do
134- case prepare ( conn , name , statement , opts ) do
123+ @ spec prepare! ( conn , iodata , Keyword . t ( ) ) :: Sqlite.Query . t ( )
124+ def prepare! ( conn , sql , opts \\ [ ] ) do
125+ case prepare ( conn , sql , opts ) do
135126 { :ok , result } -> result
136- { :error , reason } -> raise Sqlite.Error , % { reason: reason }
127+ { :error , reason } -> raise Sqlite.Error , reason . message
128+ end
129+ end
130+
131+ @ doc """
132+ Releases an (extended) query.
133+
134+ ## Examples
135+ query = Sqlite.prepare!(conn, "CREATE TABLE posts (id serial, title text)")
136+ Sqlite.release_query(query)
137+ """
138+ @ spec release_query ( conn , Sqlite.Query . t ( ) , Keyword . t ( ) ) :: :ok | { :error , Sqlite.Error . t ( ) }
139+ def release_query ( conn , query , opts \\ [ ] ) do
140+ opts = opts |> defaults ( )
141+
142+ GenServer . call ( conn . pid , { :release_query , query , opts } , call_timeout ( opts ) )
143+ |> case do
144+ :ok -> :ok
145+ { :error , % Sqlite.Error { } } = ok -> ok
146+ end
147+ end
148+
149+ @ doc """
150+ Releases an (extended) query or raises
151+ `Sqlite.Error` if there was an error. See `release_query/3`.
152+
153+ ## Examples
154+ query = Sqlite.prepare!(conn, "CREATE TABLE posts (id serial, title text)")
155+ Sqlite.release_query(query)
156+ """
157+ @ spec release_query! ( conn , Sqlite.Query . t ( ) , Keyword . t ( ) ) :: :ok
158+ def release_query! ( conn , query , opts \\ [ ] ) do
159+ opts = opts |> defaults ( )
160+
161+ case release_query ( conn , query , opts ) do
162+ :ok -> :ok
163+ { :error , reason } -> raise Sqlite.Error , reason . message
137164 end
138165 end
139166
@@ -160,7 +187,6 @@ defmodule Sqlite do
160187 |> case do
161188 { :ok , % Sqlite.Result { } } = ok -> ok
162189 { :error , % Sqlite.Error { } } = ok -> ok
163- err -> unexpected_response ( err , :execute )
164190 end
165191 end
166192
@@ -172,7 +198,7 @@ defmodule Sqlite do
172198 def execute! ( conn , query , params , opts \\ [ ] ) do
173199 case execute ( conn , query , params , opts ) do
174200 { :ok , result } -> result
175- { :error , reason } -> raise Sqlite.Error , % { reason: reason }
201+ { :error , reason } -> raise Sqlite.Error , reason . message
176202 end
177203 end
178204
@@ -182,23 +208,11 @@ defmodule Sqlite do
182208 @ spec close ( conn , Keyword . t ( ) ) :: :ok | { :error , Sqlite.Error . t ( ) }
183209 def close ( conn , opts \\ [ ] ) when is_list ( opts ) do
184210 opts = defaults ( opts )
211+
185212 GenServer . call ( conn . pid , { :close , opts } , call_timeout ( opts ) )
186213 |> case do
187214 :ok -> :ok
188215 { :error , % Sqlite.Error { } } = ok -> ok
189- err -> unexpected_response ( err , :close )
190- end
191- end
192-
193- @ doc """
194- Closes an (extended) prepared query and returns `:ok` or raises
195- `Sqlite.Error` if there was an error. See `close/3`.
196- """
197- @ spec close! ( conn , Keyword . t ( ) ) :: :ok
198- def close! ( conn , opts \\ [ ] ) do
199- case close ( conn , opts ) do
200- :ok -> :ok
201- { :error , reason } -> raise Sqlite.Error , % { reason: reason }
202216 end
203217 end
204218
@@ -218,8 +232,4 @@ defmodule Sqlite do
218232
219233 Keyword . merge ( defaults , opts )
220234 end
221-
222- defp unexpected_response ( err , fun ) do
223- raise "Unexpected response to #{ fun } : #{ inspect ( err ) } "
224- end
225235end
0 commit comments