Class: Aerospike::BatchIndexCommand

Inherits:
MultiCommand show all
Defined in:
lib/aerospike/command/batch_index_command.rb

Overview

:nodoc:

Direct Known Subclasses

BatchIndexExistsCommand

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MultiCommand

#compressed?, #get_node, #parse_group, #parse_key, #parse_record, #parse_result, #read_bytes, #skip_key, #stop, #valid?

Methods inherited from Command

#execute, #set_delete, #set_exists, #set_operate, #set_query, #set_read, #set_read_for_key_only, #set_read_header, #set_scan, #set_touch, #set_udf, #set_write, #write_bins

Constructor Details

#initialize(node, batch, policy, bin_names, results, read_attr) ⇒ BatchIndexCommand

Returns a new instance of BatchIndexCommand.

[View source]

26
27
28
29
30
31
32
33
# File 'lib/aerospike/command/batch_index_command.rb', line 26

def initialize(node, batch, policy, bin_names, results, read_attr)
  super(node)
  @batch = batch
  @policy = policy
  @bin_names = bin_names
  @results = results
  @read_attr = read_attr
end

Instance Attribute Details

#batchObject

Returns the value of attribute batch.


24
25
26
# File 'lib/aerospike/command/batch_index_command.rb', line 24

def batch
  @batch
end

#bin_namesObject

Returns the value of attribute bin_names.


24
25
26
# File 'lib/aerospike/command/batch_index_command.rb', line 24

def bin_names
  @bin_names
end

#policyObject

Returns the value of attribute policy.


24
25
26
# File 'lib/aerospike/command/batch_index_command.rb', line 24

def policy
  @policy
end

#read_attrObject

Returns the value of attribute read_attr.


24
25
26
# File 'lib/aerospike/command/batch_index_command.rb', line 24

def read_attr
  @read_attr
end

#resultsObject

Returns the value of attribute results.


24
25
26
# File 'lib/aerospike/command/batch_index_command.rb', line 24

def results
  @results
end

Instance Method Details

#parse_row(result_code) ⇒ Object

Parse all results in the batch. Add records to shared list. If the record was not found, the bins will be nil.

[View source]

102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/aerospike/command/batch_index_command.rb', line 102

def parse_row(result_code)
  generation = @data_buffer.read_int32(6)
  expiration = @data_buffer.read_int32(10)
  batch_index = @data_buffer.read_int32(14)
  field_count = @data_buffer.read_int16(18)
  op_count = @data_buffer.read_int16(20)

  skip_key(field_count)
  req_key = batch.key_for_index(batch_index)

  if result_code == 0
    record = parse_record(req_key, op_count, generation, expiration)
    results[batch_index] = record
  end
end

#write_bufferObject

[View source]

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/aerospike/command/batch_index_command.rb', line 35

def write_buffer
  bin_name_size = 0
  operation_count = 0
  field_count_row = 1
  field_count = 1

  exp_size = estimate_expression_size(@policy.filter_exp)
  field_count += 1 if exp_size > 0

  if bin_names
    bin_names.each do |bin_name|
      bin_name_size += bin_name.bytesize + OPERATION_HEADER_SIZE
    end
    operation_count = bin_names.length
  end
  begin_cmd
  @data_offset += FIELD_HEADER_SIZE + 4 + 1 # batch.keys.length + flags

  prev = nil
  batch.keys.each do |key|
    @data_offset += key.digest.length + 4 # 4 byte batch offset

    if !prev.nil? && prev.namespace == key.namespace
      @data_offset += 1
    else
      @data_offset += key.namespace.bytesize + FIELD_HEADER_SIZE + 1 + 1 + 2 + 2 # repeat/no-repeat flag + read_attr flags + field_count + operation_count
      @data_offset += bin_name_size
    end
  end
  size_buffer
  write_header_read(policy, read_attr | INFO1_BATCH, 0, 0, field_count, 0)

  write_filter_exp(@policy.filter_exp, exp_size)

  write_field_header(0, Aerospike::FieldType::BATCH_INDEX)
  @data_offset += @data_buffer.write_int32(batch.keys.length, @data_offset)
  @data_offset += @data_buffer.write_byte(1, @data_offset)

  prev = nil

  batch.each_key_with_index do |key, index|
    @data_offset += @data_buffer.write_int32(index, @data_offset)
    @data_offset += @data_buffer.write_binary(key.digest, @data_offset)

    if !prev.nil? && prev.namespace == key.namespace
      @data_offset += @data_buffer.write_byte(1, @data_offset)
    else
      @data_offset += @data_buffer.write_byte(0, @data_offset)
      @data_offset += @data_buffer.write_byte(read_attr, @data_offset)
      @data_offset += @data_buffer.write_int16(field_count_row, @data_offset)
      @data_offset += @data_buffer.write_int16(operation_count, @data_offset)
      write_field_string(key.namespace, Aerospike::FieldType::NAMESPACE)

      if bin_names
        bin_names.each do |bin_name|
          write_operation_for_bin_name(bin_name, Aerospike::Operation::READ)
        end
      end
      prev = key
    end
  end
  end_cmd
  mark_compressed(@policy)
end