diff --git a/src/db/statement.cr b/src/db/statement.cr index f6573f0..e1fc699 100644 --- a/src/db/statement.cr +++ b/src/db/statement.cr @@ -80,17 +80,17 @@ module DB # See `QueryMethods#query` def query - perform_query Tuple.new + perform_query_with_rescue Tuple.new end # See `QueryMethods#query` def query(args : Array) - perform_query args + perform_query_with_rescue args end # See `QueryMethods#query` def query(*args) - perform_query args + perform_query_with_rescue args end private def perform_exec_and_release(args : Enumerable) : ExecResult @@ -99,6 +99,15 @@ module DB release_connection end + private def perform_query_with_rescue(args : Enumerable) : ResultSet + return perform_query(args) + rescue e : Exception + # Release connection only when an exception occurs during the query + # execution since we need the connection open while the ResultSet is open + release_connection + raise e + end + protected abstract def perform_query(args : Enumerable) : ResultSet protected abstract def perform_exec(args : Enumerable) : ExecResult end