Add an API for getting the previous error
diff --git a/src/erlfdb.erl b/src/erlfdb.erl
index b42deca..a077829 100644
--- a/src/erlfdb.erl
+++ b/src/erlfdb.erl
@@ -107,7 +107,8 @@
 
     % Misc
     on_error/2,
-    error_predicate/2
+    error_predicate/2,
+    get_last_error/0
 ]).
 
 
@@ -116,6 +117,7 @@
 -define(IS_TX, {erlfdb_transaction, _}).
 -define(IS_SS, {erlfdb_snapshot, _}).
 -define(GET_TX(SS), element(2, SS)).
+-define(ERLFDB_ERROR, '$erlfdb_error').
 
 
 open() ->
@@ -132,17 +134,8 @@
 
 
 transactional(?IS_DB = Db, UserFun) when is_function(UserFun, 1) ->
-    Tx = create_transaction(Db),
-    try
-        put(erlfdb_error, undefined),
-        Ret = UserFun(Tx),
-        wait(commit(Tx)),
-        Ret
-    catch error:{erlfdb_error, Code} ->
-        put(erlfdb_error, Code),
-        wait(on_error(Tx, Code)),
-        transactional(Db, UserFun)
-    end;
+    clear_erlfdb_error(),
+    do_transaction(Db, UserFun);
 
 transactional(?IS_TX = Tx, UserFun) when is_function(UserFun, 1) ->
     UserFun(Tx);
@@ -568,6 +561,27 @@
     erlfdb_nif:error_predicate(Predicate, ErrorCode).
 
 
+get_last_error() ->
+    get(?ERLFDB_ERROR).
+
+
+clear_erlfdb_error() ->
+    put(?ERLFDB_ERROR, undefined).
+
+
+do_transaction(Db, UserFun) ->
+    Tx = create_transaction(Db),
+    try
+        Ret = UserFun(Tx),
+        wait(commit(Tx)),
+        Ret
+    catch error:{erlfdb_error, Code} ->
+        put(?ERLFDB_ERROR, Code),
+        wait(on_error(Tx, Code)),
+        do_transaction(Db, UserFun)
+    end.
+
+
 -record(fold_st, {
     tx,
     start_key,