diff --git a/spec/std/db/db_spec.cr b/spec/std/db/db_spec.cr index 89764f0..9f6b9ae 100644 --- a/spec/std/db/db_spec.cr +++ b/spec/std/db/db_spec.cr @@ -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 diff --git a/spec/std/db/dummy_driver.cr b/spec/std/db/dummy_driver.cr index 0f41006..9784ca1 100644 --- a/spec/std/db/dummy_driver.cr +++ b/spec/std/db/dummy_driver.cr @@ -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 diff --git a/src/db/result_set.cr b/src/db/result_set.cr index 202ad57..5696206 100644 --- a/src/db/result_set.cr +++ b/src/db/result_set.cr @@ -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 (?) diff --git a/src/db/statement.cr b/src/db/statement.cr index 2c16a99..563b498 100644 --- a/src/db/statement.cr +++ b/src/db/statement.cr @@ -7,7 +7,9 @@ module DB end def exec(*args) - execute(*args).close + query(*args) do |rs| + rs.exec + end end def scalar(*args)