From 72431bb1d89ab15e1a9cb9dc671d5af05f5aec58 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Wed, 29 Jun 2016 15:08:53 -0300 Subject: [PATCH] Make sure to release a statmenet in case of an exception --- src/db/query_methods.cr | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/db/query_methods.cr b/src/db/query_methods.cr index ba71a7f..b404c4f 100644 --- a/src/db/query_methods.cr +++ b/src/db/query_methods.cr @@ -24,7 +24,7 @@ module DB # Returns a `ResultSet` for the `query`. # The `ResultSet` must be closed manually. def query(query, *args) - prepare(query).query(*args) + prepare query, &.query(*args) end # Yields a `ResultSet` for the `query`. @@ -42,13 +42,23 @@ module DB # Performs the `query` and returns an `ExecResult` def exec(query, *args) - prepare(query).exec(*args) + prepare query, &.exec(*args) end # Performs the `query` and returns a single scalar `DB::Any` value # puts db.scalar("SELECT MAX(name)") as String # => (a String) def scalar(query, *args) - prepare(query).scalar(*args) + prepare query, &.scalar(*args) + end + + private def prepare(query) + stm = prepare(query) + begin + yield stm + rescue ex + stm.release_connection + raise ex + end end # TODO add query_row