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

Sign up to get free protection for your applications and to get access to all the features.
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