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
Use with caution! Closing a result set will automatically
Closes the statement that spawned this result set.
def close @stmt.close end
def closed?
def closed? @stmt.closed? end
def columns
def columns @stmt.columns end
def each
Required by the Enumerable mixin. Provides an internal iterator over the
def each while node = self.next yield node end end
def each_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?
def eof? @stmt.done? end
def initialize db, stmt
Create a new ResultSet attached to the given database, using the
def initialize db, stmt @db = db @stmt = stmt end
def next
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
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 )
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
def types @stmt.types end