class NoSE::Backend::CassandraBackend::DeleteStatementStep

Delete data from an index on the backend

Public Class Methods

new(client, index) click to toggle source
# File lib/nose/backend/cassandra.rb, line 234
def initialize(client, index)
  super

  @index_keys = @index.hash_fields + @index.order_fields.to_set

  # Prepare the statement required to perform the deletion
  delete = "DELETE FROM #{index.key} WHERE "
  delete += @index_keys.map { |key| "\"#{key.id}\" = ?" }.join(' AND ')
  @prepared = client.prepare delete
end

Public Instance Methods

process(results) click to toggle source

Execute the delete for a given set of keys

# File lib/nose/backend/cassandra.rb, line 246
def process(results)
  # Delete each row from the index
  results.each do |result|
    values = delete_values result
    @client.execute(@prepared, arguments: values)
  end
end

Private Instance Methods

delete_values(result) click to toggle source

Get the values used in the WHERE clause for a CQL DELETE

# File lib/nose/backend/cassandra.rb, line 257
def delete_values(result)
  @index_keys.map do |key|
    cur_field = @index.all_fields.find { |field| field.id == key.id }

    if cur_field.is_a?(Fields::IDField)
      Cassandra::Uuid.new(result[key.id].to_i)
    else
      result[key.id]
    end
  end
end