Class: DataObjects::SqlServer::Reader

Inherits:
Reader
  • Object
show all
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

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

#closeObject



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_countObject



244
245
246
# File 'lib/do_sqlserver.rb', line 244

def field_count
  @fields.size
end

#fieldsObject



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_countObject

REVISIT: This is being deprecated



249
250
251
# File 'lib/do_sqlserver.rb', line 249

def row_count
  @rows.size
end

#valuesObject

Raises:

  • (StandardError)


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