Class: DataObjects::SqlServer::Reader
- Inherits:
-
Reader
- Object
- Reader
- DataObjects::SqlServer::Reader
- Defined in:
- lib/do_sqlserver.rb
Overview
REVISIT: There is no data type conversion happening here. That will make DataObjects sad.
Instance Method Summary collapse
- #close ⇒ Object
- #field_count ⇒ Object
- #fields ⇒ Object
-
#initialize(command, handle) ⇒ Reader
constructor
A new instance of Reader.
- #next! ⇒ Object
-
#row_count ⇒ Object
REVISIT: This is being deprecated.
- #values ⇒ Object
Constructor Details
#initialize(command, handle) ⇒ Reader
Returns a new instance of Reader.
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/do_sqlserver.rb', line 189 def initialize command, handle @command, @handle = command, handle return unless @handle @fields = handle.column_names # REVISIT: Prefetch results like AR's adapter does. ADO is a bit strange about handle lifetimes, don't move this until you can test it. @rows = [] types = @command.types if types && types.size != @fields.size @handle.finish if @handle && @handle.respond_to?(:finish) && !@handle.finished? raise ArgumentError, "Field-count mismatch. Expected #{types.size} fields, but the query yielded #{@fields.size}" end @handle.each do |row| field = -1 @rows << row.map do |value| field += 1 next value unless types if (t = types[field]) == Integer Integer(value) elsif t == Float Float(value) else t.new(value) end end end @handle.finish if @handle && @handle.respond_to?(:finish) && !@handle.finished? @current_row = -1 end |
Instance Method Details
#close ⇒ Object
220 221 222 223 224 225 226 227 228 |
# File 'lib/do_sqlserver.rb', line 220 def close if @handle @handle.finish if @handle.respond_to?(:finish) && !@handle.finished? @handle = nil true else false end end |
#field_count ⇒ Object
244 245 246 |
# File 'lib/do_sqlserver.rb', line 244 def field_count @fields.size end |
#fields ⇒ Object
240 241 242 |
# File 'lib/do_sqlserver.rb', line 240 def fields @fields end |
#next! ⇒ Object
230 231 232 |
# File 'lib/do_sqlserver.rb', line 230 def next! (@current_row += 1) < @rows.size end |
#row_count ⇒ Object
REVISIT: This is being deprecated
249 250 251 |
# File 'lib/do_sqlserver.rb', line 249 def row_count @rows.size end |
#values ⇒ Object
234 235 236 237 238 |
# File 'lib/do_sqlserver.rb', line 234 def values raise StandardError.new("First row has not been fetched") if @current_row < 0 raise StandardError.new("Last row has been processed") if @current_row >= @rows.size @rows[@current_row] end |