class SQLite3::ResultSet

obtain a ResultSet instance via Statement#execute.
very rarely (if ever) be instantiated directly. Instead, clients should
It is a simple cursor over the data that the query returns. It will
The ResultSet object encapsulates the enumerability of a query’s output.

def close

close any other result sets that were spawned from the same statement.
Use with caution! Closing a result set will automatically
Closes the statement that spawned this result set.
def close
  @stmt.close
end

def closed?

Queries whether the underlying statement has been closed or not.
def closed?
  @stmt.closed?
end

def columns

Returns the names of the columns returned by this result set.
def columns
  @stmt.columns
end

def each

rows of the result set.
Required by the Enumerable mixin. Provides an internal iterator over the
def each
  while node = self.next
    yield node
  end
end

def each_hash

each row is yielded as a hash.
Provides an internal iterator over the rows of the result set where
def each_hash
  while node = next_hash
    yield node
  end
end

def eof?

Query whether the cursor has reached the end of the result set or not.
def eof?
  @stmt.done?
end

def initialize db, stmt

given sql text.
Create a new ResultSet attached to the given database, using the
def initialize db, stmt
  @db   = db
  @stmt = stmt
end

def next

types are accessible via the +types+ property.
For hashes, the column names are the keys of the hash, and the column

and the column types are accessible via the +types+ property.
For arrays, the column names are accessible via the +fields+ property,

been set to +true+, in which case the returned value will be a hash.
The returned value will be an array, unless Database#results_as_hash has

according to their types.
corresponding database, the values in the row will be translated
had, this will return +nil+. If type translation is active on the
Obtain the next row from the cursor. If there are no more rows to be
def next
  if @db.results_as_hash
    return next_hash
  end
  row = @stmt.step
  return nil if @stmt.done?
  row = @db.translate_from_db @stmt.types, row
  if row.respond_to?(:fields)
    # FIXME: this can only happen if the translator returns something
    # that responds to `fields`.  Since we're removing the translator
    # in 2.0, we can remove this branch in 2.0.
    row = ArrayWithTypes.new(row)
  else
    # FIXME: the `fields` and `types` methods are deprecated on this
    # object for version 2.0, so we can safely remove this branch
    # as well.
    row = ArrayWithTypesAndFields.new(row)
  end
  row.fields = @stmt.columns
  row.types = @stmt.types
  row
end

def next_hash

Return the next row as a hash
def next_hash
  row = @stmt.step
  return nil if @stmt.done?
  # FIXME: type translation is deprecated, so this can be removed
  # in 2.0
  row = @db.translate_from_db @stmt.types, row
  # FIXME: this can be switched to a regular hash in 2.0
  row = HashWithTypesAndFields[*@stmt.columns.zip(row).flatten]
  # FIXME: these methods are deprecated for version 2.0, so we can remove
  # this code in 2.0
  row.fields = @stmt.columns
  row.types = @stmt.types
  row
end

def reset( *bind_params )

can be rewound and reiterated.
Reset the cursor, so that a result set which has reached end-of-file
def reset( *bind_params )
  @stmt.reset!
  @stmt.bind_params( *bind_params )
  @eof = false
end

def types

Returns the types of the columns returned by this result set.
def types
  @stmt.types
end