add `ResultSet#exec` to ensure the query is performed. By default generates a `move_next`.

This commit is contained in:
Brian J. Cardiff 2016-01-30 21:03:02 -03:00
parent 683e6bdfa7
commit 1fb0b8a82b
4 changed files with 28 additions and 1 deletions

View File

@ -50,4 +50,12 @@ describe DB do
db.connection.last_statement.closed?.should be_true
end
end
it "exec should perform statement" do
with_dummy do |db|
db.exec ""
DummyDriver::DummyResultSet.last_result_set.executed?.should be_true
db.connection.last_statement.closed?.should be_true
end
end
end

View File

@ -43,9 +43,20 @@ class DummyDriver < DB::Driver
class DummyResultSet < DB::ResultSet
def initialize(statement, @iterator)
super(statement)
@executed = false
@@last_result_set = self
end
def self.last_result_set
@@last_result_set.not_nil!
end
def executed?
@executed
end
def move_next
@executed = true
@iterator.next.tap do |n|
return false if n.is_a?(Iterator::Stop)
@values = n.each

View File

@ -15,6 +15,12 @@ module DB
@statement.close
end
# :nodoc:
# Ensures it executes the query
def exec
move_next
end
abstract def move_next : Bool
# TODO def empty? : Bool, handle internally with move_next (?)

View File

@ -7,7 +7,9 @@ module DB
end
def exec(*args)
execute(*args).close
query(*args) do |rs|
rs.exec
end
end
def scalar(*args)