Skip to content
This repository was archived by the owner on Mar 19, 2021. It is now read-only.

Commit 77cb43b

Browse files
authored
FIX: If a query that uses returning-clause support fails, the error was dropped. (#59)
1 parent bf8472c commit 77cb43b

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

lib/sqlitex/statement.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,12 +348,12 @@ defmodule Sqlitex.Statement do
348348

349349
with {:ok, _} = db_exec(db, "CREATE TEMP TABLE #{temp_table} (#{temp_fields})"),
350350
{:ok, _} = db_exec(db, trigger),
351-
_ = :esqlite3.fetchall(statement),
351+
result = :esqlite3.fetchall(statement),
352352
{:ok, rows} = db_exec(db, "SELECT #{column_names} FROM #{temp_table}"),
353353
{:ok, _} = db_exec(db, "DROP TRIGGER IF EXISTS #{trigger_name}"),
354354
{:ok, _} = db_exec(db, "DROP TABLE IF EXISTS #{temp_table}")
355355
do
356-
rows
356+
if is_list(result), do: rows, else: result
357357
end
358358
catch
359359
e ->

test/statement_test.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,19 @@ defmodule StatementTest do
5959
rows = Sqlitex.Statement.fetch_all!(stmt, :raw_list)
6060
assert rows == [[1], [2], [3]]
6161
end
62+
63+
test "RETURNING pseudo-syntax doesn't mask error when query fails" do
64+
{:ok, db} = Sqlitex.open(":memory:")
65+
66+
Sqlitex.exec(db, "CREATE TABLE x(id INTEGER PRIMARY KEY AUTOINCREMENT, str)")
67+
Sqlitex.exec(db, "CREATE UNIQUE INDEX x_str ON x(str)")
68+
69+
Sqlitex.exec(db, "INSERT INTO x(str) VALUES ('x'),('y'),('z')")
70+
71+
stmt = Sqlitex.Statement.prepare!(db, "INSERT INTO x(str) VALUES ('x') "
72+
<> ";--RETURNING ON INSERT x,id")
73+
74+
result = Sqlitex.Statement.fetch_all(stmt, :raw_list)
75+
assert result == {:error, {:constraint, 'UNIQUE constraint failed: x.str'}}
76+
end
6277
end

0 commit comments

Comments
 (0)