Ensure close of statement

This commit is contained in:
Jonne Haß 2015-08-19 18:21:04 +02:00
parent 5b08d2f48b
commit 22d83727df
2 changed files with 31 additions and 0 deletions

View file

@ -109,4 +109,34 @@ describe Database do
it "gets first value" do
with_db(&.get_first_value(%(select 1))).should eq(1)
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

View file

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