def next
return nil if @eof
if @current_row
result, @current_row = @current_row, nil
else
result = API.step( @vm )
check_eof( result )
end
unless @eof
row = result[:row]
if @db.type_translation
row = @types.zip( row ).map do |type, value|
@db.translator.translate( type, value )
end
end
if @db.results_as_hash
new_row = Hash[ *( @columns.zip( row ).flatten ) ]
row.each_with_index { |value,idx| new_row[idx] = value }
row = new_row
else
row.extend FieldsContainer unless row.respond_to?(:fields)
row.fields = @columns
end
row.extend TypesContainer
row.types = @types
return row
end
nil
end