Skip to content

Commit d84ea35

Browse files
committed
continue
1 parent 9985686 commit d84ea35

File tree

8 files changed

+32
-31
lines changed

8 files changed

+32
-31
lines changed

c_src/sqlite3_nif.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ typedef struct connection
2929

3030
typedef struct statement
3131
{
32-
connection_t* conn;
3332
sqlite3_stmt* statement;
3433
} statement_t;
3534

@@ -384,9 +383,6 @@ exqlite_prepare(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
384383
}
385384
statement->statement = NULL;
386385

387-
enif_keep_resource(conn);
388-
statement->conn = conn;
389-
390386
// ensure connection is not getting closed by parallel thread
391387
enif_mutex_lock(conn->mutex);
392388
if (conn->db == NULL) {
@@ -907,11 +903,6 @@ statement_type_destructor(ErlNifEnv* env, void* arg)
907903
sqlite3_finalize(statement->statement);
908904
statement->statement = NULL;
909905
}
910-
911-
if (statement->conn) {
912-
enif_release_resource(statement->conn);
913-
statement->conn = NULL;
914-
}
915906
}
916907

917908
static int

lib/exqlite.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,13 @@ defmodule Exqlite do
270270

271271
# TODO sql / statement
272272
@compile inline: [wrap_error: 1]
273-
defp wrap_error({:error, reason}) when is_binary(reason) do
274-
{:error, UsageError.exception(message: reason)}
275-
end
276-
277273
defp wrap_error({:error, error}) when is_list(error) do
278274
{:error, SQLiteError.exception(error)}
279275
end
280276

277+
defp wrap_error({:error, reason}) do
278+
{:error, UsageError.exception(message: reason)}
279+
end
280+
281281
defp wrap_error(success), do: success
282282
end

lib/exqlite/nif.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ defmodule Exqlite.Nif do
44
@compile {:autoload, false}
55
@on_load {:load_nif, 0}
66

7+
# TODO it's not just a string
78
@type error :: String.t() | Keyword.t()
89

910
def load_nif do

lib/exqlite/usage_error.ex

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,19 @@ defmodule Exqlite.UsageError do
44
55
Examples:
66
7-
iex> Exqlite.open(:not_a_path)
7+
iex> Exqlite.open('TODO')
88
{:error, %Exqlite.UsageError{message: "TODO"}}
99
1010
"""
1111

1212
defexception [:message]
13-
@type t :: %__MODULE__{message: String.t()}
13+
14+
@type t :: %__MODULE__{
15+
message:
16+
String.t()
17+
| :invalid_statement
18+
| :invalid_connection
19+
| :arguments_wrong_length
20+
| {:wrong_type, term}
21+
}
1422
end

test/exqlite/extensions_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule Exqlite.ExtensionsTest do
2020

2121
assert :ok = Exqlite.disable_load_extension(conn)
2222

23-
assert {:error, %Exqlite.Error{message: "not authorized"}} =
23+
assert {:error, %Exqlite.UsageError{message: "not authorized"}} =
2424
Exqlite.prepare_fetch_all(
2525
conn,
2626
"select load_extension(?)",

test/exqlite/integration_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ defmodule Exqlite.IntegrationTest do
124124
:ok = Exqlite.execute(conn1, "begin immediate")
125125
assert {:ok, :transaction} = Exqlite.transaction_status(conn1)
126126

127-
assert {:error, %Exqlite.Error{} = error} =
127+
assert {:error, %Exqlite.UsageError{} = error} =
128128
Exqlite.execute(conn2, "begin immediate")
129129

130130
assert error.message == "database is locked"

test/exqlite/sqlite_error_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Exqlite.SQLiteErrorTest do
44

55
describe "message/1" do
66
test "with :statement" do
7-
assert "a\nb" == Exception.message(%SQLiteError{message: "a", statement: "b"})
7+
assert "a: b" == Exception.message(%SQLiteError{message: "a", statement: "b"})
88
end
99

1010
test "without :statement" do

test/exqlite_test.exs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ defmodule ExqliteTest do
6868
)
6969

7070
assert {:error,
71-
%Exqlite.Error{message: "attempt to write a readonly database"} = error} =
71+
%Exqlite.UsageError{message: "attempt to write a readonly database"} =
72+
error} =
7273
Exqlite.execute(
7374
conn,
7475
"insert into test (stuff) values ('This is a test')"
@@ -109,7 +110,7 @@ defmodule ExqliteTest do
109110

110111
{:ok, stmt} = Exqlite.prepare(conn, "insert into test(col) values(?)")
111112
:ok = Exqlite.bind(conn, stmt, ["something"])
112-
{:error, %Exqlite.Error{} = error} = Exqlite.step(conn, stmt)
113+
{:error, %Exqlite.UsageError{} = error} = Exqlite.step(conn, stmt)
113114

114115
assert error.message == "attempt to write a readonly database"
115116
end
@@ -124,7 +125,7 @@ defmodule ExqliteTest do
124125
describe ".close/2" do
125126
test "doesn't crash on invalid conn handle" do
126127
conn = make_ref()
127-
assert {:error, %Exqlite.Error{} = error} = Exqlite.close(conn)
128+
assert {:error, %Exqlite.UsageError{} = error} = Exqlite.close(conn)
128129
assert error.message == :invalid_connection
129130
end
130131

@@ -171,7 +172,7 @@ defmodule ExqliteTest do
171172
end
172173

173174
test "handles incorrect syntax", %{conn: conn} do
174-
assert {:error, %Exqlite.Error{message: "near \"a\": syntax error"}} =
175+
assert {:error, %Exqlite.UsageError{message: "near \"a\": syntax error"}} =
175176
Exqlite.execute(
176177
conn,
177178
"create a dumb table test (id integer primary key, stuff text)"
@@ -325,14 +326,14 @@ defmodule ExqliteTest do
325326
end
326327

327328
test "users table does not exist", %{conn: conn} do
328-
assert {:error, %Exqlite.Error{} = error} =
329+
assert {:error, %Exqlite.UsageError{} = error} =
329330
Exqlite.prepare(conn, "select * from users where id < ?")
330331

331332
assert Exception.message(error) == "no such table: users"
332333
end
333334

334335
test "supports utf8 in error messages", %{conn: conn} do
335-
assert {:error, %Exqlite.Error{message: "no such table: 🌍"}} =
336+
assert {:error, %Exqlite.UsageError{message: "no such table: 🌍"}} =
336337
Exqlite.prepare(conn, "select * from 🌍")
337338
end
338339
end
@@ -394,7 +395,7 @@ defmodule ExqliteTest do
394395
end
395396

396397
test "releasing a nil statement" do
397-
assert {:error, %Exqlite.Error{message: :invalid_statement}} =
398+
assert {:error, %Exqlite.UsageError{message: :invalid_statement}} =
398399
Exqlite.release(nil)
399400
end
400401
end
@@ -421,13 +422,13 @@ defmodule ExqliteTest do
421422
end
422423

423424
test "trying to bind with incorrect amount of arguments", %{conn: conn, stmt: stmt} do
424-
assert {:error, %Exqlite.Error{message: :arguments_wrong_length}} =
425+
assert {:error, %Exqlite.UsageError{message: :arguments_wrong_length}} =
425426
Exqlite.bind(conn, stmt, [])
426427
end
427428

428429
test "doesn't bind datetime value as string", %{conn: conn, stmt: stmt} do
429430
assert {:error,
430-
%Exqlite.Error{message: {:wrong_type, %DateTime{}}} =
431+
%Exqlite.UsageError{message: {:wrong_type, %DateTime{}}} =
431432
error} =
432433
Exqlite.bind(conn, stmt, [DateTime.utc_now()])
433434

@@ -436,7 +437,7 @@ defmodule ExqliteTest do
436437

437438
test "doesn't bind date value as string", %{conn: conn, stmt: stmt} do
438439
assert {:error,
439-
%Exqlite.Error{message: {:wrong_type, %Date{}}} =
440+
%Exqlite.UsageError{message: {:wrong_type, %Date{}}} =
440441
error} =
441442
Exqlite.bind(conn, stmt, [Date.utc_today()])
442443

@@ -522,7 +523,7 @@ defmodule ExqliteTest do
522523
assert :ok = Exqlite.bind(conn, stmt, ["this is a test"])
523524

524525
assert {:error,
525-
%Exqlite.Error{message: "Sqlite3 was invoked incorrectly."} = error} =
526+
%Exqlite.UsageError{message: "Sqlite3 was invoked incorrectly."} = error} =
526527
Exqlite.execute(
527528
conn,
528529
"create table test (id integer primary key, stuff text)"
@@ -636,7 +637,7 @@ defmodule ExqliteTest do
636637
test "can receive errors", %{conn: conn} do
637638
assert :ok = Exqlite.set_log_hook(self())
638639

639-
assert {:error, %Exqlite.Error{message: "near \"some\": syntax error"}} =
640+
assert {:error, %Exqlite.UsageError{message: "near \"some\": syntax error"}} =
640641
Exqlite.prepare(conn, "some invalid sql")
641642

642643
assert_receive {:log, rc, msg}
@@ -652,7 +653,7 @@ defmodule ExqliteTest do
652653
Task.async(fn ->
653654
:ok = Exqlite.set_log_hook(self())
654655

655-
assert {:error, %Exqlite.Error{message: "near \"some\": syntax error"}} =
656+
assert {:error, %Exqlite.UsageError{message: "near \"some\": syntax error"}} =
656657
Exqlite.prepare(conn, "some invalid sql")
657658

658659
assert_receive {:log, rc, msg}

0 commit comments

Comments
 (0)