From c7c9421429b94140db6b4909c8d8e7ff2c5e290b Mon Sep 17 00:00:00 2001 From: Arjan Scherpenisse Date: Sun, 15 Jun 2014 09:18:07 +0200 Subject: [PATCH] Pass back errors in fetch steps to the caller Constraint errors (e.g. foreign keys) can fail in the fetch phase of a query. The library did not support error handling in the fetch phase yet. --- src/esqlite3.erl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/esqlite3.erl b/src/esqlite3.erl index 4d05ad3..e82f946 100644 --- a/src/esqlite3.erl +++ b/src/esqlite3.erl @@ -123,6 +123,7 @@ foreach(F, Sql, Connection) -> foreach_s(F, Statement) when is_function(F, 1) -> case try_step(Statement, 0) of '$done' -> ok; + {error, _} = E -> F(E); {row, Row} -> F(Row), foreach_s(F, Statement) @@ -131,6 +132,7 @@ foreach_s(F, Statement) when is_function(F, 2) -> ColumnNames = column_names(Statement), case try_step(Statement, 0) of '$done' -> ok; + {error, _} = E -> F([], E); {row, Row} -> F(ColumnNames, Row), foreach_s(F, Statement) @@ -145,6 +147,7 @@ foreach_s(F, Statement) when is_function(F, 2) -> map_s(F, Statement) when is_function(F, 1) -> case try_step(Statement, 0) of '$done' -> []; + {error, _} = E -> F(E); {row, Row} -> [F(Row) | map_s(F, Statement)] end; @@ -152,6 +155,7 @@ map_s(F, Statement) when is_function(F, 2) -> ColumnNames = column_names(Statement), case try_step(Statement, 0) of '$done' -> []; + {error, _} = E -> F([], E); {row, Row} -> [F(ColumnNames, Row) | map_s(F, Statement)] end. @@ -161,6 +165,7 @@ map_s(F, Statement) when is_function(F, 2) -> fetchone(Statement) -> case try_step(Statement, 0) of '$done' -> ok; + {error, _} = E -> E; {row, Row} -> Row end. @@ -170,6 +175,7 @@ fetchall(Statement) -> case try_step(Statement, 0) of '$done' -> []; + {error, _} = E -> E; {row, Row} -> [Row | fetchall(Statement)] end.