update to 0.12 features

clarify expected protocol with ResultSet in docs
minor refactors suggested
This commit is contained in:
Brian J. Cardiff 2016-02-19 18:42:30 -03:00
parent 2cb37d374c
commit 928c1517dc
5 changed files with 19 additions and 17 deletions

View file

@ -28,10 +28,7 @@ module DB
# :nodoc: # :nodoc:
def prepare(query) : Statement def prepare(query) : Statement
stmt = @statements_cache.fetch(query, nil) stmt = @statements_cache.fetch(query, nil)
if stmt.is_a?(Nil) stmt = @statements_cache[query] = build_statement(query) unless stmt
stmt = build_statement(query)
@statements_cache[query] = stmt
end
stmt stmt
end end

View file

@ -79,7 +79,7 @@ module DB
record ExecResult, rows_affected, last_insert_id record ExecResult, rows_affected, last_insert_id
# :nodoc: # :nodoc:
def self.driver_class(driver_name) # : Driver.class def self.driver_class(driver_name) : Driver.class
@@drivers.not_nil![driver_name] @@drivers.not_nil![driver_name]
end end

View file

@ -26,9 +26,6 @@ module DB
# Refer to `Connection`, `Statement` and `ResultSet` for further # Refer to `Connection`, `Statement` and `ResultSet` for further
# driver implementation instructions. # driver implementation instructions.
abstract class Driver abstract class Driver
def initialize
end
abstract def build_connection(db : Database) : Connection abstract def build_connection(db : Database) : Connection
end end
end end

View file

@ -4,6 +4,14 @@ module DB
# See `DB` for a complete sample. # See `DB` for a complete sample.
# #
# Each `#read` call consumes the result and moves to the next column. # Each `#read` call consumes the result and moves to the next column.
# Each column must be read in order.
# At any moment a `#move_next` can be invoked, meaning to skip the
# remaining, or even all the columns, in the current row.
# Also it is not mandatory to consume the whole `ResultSet`, hence an iteration
# through `#each` or `#move_next` can be stopped.
#
# **Note:** depending on how the `ResultSet` was obtained it might be mandatory an
# explicit call to `#close`. Check `QueryMethods#query`.
# #
# ### Note to implementors # ### Note to implementors
# #

View file

@ -46,23 +46,23 @@ module DB
query(*args) do |rs| query(*args) do |rs|
rs.each do rs.each do
# return case rs.read?(rs.column_type(0)) # :-( Some day... # return case rs.read?(rs.column_type(0)) # :-( Some day...
t = rs.column_type(0) case rs.column_type(0)
if t == String when String.class
return rs.read?(String) return rs.read?(String)
elsif t == Int32 when Int32.class
return rs.read?(Int32) return rs.read?(Int32)
elsif t == Int64 when Int64.class
return rs.read?(Int64) return rs.read?(Int64)
elsif t == Float32 when Float32.class
return rs.read?(Float32) return rs.read?(Float32)
elsif t == Float64 when Float64.class
return rs.read?(Float64) return rs.read?(Float64)
elsif t == Slice(UInt8) when Slice(UInt8).class
return rs.read?(Slice(UInt8)) return rs.read?(Slice(UInt8))
elsif t == Nil when Nil.class
return rs.read?(Int32) return rs.read?(Int32)
else else
raise "not implemented for #{t} type" raise "not implemented for #{rs.column_type(0)} type"
end end
end end
end end