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.
@@ -38,7 +38,7 @@ module Cassandra
38
38
  assign = !field.chomp!('=').nil?
39
39
 
40
40
  return super if assign && args.empty?
41
- return super unless @name_to_type.has_key?(field)
41
+ return super unless @name_to_type.key?(field)
42
42
 
43
43
  if assign
44
44
  value = args.first
@@ -58,7 +58,7 @@ module Cassandra
58
58
  field = method.to_s
59
59
  field.chomp!('=')
60
60
 
61
- return true if @name_to_type.has_key?(field)
61
+ return true if @name_to_type.key?(field)
62
62
  super
63
63
  end
64
64
 
@@ -94,15 +94,15 @@ module Cassandra
94
94
  when ::Integer
95
95
  if field < 0 || field >= @fields.size
96
96
  raise ::IndexError,
97
- "field index #{field} is not present in UDT: " \
98
- "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
97
+ "field index #{field} is not present in UDT: " \
98
+ "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
99
99
  end
100
100
  @values[@fields[field][0]]
101
101
  when ::String
102
- unless @name_to_type.has_key?(field)
102
+ unless @name_to_type.key?(field)
103
103
  raise ::KeyError,
104
- "field #{field} is not defined in UDT: " \
105
- "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
104
+ "field #{field} is not defined in UDT: " \
105
+ "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
106
106
  end
107
107
  @values[field]
108
108
  else
@@ -127,16 +127,16 @@ module Cassandra
127
127
  when ::Integer
128
128
  if field < 0 || field >= @fields.size
129
129
  raise ::IndexError,
130
- "field index #{field} is not present in UDT: " \
131
- "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
130
+ "field index #{field} is not present in UDT: " \
131
+ "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
132
132
  end
133
133
  Util.assert_type(@fields[field][1], value)
134
134
  @values[@fields[field][0]] = value
135
135
  when ::String
136
- unless @name_to_type.has_key?(field)
136
+ unless @name_to_type.key?(field)
137
137
  raise ::KeyError,
138
- "field #{field} is not defined in UDT: " \
139
- "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
138
+ "field #{field} is not defined in UDT: " \
139
+ "#{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)}"
140
140
  end
141
141
  Util.assert_type(@name_to_type[field], value)
142
142
  @values[field] = value
@@ -165,14 +165,14 @@ module Cassandra
165
165
  end
166
166
 
167
167
  def inspect
168
- "#<Cassandra::UDT:0x#{self.object_id.to_s(16)} #{to_s}>"
168
+ "#<Cassandra::UDT:0x#{object_id.to_s(16)} #{self}>"
169
169
  end
170
170
 
171
171
  def eql?(other)
172
172
  (other.is_a?(Strict) && @values.all? {|n, v| v == other[n]}) ||
173
- (other.is_a?(UDT) && other == self)
173
+ (other.is_a?(UDT) && other == self)
174
174
  end
175
- alias :== :eql?
175
+ alias == eql?
176
176
  end
177
177
 
178
178
  include Enumerable
@@ -181,43 +181,67 @@ module Cassandra
181
181
  # @param values [Hash<String, Object>, Array<Array<String, Object>>,
182
182
  # *Object, *Array<String, Object>] - UDT field values
183
183
  # @example Various ways of creating the same UDT instance
184
- # Cassandra::UDT.new({'street' => '123 Main St.', 'city' => 'Whatever', 'state' => 'XZ', 'zip' => '10020'})
184
+ # Cassandra::UDT.new({'street' => '123 Main St.',
185
+ # 'city' => 'Whatever',
186
+ # 'state' => 'XZ',
187
+ # 'zip' => '10020'})
185
188
  #
186
- # Cassandra::UDT.new(street: '123 Main St.', city: 'Whatever', state: 'XZ', zip: '10020')
189
+ # Cassandra::UDT.new(street: '123 Main St.',
190
+ # city: 'Whatever',
191
+ # state: 'XZ',
192
+ # zip: '10020')
187
193
  #
188
- # Cassandra::UDT.new('street', '123 Main St.', 'city', 'Whatever', 'state', 'XZ', 'zip', '10020')
194
+ # Cassandra::UDT.new('street', '123 Main St.',
195
+ # 'city', 'Whatever',
196
+ # 'state', 'XZ',
197
+ # 'zip', '10020')
189
198
  #
190
- # Cassandra::UDT.new(:street, '123 Main St.', :city, 'Whatever', :state, 'XZ', :zip, '10020')
199
+ # Cassandra::UDT.new(:street, '123 Main St.',
200
+ # :city, 'Whatever',
201
+ # :state, 'XZ',
202
+ # :zip, '10020')
191
203
  #
192
- # Cassandra::UDT.new(['street', '123 Main St.'], ['city', 'Whatever'], ['state', 'XZ'], ['zip', '10020'])
204
+ # Cassandra::UDT.new(['street', '123 Main St.'],
205
+ # ['city', 'Whatever'],
206
+ # ['state', 'XZ'],
207
+ # ['zip', '10020'])
193
208
  #
194
- # Cassandra::UDT.new([:street, '123 Main St.'], [:city, 'Whatever'], [:state, 'XZ'], [:zip, '10020'])
209
+ # Cassandra::UDT.new([:street, '123 Main St.'],
210
+ # [:city, 'Whatever'],
211
+ # [:state, 'XZ'],
212
+ # [:zip, '10020'])
195
213
  #
196
- # Cassandra::UDT.new([['street', '123 Main St.'], ['city', 'Whatever'], ['state', 'XZ'], ['zip', '10020']])
214
+ # Cassandra::UDT.new([['street', '123 Main St.'],
215
+ # ['city', 'Whatever'],
216
+ # ['state', 'XZ'],
217
+ # ['zip', '10020']])
197
218
  #
198
- # Cassandra::UDT.new([[:street, '123 Main St.'], [:city, 'Whatever'], [:state, 'XZ'], [:zip, '10020']])
219
+ # Cassandra::UDT.new([[:street, '123 Main St.'],
220
+ # [:city, 'Whatever'],
221
+ # [:state, 'XZ'],
222
+ # [:zip, '10020']])
199
223
  def initialize(*values)
200
224
  values = Array(values.first) if values.one?
201
225
 
202
226
  Util.assert_not_empty(values,
203
- "user-defined type must contain at least one value"
204
- )
227
+ 'user-defined type must contain at least one value'
228
+ )
205
229
 
206
230
  if values.first.is_a?(::Array)
207
231
  @values = values.map do |pair|
208
232
  Util.assert(pair.size == 2,
209
- "values of a user-defined type must be an Array of name and " \
210
- "value pairs, #{pair.inspect} given"
211
- )
233
+ 'values of a user-defined type must be an Array of name and ' \
234
+ "value pairs, #{pair.inspect} given"
235
+ )
212
236
  name, value = pair
213
237
 
214
238
  [String(name), value]
215
239
  end
216
240
  else
217
- Util.assert((values.size % 2) == 0,
218
- "values of a user-defined type must be an Array of alternating " \
219
- "names and values pairs, #{values.inspect} given"
220
- )
241
+ Util.assert(values.size.even?,
242
+ 'values of a user-defined type must be an Array of alternating ' \
243
+ "names and values pairs, #{values.inspect} given"
244
+ )
221
245
  @values = values.each_slice(2).map do |(name, value)|
222
246
  [String(name), value]
223
247
  end
@@ -313,17 +337,13 @@ module Cassandra
313
337
  def fetch(field)
314
338
  case field
315
339
  when ::Integer
316
- if field >= 0 && field < @values.size
317
- raise ::IndexError, "Field index #{field.inspect} is not present"
318
- end
340
+ raise ::IndexError, "Field index #{field.inspect} is not present" if field >= 0 && field < @values.size
319
341
 
320
342
  @values[field][1]
321
343
  when ::String
322
344
  index = @values.index {|(n, _)| field == n}
323
345
 
324
- unless index
325
- raise ::KeyError, "Unsupported field #{field.inspect}"
326
- end
346
+ raise ::KeyError, "Unsupported field #{field.inspect}" unless index
327
347
 
328
348
  @values[index][1]
329
349
  else
@@ -348,7 +368,7 @@ module Cassandra
348
368
  true
349
369
  end
350
370
 
351
- alias :include? :has_field?
371
+ alias include? has_field?
352
372
 
353
373
  # Sets value of the field.
354
374
  #
@@ -363,17 +383,13 @@ module Cassandra
363
383
  def []=(field, value)
364
384
  case field
365
385
  when ::Integer
366
- if field < 0 || field >= @values.size
367
- raise ::IndexError, "Field index #{field.inspect} is not present"
368
- end
386
+ raise ::IndexError, "Field index #{field.inspect} is not present" if field < 0 || field >= @values.size
369
387
 
370
388
  @values[field][1] = value
371
389
  when ::String
372
390
  index = @values.index {|(n, _)| field == n}
373
391
 
374
- unless index
375
- raise ::KeyError, "Unsupported field #{field.inspect}"
376
- end
392
+ raise ::KeyError, "Unsupported field #{field.inspect}" unless index
377
393
 
378
394
  @values[index][1] = value
379
395
  else
@@ -410,21 +426,21 @@ module Cassandra
410
426
 
411
427
  # @private
412
428
  def inspect
413
- "#<Cassandra::UDT:0x#{self.object_id.to_s(16)} #{to_s}>"
429
+ "#<Cassandra::UDT:0x#{object_id.to_s(16)} #{self}>"
414
430
  end
415
431
 
416
432
  # @private
417
433
  def eql?(other)
418
434
  other.is_a?(UDT) && @values.all? {|(n, v)| v == other[n]}
419
435
  end
420
- alias :== :eql?
436
+ alias == eql?
421
437
 
422
438
  # @private
423
439
  def hash
424
440
  @values.inject(17) do |h, (n, v)|
425
441
  h = 31 * h + n.hash
426
- h = 31 * h + v.hash
442
+ 31 * h + v.hash
427
443
  end
428
444
  end
429
445
  end
430
- end
446
+ 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.
@@ -18,7 +18,9 @@
18
18
 
19
19
  module Cassandra
20
20
  # @private
21
- module Util extend self
21
+ module Util
22
+ module_function
23
+
22
24
  def encode_hash(hash, io = StringIO.new)
23
25
  first = true
24
26
 
@@ -111,7 +113,7 @@ module Cassandra
111
113
 
112
114
  io.string
113
115
  end
114
- alias :encode :encode_object
116
+ alias encode encode_object
115
117
 
116
118
  def encode_time(time, io = StringIO.new)
117
119
  encode_string(time.to_s, io)
@@ -160,8 +162,13 @@ module Cassandra
160
162
  end
161
163
 
162
164
  def escape_name(name)
163
- return name if name[LOWERCASE_REGEXP] == name
164
- DBL_QUOT + name + DBL_QUOT
165
+ # If name only contains lower-case chars and it's not a reserved word, return it
166
+ # as-is. Otherwise, quote.
167
+ return name if name[LOWERCASE_REGEXP] == name && !RESERVED_WORDS.include?(name)
168
+
169
+ # Replace double-quotes within name with two double-quotes (if any) and surround the whole
170
+ # thing with double-quotes
171
+ DBL_QUOT + name.gsub('"', '""') + DBL_QUOT
165
172
  end
166
173
 
167
174
  def guess_type(object)
@@ -190,7 +197,8 @@ module Cassandra
190
197
  when UDT
191
198
  Types.udt('unknown', 'unknown', object.map {|k, v| [k, guess_type(v)]})
192
199
  else
193
- raise ::ArgumentError, "Unable to guess the type of the argument: #{object.inspect}"
200
+ raise ::ArgumentError,
201
+ "Unable to guess the type of the argument: #{object.inspect}"
194
202
  end
195
203
  end
196
204
 
@@ -212,7 +220,8 @@ module Cassandra
212
220
  def assert_instance_of_one_of(kinds, value, message = nil, &block)
213
221
  unless kinds.any? {|kind| value.is_a?(kind)}
214
222
  message = yield if block_given?
215
- message ||= "value must be an instance of one of #{kinds.inspect}, #{value.inspect} given"
223
+ message ||= "value must be an instance of one of #{kinds.inspect}, " \
224
+ "#{value.inspect} given"
216
225
 
217
226
  raise ::ArgumentError, message
218
227
  end
@@ -221,7 +230,8 @@ module Cassandra
221
230
  def assert_responds_to(method, value, message = nil, &block)
222
231
  unless value.respond_to?(method)
223
232
  message = yield if block_given?
224
- message ||= "value #{value.inspect} must respond to #{method.inspect}, but doesn't"
233
+ message ||= "value #{value.inspect} must respond to #{method.inspect}, " \
234
+ "but doesn't"
225
235
 
226
236
  raise ::ArgumentError, message
227
237
  end
@@ -230,7 +240,8 @@ module Cassandra
230
240
  def assert_responds_to_all(methods, value, message = nil, &block)
231
241
  unless methods.all? {|method| value.respond_to?(method)}
232
242
  message = yield if block_given?
233
- message ||= "value #{value.inspect} must respond to all methods #{methods.inspect}, but doesn't"
243
+ message ||= "value #{value.inspect} must respond to all methods " \
244
+ "#{methods.inspect}, but doesn't"
234
245
 
235
246
  raise ::ArgumentError, message
236
247
  end
@@ -239,14 +250,14 @@ module Cassandra
239
250
  def assert_not_empty(value, message = nil, &block)
240
251
  if value.empty?
241
252
  message = yield if block_given?
242
- message ||= "value cannot be empty"
253
+ message ||= 'value cannot be empty'
243
254
 
244
255
  raise ::ArgumentError, message
245
256
  end
246
257
  end
247
258
 
248
259
  def assert_file_exists(path, message = nil, &block)
249
- unless ::File.exists?(path)
260
+ unless ::File.exist?(path)
250
261
  message = yield if block_given?
251
262
  message ||= "expected file at #{path.inspect} to exist, but it doesn't"
252
263
 
@@ -266,7 +277,8 @@ module Cassandra
266
277
  def assert_size(size, value, message = nil, &block)
267
278
  unless value.size == size
268
279
  message = yield if block_given?
269
- message ||= "value #{value.inspect} must have size equal to #{size.inspect}, but doesn't"
280
+ message ||= "value #{value.inspect} must have size equal to " \
281
+ "#{size.inspect}, but doesn't"
270
282
 
271
283
  raise ::ArgumentError, message
272
284
  end
@@ -275,7 +287,7 @@ module Cassandra
275
287
  def assert(condition, message = nil, &block)
276
288
  unless condition
277
289
  message = yield if block_given?
278
- message ||= "assertion failed"
290
+ message ||= 'assertion failed'
279
291
 
280
292
  raise ::ArgumentError, message
281
293
  end
@@ -311,14 +323,142 @@ module Cassandra
311
323
  # @private
312
324
  COLON = ': '.freeze
313
325
  # @private
314
- QUOT = ?'.freeze
326
+ QUOT = "'".freeze
315
327
  # @private
316
328
  ESC_QUOT = "''".freeze
317
329
  # @private
318
- DBL_QUOT = ?".freeze
330
+ DBL_QUOT = '"'.freeze
319
331
  # @private
320
332
  PRN_OPN = '('.freeze
321
333
  # @private
322
334
  PRN_CLS = ')'.freeze
335
+ RESERVED_WORDS = Set.new(%w(
336
+ add
337
+ aggregate
338
+ all
339
+ allow
340
+ alter
341
+ and
342
+ apply
343
+ as
344
+ asc
345
+ ascii
346
+ authorize
347
+ batch
348
+ begin
349
+ bigint
350
+ blob
351
+ boolean
352
+ by
353
+ called
354
+ clustering
355
+ columnfamily
356
+ compact
357
+ contains
358
+ count
359
+ counter
360
+ create
361
+ custom
362
+ date
363
+ decimal
364
+ delete
365
+ desc
366
+ describe
367
+ distinct
368
+ double
369
+ drop
370
+ entries
371
+ execute
372
+ exists
373
+ filtering
374
+ finalfunc
375
+ float
376
+ from
377
+ frozen
378
+ full
379
+ function
380
+ functions
381
+ grant
382
+ if
383
+ in
384
+ index
385
+ inet
386
+ infinity
387
+ initcond
388
+ input
389
+ insert
390
+ int
391
+ into
392
+ is
393
+ json
394
+ key
395
+ keys
396
+ keyspace
397
+ keyspaces
398
+ language
399
+ limit
400
+ list
401
+ login
402
+ map
403
+ materialized
404
+ modify
405
+ nan
406
+ nologin
407
+ norecursive
408
+ nosuperuser
409
+ not
410
+ null
411
+ of
412
+ on
413
+ options
414
+ or
415
+ order
416
+ password
417
+ permission
418
+ permissions
419
+ primary
420
+ rename
421
+ replace
422
+ returns
423
+ revoke
424
+ role
425
+ roles
426
+ schema
427
+ select
428
+ set
429
+ sfunc
430
+ smallint
431
+ static
432
+ storage
433
+ stype
434
+ superuser
435
+ table
436
+ text
437
+ time
438
+ timestamp
439
+ timeuuid
440
+ tinyint
441
+ to
442
+ token
443
+ trigger
444
+ truncate
445
+ ttl
446
+ tuple
447
+ type
448
+ unlogged
449
+ update
450
+ use
451
+ user
452
+ users
453
+ using
454
+ uuid
455
+ values
456
+ varchar
457
+ varint
458
+ view
459
+ where
460
+ with
461
+ writetime
462
+ )).freeze
323
463
  end
324
464
  end