    # File lib/amalgalite/statement.rb, line 259
        def next_row
          row = []
          case rc = @stmt_api.step
          when ResultCode::ROW
            result_meta.each_with_index do |col, idx|
              value = nil
              column_type = @stmt_api.column_type( idx )
              case column_type
              when DataType::TEXT
                value = @stmt_api.column_text( idx )
              when DataType::FLOAT
                value = @stmt_api.column_double( idx )
              when DataType::INTEGER
                value = @stmt_api.column_int64( idx )
              when DataType::NULL
                value = nil
              when DataType::BLOB
                # if the rowid column is encountered, then we can use an incremental
                # blob api, otherwise we have to use the all at once version.
                if using_rowid_column? then
                  value = Amalgalite::Blob.new( :db_blob => SQLite3::Blob.new( db.api,
                                                                               col.schema.db,
                                                                               col.schema.table,
                                                                               col.schema.name,
                                                                               @stmt_api.column_int64( @rowid_index ),
                                                                               "r"),
                                                :column => col.schema)
                else
                  value = Amalgalite::Blob.new( :string => @stmt_api.column_blob( idx ), :column => col.schema )
                end
              else
                raise ::Amalgalite::Error, "BUG! : Unknown SQLite column type of #{column_type}"
              end

              row << db.type_map.result_value_of( col.schema.declared_data_type, value )
            end
            row.fields = result_fields
          when ResultCode::DONE
            row = nil
            write_blobs
          else
            self.close # must close so that the error message is guaranteed to be pushed into the database handler
                       # and we can can call last_error_message on it
            msg = "SQLITE ERROR #{rc} (#{Amalgalite::SQLite3::Constants::ResultCode.name_from_value( rc )}) : #{@db.api.last_error_message}"
            raise Amalgalite::SQLite3::Error, msg
          end
          return row
        end