Merge pull request #1 from jhass/ensure_close

Ensure close of statement
This commit is contained in:
Ary Borenszweig 2015-09-07 10:04:19 -03:00
commit b98c31c506
2 changed files with 31 additions and 0 deletions

View file

@ -109,4 +109,34 @@ describe Database do
it "gets first value" do it "gets first value" do
with_db(&.get_first_value(%(select 1))).should eq(1) with_db(&.get_first_value(%(select 1))).should eq(1)
end end
it "ensures statements are closed" do
begin
Database.new(DB_FILENAME) do |db|
db.execute(%(create table if not exists a (i int not null, str text not null);))
db.execute(%(insert into a (i, str) values (23, "bai bai");))
end
2.times do |i|
Database.new(DB_FILENAME) do |db|
begin
db.query("SELECT i, str FROM a WHERE i = ?", 23) do |rs|
rs.next
break
end
rescue e : SQLite3::Exception
fail("Expected no exception, but got \"#{e.message}\"")
end
begin
db.execute("UPDATE a SET i = ? WHERE i = ?", 23, 23)
rescue e : SQLite3::Exception
fail("Expected no exception, but got \"#{e.message}\"")
end
end
end
ensure
File.delete(DB_FILENAME)
end
end
end end

View file

@ -71,6 +71,7 @@ class SQLite3::Statement
def execute(binds : Enumerable | Slice(UInt8), &block) def execute(binds : Enumerable | Slice(UInt8), &block)
result_set = execute(binds) result_set = execute(binds)
yield result_set yield result_set
ensure
close close
end end