# File lib/sqlite/resultset.rb, line 121
    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