diff --git a/spec/custom_drivers_types_spec.cr b/spec/custom_drivers_types_spec.cr index 7b868a6..af8b400 100644 --- a/spec/custom_drivers_types_spec.cr +++ b/spec/custom_drivers_types_spec.cr @@ -197,7 +197,7 @@ describe DB do FooDriver.fake_row = [1] of FooDriver::Any db.query "query" do |rs| rs.move_next - expect_raises(TypeCastError) do + expect_raises(Exception, "FooResultSet#read returned a Int32. A BarValue was expected.") do w.check rs.read(BarValue) end @@ -210,7 +210,7 @@ describe DB do BarDriver.fake_row = [1] of BarDriver::Any db.query "query" do |rs| rs.move_next - expect_raises(TypeCastError) do + expect_raises(Exception, "BarResultSet#read returned a Int32. A FooValue was expected.") do w.check rs.read(FooValue) end diff --git a/src/db/result_set.cr b/src/db/result_set.cr index 374ce76..0bbffcf 100644 --- a/src/db/result_set.cr +++ b/src/db/result_set.cr @@ -76,7 +76,12 @@ module DB # Reads the next column value as a **type** def read(type : T.class) : T forall T - read.as(T) + value = read + if value.is_a?(T) + value + else + raise "#{self.class}#read returned a #{value.class}. A #{T} was expected." + end end # Reads the next columns and returns a tuple of the values.