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
prev = nil
batch.keys.each do |key|
@data_offset += key.digest.length + 4
if !prev.nil? && prev.namespace == key.namespace
@data_offset += 1
else
@data_offset += key.namespace.bytesize + FIELD_HEADER_SIZE + 1 + 1 + 2 + 2 @data_offset += bin_name_size
end
end
size_buffer
(policy, read_attr | INFO1_BATCH, 0, 0, field_count, 0)
write_filter_exp(@policy.filter_exp, exp_size)
(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
|