cassandra-driver 3.0.0.beta.1-java → 3.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +106 -39
  3. data/lib/cassandra.rb +396 -148
  4. data/lib/cassandra/address_resolution.rb +1 -1
  5. data/lib/cassandra/address_resolution/policies/ec2_multi_region.rb +1 -1
  6. data/lib/cassandra/address_resolution/policies/none.rb +1 -1
  7. data/lib/cassandra/aggregate.rb +21 -7
  8. data/lib/cassandra/argument.rb +2 -2
  9. data/lib/cassandra/attr_boolean.rb +33 -0
  10. data/lib/cassandra/auth.rb +6 -5
  11. data/lib/cassandra/auth/providers.rb +1 -1
  12. data/lib/cassandra/auth/providers/password.rb +5 -13
  13. data/lib/cassandra/cassandra_logger.rb +80 -0
  14. data/lib/cassandra/cluster.rb +49 -9
  15. data/lib/cassandra/cluster/client.rb +835 -209
  16. data/lib/cassandra/cluster/connection_pool.rb +2 -2
  17. data/lib/cassandra/cluster/connector.rb +86 -27
  18. data/lib/cassandra/cluster/control_connection.rb +222 -95
  19. data/lib/cassandra/cluster/failed_connection.rb +1 -1
  20. data/lib/cassandra/cluster/metadata.rb +14 -8
  21. data/lib/cassandra/cluster/options.rb +68 -22
  22. data/lib/cassandra/cluster/registry.rb +81 -17
  23. data/lib/cassandra/cluster/schema.rb +70 -8
  24. data/lib/cassandra/cluster/schema/cql_type_parser.rb +15 -10
  25. data/lib/cassandra/cluster/schema/fetchers.rb +601 -241
  26. data/lib/cassandra/cluster/schema/fqcn_type_parser.rb +39 -38
  27. data/lib/cassandra/cluster/schema/partitioners.rb +1 -1
  28. data/lib/cassandra/cluster/schema/partitioners/murmur3.rb +6 -8
  29. data/lib/cassandra/cluster/schema/partitioners/ordered.rb +1 -1
  30. data/lib/cassandra/cluster/schema/partitioners/random.rb +1 -1
  31. data/lib/cassandra/cluster/schema/replication_strategies.rb +1 -1
  32. data/lib/cassandra/cluster/schema/replication_strategies/network_topology.rb +19 -18
  33. data/lib/cassandra/cluster/schema/replication_strategies/none.rb +1 -1
  34. data/lib/cassandra/cluster/schema/replication_strategies/simple.rb +1 -1
  35. data/lib/cassandra/column.rb +4 -23
  36. data/lib/cassandra/column_container.rb +322 -0
  37. data/lib/cassandra/compression.rb +1 -1
  38. data/lib/cassandra/compression/compressors/lz4.rb +7 -8
  39. data/lib/cassandra/compression/compressors/snappy.rb +4 -3
  40. data/lib/cassandra/driver.rb +107 -46
  41. data/lib/cassandra/errors.rb +303 -52
  42. data/lib/cassandra/execution/info.rb +16 -5
  43. data/lib/cassandra/execution/options.rb +102 -55
  44. data/lib/cassandra/execution/trace.rb +16 -9
  45. data/lib/cassandra/executors.rb +1 -1
  46. data/lib/cassandra/function.rb +19 -13
  47. data/lib/cassandra/function_collection.rb +85 -0
  48. data/lib/cassandra/future.rb +101 -49
  49. data/lib/cassandra/host.rb +25 -5
  50. data/lib/cassandra/index.rb +118 -0
  51. data/lib/cassandra/keyspace.rb +169 -33
  52. data/lib/cassandra/listener.rb +1 -1
  53. data/lib/cassandra/load_balancing.rb +2 -2
  54. data/lib/cassandra/load_balancing/policies.rb +1 -1
  55. data/lib/cassandra/load_balancing/policies/dc_aware_round_robin.rb +39 -25
  56. data/lib/cassandra/load_balancing/policies/round_robin.rb +8 -1
  57. data/lib/cassandra/load_balancing/policies/token_aware.rb +22 -13
  58. data/lib/cassandra/load_balancing/policies/white_list.rb +18 -5
  59. data/lib/cassandra/materialized_view.rb +90 -0
  60. data/lib/cassandra/null_logger.rb +27 -6
  61. data/lib/cassandra/protocol.rb +1 -1
  62. data/lib/cassandra/protocol/coder.rb +81 -42
  63. data/lib/cassandra/protocol/cql_byte_buffer.rb +58 -44
  64. data/lib/cassandra/protocol/cql_protocol_handler.rb +57 -54
  65. data/lib/cassandra/protocol/request.rb +6 -7
  66. data/lib/cassandra/protocol/requests/auth_response_request.rb +3 -3
  67. data/lib/cassandra/protocol/requests/batch_request.rb +17 -8
  68. data/lib/cassandra/protocol/requests/credentials_request.rb +3 -3
  69. data/lib/cassandra/protocol/requests/execute_request.rb +39 -20
  70. data/lib/cassandra/protocol/requests/options_request.rb +1 -1
  71. data/lib/cassandra/protocol/requests/prepare_request.rb +5 -5
  72. data/lib/cassandra/protocol/requests/query_request.rb +28 -23
  73. data/lib/cassandra/protocol/requests/register_request.rb +2 -2
  74. data/lib/cassandra/protocol/requests/startup_request.rb +8 -8
  75. data/lib/cassandra/protocol/requests/void_query_request.rb +1 -1
  76. data/lib/cassandra/protocol/response.rb +3 -4
  77. data/lib/cassandra/protocol/responses/already_exists_error_response.rb +12 -2
  78. data/lib/cassandra/protocol/responses/auth_challenge_response.rb +4 -5
  79. data/lib/cassandra/protocol/responses/auth_success_response.rb +4 -5
  80. data/lib/cassandra/protocol/responses/authenticate_response.rb +4 -5
  81. data/lib/cassandra/protocol/responses/error_response.rb +104 -17
  82. data/lib/cassandra/protocol/responses/event_response.rb +3 -4
  83. data/lib/cassandra/protocol/responses/function_failure_error_response.rb +13 -2
  84. data/lib/cassandra/protocol/responses/prepared_result_response.rb +14 -9
  85. data/lib/cassandra/protocol/responses/raw_rows_result_response.rb +14 -9
  86. data/lib/cassandra/protocol/responses/read_failure_error_response.rb +26 -4
  87. data/lib/cassandra/protocol/responses/read_timeout_error_response.rb +22 -3
  88. data/lib/cassandra/protocol/responses/ready_response.rb +6 -7
  89. data/lib/cassandra/protocol/responses/result_response.rb +11 -10
  90. data/lib/cassandra/protocol/responses/rows_result_response.rb +8 -7
  91. data/lib/cassandra/protocol/responses/schema_change_event_response.rb +8 -8
  92. data/lib/cassandra/protocol/responses/schema_change_result_response.rb +19 -13
  93. data/lib/cassandra/protocol/responses/set_keyspace_result_response.rb +5 -6
  94. data/lib/cassandra/protocol/responses/status_change_event_response.rb +5 -6
  95. data/lib/cassandra/protocol/responses/supported_response.rb +4 -5
  96. data/lib/cassandra/protocol/responses/topology_change_event_response.rb +4 -5
  97. data/lib/cassandra/protocol/responses/unavailable_error_response.rb +20 -3
  98. data/lib/cassandra/protocol/responses/unprepared_error_response.rb +11 -2
  99. data/lib/cassandra/protocol/responses/void_result_response.rb +4 -5
  100. data/lib/cassandra/protocol/responses/write_failure_error_response.rb +26 -4
  101. data/lib/cassandra/protocol/responses/write_timeout_error_response.rb +22 -3
  102. data/lib/cassandra/protocol/v1.rb +98 -37
  103. data/lib/cassandra/protocol/v3.rb +121 -50
  104. data/lib/cassandra/protocol/v4.rb +172 -68
  105. data/lib/cassandra/reconnection.rb +1 -1
  106. data/lib/cassandra/reconnection/policies.rb +1 -1
  107. data/lib/cassandra/reconnection/policies/constant.rb +2 -4
  108. data/lib/cassandra/reconnection/policies/exponential.rb +6 -6
  109. data/lib/cassandra/result.rb +55 -20
  110. data/lib/cassandra/retry.rb +8 -8
  111. data/lib/cassandra/retry/policies.rb +1 -1
  112. data/lib/cassandra/retry/policies/default.rb +1 -1
  113. data/lib/cassandra/retry/policies/downgrading_consistency.rb +4 -2
  114. data/lib/cassandra/retry/policies/fallthrough.rb +1 -1
  115. data/lib/cassandra/session.rb +24 -16
  116. data/lib/cassandra/statement.rb +1 -1
  117. data/lib/cassandra/statements.rb +1 -1
  118. data/lib/cassandra/statements/batch.rb +16 -10
  119. data/lib/cassandra/statements/bound.rb +10 -3
  120. data/lib/cassandra/statements/prepared.rb +62 -18
  121. data/lib/cassandra/statements/simple.rb +23 -10
  122. data/lib/cassandra/statements/void.rb +1 -1
  123. data/lib/cassandra/table.rb +53 -185
  124. data/lib/cassandra/time.rb +11 -6
  125. data/lib/cassandra/time_uuid.rb +12 -14
  126. data/lib/cassandra/timestamp_generator.rb +37 -0
  127. data/lib/cassandra/timestamp_generator/simple.rb +38 -0
  128. data/lib/cassandra/timestamp_generator/ticking_on_duplicate.rb +58 -0
  129. data/lib/cassandra/tuple.rb +4 -4
  130. data/lib/cassandra/types.rb +109 -71
  131. data/lib/cassandra/udt.rb +66 -50
  132. data/lib/cassandra/util.rb +155 -15
  133. data/lib/cassandra/uuid.rb +20 -21
  134. data/lib/cassandra/uuid/generator.rb +7 -5
  135. data/lib/cassandra/version.rb +2 -2
  136. data/lib/cassandra_murmur3.jar +0 -0
  137. data/lib/datastax/cassandra.rb +1 -1
  138. metadata +27 -16
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -128,6 +128,13 @@ module Cassandra
128
128
 
129
129
  Plan.new(hosts, position)
130
130
  end
131
+
132
+ # @private
133
+ def inspect
134
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} " \
135
+ "hosts=#{@hosts.inspect}, " \
136
+ "position=#{@position.inspect}>"
137
+ end
131
138
  end
132
139
  end
133
140
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -35,11 +35,10 @@ module Cassandra
35
35
  until @hosts.empty?
36
36
  host = @hosts.shift
37
37
 
38
- if @policy.distance(host) == :local
39
- @seen[host] = true
40
- @next = host
41
- break
42
- end
38
+ next unless @policy.distance(host) == :local
39
+ @seen[host] = true
40
+ @next = host
41
+ break
43
42
  end
44
43
 
45
44
  return true if @next
@@ -100,9 +99,12 @@ module Cassandra
100
99
  # under-utilizes read caching and forces multiple replicas to cache
101
100
  # the same read statements.
102
101
  def initialize(wrapped_policy, shuffle = true)
103
- methods = [:host_up, :host_down, :host_found, :host_lost, :setup, :teardown, :distance, :plan]
102
+ methods = [:host_up, :host_down, :host_found, :host_lost, :setup, :teardown,
103
+ :distance, :plan]
104
104
 
105
- Util.assert_responds_to_all(methods, wrapped_policy) { "supplied policy must respond to #{methods.inspect}, but doesn't" }
105
+ Util.assert_responds_to_all(methods, wrapped_policy) do
106
+ "supplied policy must respond to #{methods.inspect}, but doesn't"
107
+ end
106
108
 
107
109
  @policy = wrapped_policy
108
110
  @shuffle = !!shuffle
@@ -126,14 +128,21 @@ module Cassandra
126
128
  replicas = @cluster.find_replicas(keyspace, statement)
127
129
  return @policy.plan(keyspace, statement, options) if replicas.empty?
128
130
 
129
- if @shuffle
130
- replicas = replicas.shuffle
131
- else
132
- replicas = replicas.dup
133
- end
131
+ replicas = if @shuffle
132
+ replicas.shuffle
133
+ else
134
+ replicas.dup
135
+ end
134
136
 
135
137
  Plan.new(replicas, @policy, keyspace, statement, options)
136
138
  end
139
+
140
+ # @private
141
+ def inspect
142
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} " \
143
+ "policy=#{@policy.inspect}, " \
144
+ "shuffle=#{@shuffle.inspect}>"
145
+ end
137
146
  end
138
147
  end
139
148
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -35,9 +35,14 @@ module Cassandra
35
35
  # @param wrapped_policy [Cassandra::LoadBalancing::Policy] actual policy to filter
36
36
  # @raise [ArgumentError] if arguments are of unexpected types
37
37
  def initialize(ips, wrapped_policy)
38
- Util.assert_instance_of(::Enumerable, ips) { "ips must be an Enumerable, #{ips.inspect} given" }
39
- methods = [:host_up, :host_down, :host_found, :host_lost, :setup, :teardown, :distance, :plan]
40
- Util.assert_responds_to_all(methods, wrapped_policy) { "supplied policy must respond to #{methods.inspect}, but doesn't" }
38
+ Util.assert_instance_of(::Enumerable, ips) do
39
+ "ips must be an Enumerable, #{ips.inspect} given"
40
+ end
41
+ methods = [:host_up, :host_down, :host_found, :host_lost, :setup, :teardown,
42
+ :distance, :plan]
43
+ Util.assert_responds_to_all(methods, wrapped_policy) do
44
+ "supplied policy must respond to #{methods.inspect}, but doesn't"
45
+ end
41
46
 
42
47
  @ips = ::Set.new
43
48
  @policy = wrapped_policy
@@ -49,7 +54,8 @@ module Cassandra
49
54
  when ::String
50
55
  @ips << ::IPAddr.new(ip)
51
56
  else
52
- raise ::ArgumentError, "each ip must be a String or IPAddr, #{ip.inspect} given"
57
+ raise ::ArgumentError, 'each ip must be a String or IPAddr, ' \
58
+ "#{ip.inspect} given"
53
59
  end
54
60
  end
55
61
  end
@@ -81,6 +87,13 @@ module Cassandra
81
87
  def host_down(host)
82
88
  @policy.host_down(host) if @ips.include?(host.ip)
83
89
  end
90
+
91
+ # @private
92
+ def inspect
93
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} " \
94
+ "policy=#{@policy.inspect}, " \
95
+ "ips=#{@ips.inspect}>"
96
+ end
84
97
  end
85
98
  end
86
99
  end
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ # Copyright 2013-2016 DataStax, Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #++
18
+
19
+ module Cassandra
20
+ # Represents a cassandra materialized view
21
+ # @see Cassandra::Keyspace#each_materialized_view
22
+ # @see Cassandra::Keyspace#materialized_view
23
+ class MaterializedView < ColumnContainer
24
+ # @return [Table] the table that this materialized view applies to.
25
+ attr_reader :base_table
26
+
27
+ # @private
28
+ def initialize(keyspace,
29
+ name,
30
+ partition_key,
31
+ clustering_columns,
32
+ other_columns,
33
+ options,
34
+ include_all_columns,
35
+ where_clause,
36
+ base_table,
37
+ id)
38
+ super(keyspace, name, partition_key, clustering_columns, other_columns, options, id)
39
+ @include_all_columns = include_all_columns
40
+ @where_clause = where_clause
41
+ @base_table = base_table
42
+ end
43
+
44
+ # @return [String] a cql representation of this materialized view
45
+ def to_cql
46
+ keyspace_name = Util.escape_name(@keyspace.name)
47
+ cql = "CREATE MATERIALIZED VIEW #{keyspace_name}.#{Util.escape_name(@name)} AS\nSELECT "
48
+ cql << if @include_all_columns
49
+ '*'
50
+ else
51
+ @columns.map do |column|
52
+ Util.escape_name(column.name)
53
+ end.join(', ')
54
+ end
55
+ cql << "\nFROM #{keyspace_name}.#{Util.escape_name(@base_table.name)}"
56
+ cql << "\nWHERE #{@where_clause}" if @where_clause
57
+ cql << "\nPRIMARY KEY (("
58
+ cql << @partition_key.map do |column|
59
+ Util.escape_name(column.name)
60
+ end.join(', ')
61
+ cql << ')'
62
+ unless @clustering_columns.empty?
63
+ cql << ', '
64
+ cql << @clustering_columns.map do |column|
65
+ Util.escape_name(column.name)
66
+ end.join(', ')
67
+ end
68
+ cql << ")\nWITH #{@options.to_cql.split("\n").join("\n ")};"
69
+ end
70
+
71
+ # @private
72
+ def eql?(other)
73
+ other.is_a?(MaterializedView) &&
74
+ super.eql?(other) &&
75
+ @include_all_columns == other.include_all_columns &&
76
+ @where_clause == other.where_clause &&
77
+ @base_table == other.base_table
78
+ end
79
+ alias == eql?
80
+
81
+ private
82
+
83
+ # We need these accessors for eql? to work, but we don't want random users to
84
+ # get these.
85
+
86
+ # @private
87
+ attr_reader :include_all_columns, :where_clause
88
+ protected :include_all_columns, :where_clause
89
+ end
90
+ end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -20,16 +20,37 @@ module Cassandra
20
20
  # @private
21
21
  class NullLogger
22
22
  def close(*); end
23
+
23
24
  def debug(*); end
24
- def debug?; false end
25
+
26
+ def debug?
27
+ false
28
+ end
29
+
25
30
  def error(*); end
26
- def error?; false end
31
+
32
+ def error?
33
+ false
34
+ end
35
+
27
36
  def fatal(*); end
28
- def fatal?; false end
37
+
38
+ def fatal?
39
+ false
40
+ end
41
+
29
42
  def info(*); end
30
- def info?; false end
43
+
44
+ def info?
45
+ false
46
+ end
47
+
31
48
  def unknown(*); end
49
+
32
50
  def warn(*); end
33
- def warn?; false end
51
+
52
+ def warn?
53
+ false
54
+ end
34
55
  end
35
56
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # Copyright 2013-2015 DataStax, Inc.
4
+ # Copyright 2013-2016 DataStax, Inc.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -18,13 +18,15 @@
18
18
 
19
19
  module Cassandra
20
20
  module Protocol
21
- module Coder; extend self
21
+ module Coder
22
+ module_function
23
+
22
24
  GLOBAL_TABLES_SPEC_FLAG = 0x01
23
25
  HAS_MORE_PAGES_FLAG = 0x02
24
26
  NO_METADATA_FLAG = 0x04
25
27
 
26
28
  def write_values_v4(buffer, values, types, names = EMPTY_LIST)
27
- if values && values.size > 0
29
+ if values && !values.empty?
28
30
  buffer.append_short(values.size)
29
31
  values.zip(types, names) do |(value, type, name)|
30
32
  buffer.append_string(name) if name
@@ -109,7 +111,9 @@ module Cassandra
109
111
  when :time then write_time(buffer, value)
110
112
  when :date then write_date(buffer, value)
111
113
  when :list, :set then write_list_v4(buffer, value, type.value_type)
112
- when :map then write_map_v4(buffer, value, type.key_type, type.value_type)
114
+ when :map then write_map_v4(buffer, value,
115
+ type.key_type,
116
+ type.value_type)
113
117
  when :udt then write_udt_v4(buffer, value, type.fields)
114
118
  when :tuple then write_tuple_v4(buffer, value, type.members)
115
119
  else
@@ -121,18 +125,23 @@ module Cassandra
121
125
  flags = buffer.read_int
122
126
  columns_count = buffer.read_int
123
127
  pk_count = buffer.read_int
124
- pk_specs = ::Array.new(pk_count) {|i| buffer.read_short}
128
+ pk_specs = ::Array.new(pk_count) {|_i| buffer.read_short}
125
129
 
126
130
  if flags & GLOBAL_TABLES_SPEC_FLAG == GLOBAL_TABLES_SPEC_FLAG
127
131
  keyspace_name = buffer.read_string
128
132
  table_name = buffer.read_string
129
133
 
130
- column_specs = ::Array.new(columns_count) do |i|
134
+ column_specs = ::Array.new(columns_count) do |_i|
131
135
  [keyspace_name, table_name, buffer.read_string, read_type_v4(buffer)]
132
136
  end
133
137
  else
134
- column_specs = ::Array.new(columns_count) do |i|
135
- [buffer.read_string, buffer.read_string, buffer.read_string, read_type_v4(buffer)]
138
+ column_specs = ::Array.new(columns_count) do |_i|
139
+ [
140
+ buffer.read_string,
141
+ buffer.read_string,
142
+ buffer.read_string,
143
+ read_type_v4(buffer)
144
+ ]
136
145
  end
137
146
  end
138
147
 
@@ -152,12 +161,17 @@ module Cassandra
152
161
  keyspace_name = buffer.read_string
153
162
  table_name = buffer.read_string
154
163
 
155
- column_specs = ::Array.new(count) do |i|
164
+ column_specs = ::Array.new(count) do |_i|
156
165
  [keyspace_name, table_name, buffer.read_string, read_type_v4(buffer)]
157
166
  end
158
167
  else
159
- column_specs = ::Array.new(count) do |i|
160
- [buffer.read_string, buffer.read_string, buffer.read_string, read_type_v4(buffer)]
168
+ column_specs = ::Array.new(count) do |_i|
169
+ [
170
+ buffer.read_string,
171
+ buffer.read_string,
172
+ buffer.read_string,
173
+ read_type_v4(buffer)
174
+ ]
161
175
  end
162
176
  end
163
177
  end
@@ -194,17 +208,21 @@ module Cassandra
194
208
  when 0x0030
195
209
  keyspace = buffer.read_string
196
210
  name = buffer.read_string
197
- fields = ::Array.new(buffer.read_short) { [buffer.read_string, read_type_v4(buffer)] }
211
+ fields = ::Array.new(buffer.read_short) do
212
+ [buffer.read_string, read_type_v4(buffer)]
213
+ end
198
214
 
199
215
  Types.udt(keyspace, name, fields)
200
- when 0x0031 then Types.tuple(*::Array.new(buffer.read_short) { read_type_v4(buffer) })
216
+ when 0x0031 then Types.tuple(
217
+ *::Array.new(buffer.read_short) { read_type_v4(buffer) }
218
+ )
201
219
  else
202
220
  raise Errors::DecodingError, %(Unsupported column type: #{id})
203
221
  end
204
222
  end
205
223
 
206
224
  def read_values_v4(buffer, column_metadata)
207
- ::Array.new(buffer.read_int) do |i|
225
+ ::Array.new(buffer.read_int) do |_i|
208
226
  row = ::Hash.new
209
227
 
210
228
  column_metadata.each do |(_, _, column, type)|
@@ -274,11 +292,11 @@ module Cassandra
274
292
  values = ::Hash.new
275
293
 
276
294
  fields.each do |field|
277
- if length - buffer.length >= size
278
- values[field.name] = nil
279
- else
280
- values[field.name] = read_value_v4(buffer, field.type)
281
- end
295
+ values[field.name] = if length - buffer.length >= size
296
+ nil
297
+ else
298
+ read_value_v4(buffer, field.type)
299
+ end
282
300
  end
283
301
 
284
302
  Cassandra::UDT::Strict.new(keyspace, name, fields, values)
@@ -302,7 +320,7 @@ module Cassandra
302
320
  end
303
321
 
304
322
  def write_values_v3(buffer, values, types, names = EMPTY_LIST)
305
- if values && values.size > 0
323
+ if values && !values.empty?
306
324
  buffer.append_short(values.size)
307
325
  values.zip(types, names) do |(value, type, name)|
308
326
  buffer.append_string(name) if name
@@ -378,7 +396,10 @@ module Cassandra
378
396
  when :text then write_text(buffer, value)
379
397
  when :varint then write_varint(buffer, value)
380
398
  when :list, :set then write_list_v3(buffer, value, type.value_type)
381
- when :map then write_map_v3(buffer, value, type.key_type, type.value_type)
399
+ when :map then write_map_v3(buffer,
400
+ value,
401
+ type.key_type,
402
+ type.value_type)
382
403
  when :udt then write_udt_v3(buffer, value, type.fields)
383
404
  when :tuple then write_tuple_v3(buffer, value, type.members)
384
405
  else
@@ -387,7 +408,7 @@ module Cassandra
387
408
  end
388
409
 
389
410
  def read_values_v3(buffer, column_metadata)
390
- ::Array.new(buffer.read_int) do |i|
411
+ ::Array.new(buffer.read_int) do |_i|
391
412
  row = ::Hash.new
392
413
 
393
414
  column_metadata.each do |(_, _, column, type)|
@@ -453,11 +474,11 @@ module Cassandra
453
474
  values = ::Hash.new
454
475
 
455
476
  fields.each do |field|
456
- if length - buffer.length >= size
457
- values[field.name] = nil
458
- else
459
- values[field.name] = read_value_v3(buffer, field.type)
460
- end
477
+ values[field.name] = if length - buffer.length >= size
478
+ nil
479
+ else
480
+ read_value_v3(buffer, field.type)
481
+ end
461
482
  end
462
483
 
463
484
  Cassandra::UDT::Strict.new(keyspace, name, fields, values)
@@ -493,12 +514,17 @@ module Cassandra
493
514
  keyspace_name = buffer.read_string
494
515
  table_name = buffer.read_string
495
516
 
496
- column_specs = ::Array.new(count) do |i|
517
+ column_specs = ::Array.new(count) do |_i|
497
518
  [keyspace_name, table_name, buffer.read_string, read_type_v3(buffer)]
498
519
  end
499
520
  else
500
- column_specs = ::Array.new(count) do |i|
501
- [buffer.read_string, buffer.read_string, buffer.read_string, read_type_v3(buffer)]
521
+ column_specs = ::Array.new(count) do |_i|
522
+ [
523
+ buffer.read_string,
524
+ buffer.read_string,
525
+ buffer.read_string,
526
+ read_type_v3(buffer)
527
+ ]
502
528
  end
503
529
  end
504
530
  end
@@ -531,17 +557,21 @@ module Cassandra
531
557
  when 0x0030
532
558
  keyspace = buffer.read_string
533
559
  name = buffer.read_string
534
- fields = ::Array.new(buffer.read_short) { [buffer.read_string, read_type_v3(buffer)] }
560
+ fields = ::Array.new(buffer.read_short) do
561
+ [buffer.read_string, read_type_v3(buffer)]
562
+ end
535
563
 
536
564
  Types.udt(keyspace, name, fields)
537
- when 0x0031 then Types.tuple(*::Array.new(buffer.read_short) { read_type_v3(buffer) })
565
+ when 0x0031 then Types.tuple(
566
+ *::Array.new(buffer.read_short) { read_type_v3(buffer) }
567
+ )
538
568
  else
539
569
  raise Errors::DecodingError, %(Unsupported column type: #{id})
540
570
  end
541
571
  end
542
572
 
543
573
  def write_values_v1(buffer, values, types)
544
- if values && values.size > 0
574
+ if values && !values.empty?
545
575
  buffer.append_short(values.size)
546
576
  values.each_with_index do |value, index|
547
577
  write_value_v1(buffer, value, types[index])
@@ -596,14 +626,17 @@ module Cassandra
596
626
  when :timeuuid, :uuid then write_uuid(buffer, value)
597
627
  when :varint then write_varint(buffer, value)
598
628
  when :list, :set then write_list_v1(buffer, value, type.value_type)
599
- when :map then write_map_v1(buffer, value, type.key_type, type.value_type)
629
+ when :map then write_map_v1(buffer,
630
+ value,
631
+ type.key_type,
632
+ type.value_type)
600
633
  else
601
634
  raise Errors::EncodingError, %(Unsupported value type: #{type})
602
635
  end
603
636
  end
604
637
 
605
638
  def read_values_v1(buffer, column_metadata)
606
- ::Array.new(buffer.read_int) do |i|
639
+ ::Array.new(buffer.read_int) do |_i|
607
640
  row = ::Hash.new
608
641
 
609
642
  column_metadata.each do |(_, _, column, type)|
@@ -644,7 +677,8 @@ module Cassandra
644
677
  value = ::Hash.new
645
678
 
646
679
  buffer.read_short.times do
647
- value[read_short_value(buffer, key_type)] = read_short_value(buffer, value_type)
680
+ value[read_short_value(buffer, key_type)] =
681
+ read_short_value(buffer, value_type)
648
682
  end
649
683
 
650
684
  value
@@ -678,12 +712,17 @@ module Cassandra
678
712
  keyspace_name = buffer.read_string
679
713
  table_name = buffer.read_string
680
714
 
681
- column_specs = ::Array.new(count) do |i|
715
+ column_specs = ::Array.new(count) do |_i|
682
716
  [keyspace_name, table_name, buffer.read_string, read_type_v1(buffer)]
683
717
  end
684
718
  else
685
- column_specs = ::Array.new(count) do |i|
686
- [buffer.read_string, buffer.read_string, buffer.read_string, read_type_v1(buffer)]
719
+ column_specs = ::Array.new(count) do |_i|
720
+ [
721
+ buffer.read_string,
722
+ buffer.read_string,
723
+ buffer.read_string,
724
+ read_type_v1(buffer)
725
+ ]
687
726
  end
688
727
  end
689
728
  end
@@ -721,7 +760,7 @@ module Cassandra
721
760
  end
722
761
 
723
762
  def read_ascii(buffer)
724
- value = buffer.read_bytes
763
+ value = buffer.read_bytes
725
764
  value && value.force_encoding(::Encoding::ASCII)
726
765
  end
727
766
 
@@ -729,7 +768,7 @@ module Cassandra
729
768
  read_size(buffer) && buffer.read_long
730
769
  end
731
770
 
732
- alias :read_counter :read_bigint
771
+ alias read_counter read_bigint
733
772
 
734
773
  def read_boolean(buffer)
735
774
  read_size(buffer) && buffer.read(1) == Constants::TRUE_BYTE
@@ -810,7 +849,7 @@ module Cassandra
810
849
  buffer.append_long(value)
811
850
  end
812
851
 
813
- alias :write_counter :write_bigint
852
+ alias write_counter write_bigint
814
853
 
815
854
  def write_blob(buffer, value)
816
855
  buffer.append_bytes(value.encode(::Encoding::BINARY))