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

Methods
Included Modules
Classes and Modules
Class SQLite3::ResultSet::ArrayWithTypes
Class SQLite3::ResultSet::ArrayWithTypesAndFields
Class SQLite3::ResultSet::HashWithTypes
Public Class methods
new( db, stmt )

Create a new ResultSet attached to the given database, using the given sql text.

    # File lib/sqlite3/resultset.rb, line 34
34:     def initialize( db, stmt )
35:       @db = db
36:       @driver = @db.driver
37:       @stmt = stmt
38:       commence
39:     end
Public Instance methods
close()

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

     # File lib/sqlite3/resultset.rb, line 155
155:     def close
156:       @stmt.close
157:     end
closed?()

Queries whether the underlying statement has been closed or not.

     # File lib/sqlite3/resultset.rb, line 160
160:     def closed?
161:       @stmt.closed?
162:     end
columns()

Returns the names of the columns returned by this result set.

     # File lib/sqlite3/resultset.rb, line 170
170:     def columns
171:       @stmt.columns
172:     end
each() {|row| ...}

Required by the Enumerable mixin. Provides an internal iterator over the rows of the result set.

     # File lib/sqlite3/resultset.rb, line 146
146:     def each
147:       while row=self.next
148:         yield row
149:       end
150:     end
eof?()

Query whether the cursor has reached the end of the result set or not.

    # File lib/sqlite3/resultset.rb, line 72
72:     def eof?
73:       @eof
74:     end
next()

Obtain the next row from the cursor. If there are no more rows to be had, this will return nil. If type translation is active on the corresponding database, the values in the row will be translated according to their types.

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

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

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

     # File lib/sqlite3/resultset.rb, line 89
 89:     def next
 90:       return nil if @eof
 91: 
 92:       @stmt.must_be_open!
 93: 
 94:       unless @first_row
 95:         result = @driver.step( @stmt.handle )
 96:         check result
 97:       end
 98: 
 99:       @first_row = false
100: 
101:       unless @eof
102:         row = []
103:         @driver.data_count( @stmt.handle ).times do |column|
104:           type  = @driver.column_type( @stmt.handle, column )
105: 
106:           if type == Constants::ColumnType::TEXT
107:             row << @driver.column_text( @stmt.handle, column )
108:           elsif type == Constants::ColumnType::NULL
109:             row << nil
110:           elsif type == Constants::ColumnType::BLOB
111:             row << @driver.column_blob( @stmt.handle, column )
112:           else
113:             row << @driver.column_text( @stmt.handle, column )
114:           end
115:         end
116: 
117:         if @db.type_translation
118:           row = @stmt.types.zip( row ).map do |type, value|
119:             @db.translator.translate( type, value )
120:           end
121:         end
122: 
123:         if @db.results_as_hash
124:           new_row = HashWithTypes[ *( @stmt.columns.zip( row ).to_a.flatten ) ]
125:           row.each_with_index { |value,idx| new_row[idx] = value }
126:           row = new_row
127:         else
128:           if row.respond_to?(:fields)
129:             row = ArrayWithTypes.new(row)
130:           else
131:             row = ArrayWithTypesAndFields.new(row)
132:           end
133:           row.fields = @stmt.columns
134:         end
135: 
136:         row.types = @stmt.types
137: 
138:         return row
139:       end
140: 
141:       nil
142:     end
reset( *bind_params )

Reset the cursor, so that a result set which has reached end-of-file can be rewound and reiterated.

    # File lib/sqlite3/resultset.rb, line 62
62:     def reset( *bind_params )
63:       @stmt.must_be_open!
64:       @stmt.reset!(false)
65:       @driver.reset( @stmt.handle )
66:       @stmt.bind_params( *bind_params )
67:       @eof = false
68:       commence
69:     end
types()

Returns the types of the columns returned by this result set.

     # File lib/sqlite3/resultset.rb, line 165
165:     def types
166:       @stmt.types
167:     end