    # File lib/sqlite3/resultset.rb, line 80
        def next
          return nil if @eof

          @stmt.must_be_open!

          unless @first_row
            result = @driver.step( @stmt.handle )
            check result
          end

          @first_row = false

          unless @eof
            row = []
            @driver.data_count( @stmt.handle ).times do |column|
              type  = @driver.column_type( @stmt.handle, column )

              if type == Constants::ColumnType::TEXT
                row << @driver.column_text( @stmt.handle, column )
              elsif type == Constants::ColumnType::NULL
                row << nil
              elsif type == Constants::ColumnType::BLOB
                row << @driver.column_blob( @stmt.handle, column )
              else
                row << @driver.column_text( @stmt.handle, column )
              end
            end

            if @db.type_translation
              row = @stmt.types.zip( row ).map do |type, value|
                @db.translator.translate( type, value )
              end
            end

            if @db.results_as_hash
              new_row = Hash[ *( @stmt.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 = @stmt.columns
            end

            row.extend TypesContainer
            row.types = @stmt.types

            return row
          end

          nil
        end