cassandra-driver 2.1.7 → 3.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +31 -53
  3. data/lib/cassandra.rb +22 -3
  4. data/lib/cassandra/aggregate.rb +109 -0
  5. data/lib/cassandra/argument.rb +51 -0
  6. data/lib/cassandra/auth/providers/password.rb +7 -4
  7. data/lib/cassandra/cluster.rb +14 -3
  8. data/lib/cassandra/cluster/client.rb +56 -34
  9. data/lib/cassandra/cluster/connector.rb +6 -6
  10. data/lib/cassandra/cluster/control_connection.rb +204 -251
  11. data/lib/cassandra/cluster/metadata.rb +2 -0
  12. data/lib/cassandra/cluster/schema.rb +131 -209
  13. data/lib/cassandra/cluster/schema/cql_type_parser.rb +104 -0
  14. data/lib/cassandra/cluster/schema/fetchers.rb +1174 -0
  15. data/lib/cassandra/cluster/schema/{type_parser.rb → fqcn_type_parser.rb} +7 -3
  16. data/lib/cassandra/column.rb +2 -2
  17. data/lib/cassandra/driver.rb +27 -9
  18. data/lib/cassandra/errors.rb +179 -25
  19. data/lib/cassandra/execution/info.rb +8 -1
  20. data/lib/cassandra/execution/options.rb +34 -0
  21. data/lib/cassandra/execution/trace.rb +42 -10
  22. data/lib/cassandra/function.rb +150 -0
  23. data/lib/cassandra/future.rb +66 -35
  24. data/lib/cassandra/host.rb +7 -4
  25. data/lib/cassandra/keyspace.rb +112 -13
  26. data/lib/cassandra/load_balancing.rb +1 -1
  27. data/lib/cassandra/protocol.rb +9 -3
  28. data/lib/cassandra/protocol/coder.rb +434 -155
  29. data/lib/cassandra/protocol/cql_byte_buffer.rb +43 -0
  30. data/lib/cassandra/protocol/cql_protocol_handler.rb +4 -1
  31. data/lib/cassandra/protocol/request.rb +4 -0
  32. data/lib/cassandra/protocol/requests/auth_response_request.rb +5 -1
  33. data/lib/cassandra/protocol/requests/batch_request.rb +7 -2
  34. data/lib/cassandra/protocol/requests/credentials_request.rb +5 -1
  35. data/lib/cassandra/protocol/requests/execute_request.rb +16 -10
  36. data/lib/cassandra/protocol/requests/prepare_request.rb +12 -3
  37. data/lib/cassandra/protocol/requests/query_request.rb +20 -11
  38. data/lib/cassandra/protocol/responses/already_exists_error_response.rb +4 -4
  39. data/lib/cassandra/protocol/responses/error_response.rb +14 -14
  40. data/lib/cassandra/protocol/responses/function_failure_error_response.rb +41 -0
  41. data/lib/cassandra/protocol/responses/prepared_result_response.rb +12 -9
  42. data/lib/cassandra/protocol/responses/raw_rows_result_response.rb +5 -3
  43. data/lib/cassandra/protocol/responses/read_failure_error_response.rb +43 -0
  44. data/lib/cassandra/protocol/responses/read_timeout_error_response.rb +4 -4
  45. data/lib/cassandra/protocol/responses/ready_response.rb +5 -1
  46. data/lib/cassandra/protocol/responses/result_response.rb +3 -3
  47. data/lib/cassandra/protocol/responses/rows_result_response.rb +2 -2
  48. data/lib/cassandra/protocol/responses/schema_change_event_response.rb +25 -24
  49. data/lib/cassandra/protocol/responses/schema_change_result_response.rb +20 -23
  50. data/lib/cassandra/protocol/responses/set_keyspace_result_response.rb +2 -2
  51. data/lib/cassandra/protocol/responses/unavailable_error_response.rb +4 -4
  52. data/lib/cassandra/protocol/responses/unprepared_error_response.rb +4 -4
  53. data/lib/cassandra/protocol/responses/write_failure_error_response.rb +45 -0
  54. data/lib/cassandra/protocol/responses/write_timeout_error_response.rb +4 -4
  55. data/lib/cassandra/protocol/v1.rb +38 -13
  56. data/lib/cassandra/protocol/v3.rb +34 -29
  57. data/lib/cassandra/protocol/v4.rb +334 -0
  58. data/lib/cassandra/result.rb +10 -9
  59. data/lib/cassandra/retry.rb +17 -3
  60. data/lib/cassandra/retry/policies/default.rb +9 -3
  61. data/lib/cassandra/session.rb +15 -7
  62. data/lib/cassandra/statement.rb +5 -0
  63. data/lib/cassandra/statements/batch.rb +36 -12
  64. data/lib/cassandra/statements/bound.rb +2 -1
  65. data/lib/cassandra/statements/prepared.rb +106 -35
  66. data/lib/cassandra/statements/simple.rb +4 -2
  67. data/lib/cassandra/table.rb +70 -105
  68. data/lib/cassandra/time.rb +98 -0
  69. data/lib/cassandra/time_uuid.rb +1 -1
  70. data/lib/cassandra/tuple.rb +7 -0
  71. data/lib/cassandra/types.rb +472 -272
  72. data/lib/cassandra/udt.rb +10 -0
  73. data/lib/cassandra/util.rb +32 -1
  74. data/lib/cassandra/uuid.rb +6 -1
  75. data/lib/cassandra/uuid/generator.rb +7 -7
  76. data/lib/cassandra/version.rb +1 -1
  77. data/lib/datastax/cassandra.rb +5 -2
  78. metadata +16 -6
data/lib/cassandra/udt.rb CHANGED
@@ -408,13 +408,23 @@ module Cassandra
408
408
  '{ ' + @values.map {|(n, v)| "#{n}: #{v.inspect}"}.join(', ') + ' }'
409
409
  end
410
410
 
411
+ # @private
411
412
  def inspect
412
413
  "#<Cassandra::UDT:0x#{self.object_id.to_s(16)} #{to_s}>"
413
414
  end
414
415
 
416
+ # @private
415
417
  def eql?(other)
416
418
  other.is_a?(UDT) && @values.all? {|(n, v)| v == other[n]}
417
419
  end
418
420
  alias :== :eql?
421
+
422
+ # @private
423
+ def hash
424
+ @values.inject(17) do |h, (n, v)|
425
+ h = 31 * h + n.hash
426
+ h = 31 * h + v.hash
427
+ end
428
+ end
419
429
  end
420
430
  end
@@ -99,6 +99,9 @@ module Cassandra
99
99
  when ::Numeric then encode_number(object, io)
100
100
  when ::IPAddr then encode_inet(object, io)
101
101
  when Uuid then encode_uuid(object, io)
102
+ when Tuple then encode_tuple(object, io)
103
+ when Time then encode_time(object, io)
104
+ when UDT then encode_udt(object, io)
102
105
  when nil then io.print(NULL_STR)
103
106
  when false then io.print(FALSE_STR)
104
107
  when true then io.print(TRUE_STR)
@@ -110,6 +113,14 @@ module Cassandra
110
113
  end
111
114
  alias :encode :encode_object
112
115
 
116
+ def encode_time(time, io = StringIO.new)
117
+ encode_string(time.to_s, io)
118
+ end
119
+
120
+ def encode_udt(udt, io = StringIO.new)
121
+ encode_hash(udt.to_h, io)
122
+ end
123
+
113
124
  def encode_timestamp(time, io = StringIO.new)
114
125
  io.print(time.to_i)
115
126
  io.string
@@ -132,6 +143,22 @@ module Cassandra
132
143
  io.string
133
144
  end
134
145
 
146
+ def encode_tuple(tuple, io = StringIO.new)
147
+ first = true
148
+
149
+ io.putc(PRN_OPN)
150
+ tuple.each do |object|
151
+ if first
152
+ first = false
153
+ else
154
+ io.print(COMMA)
155
+ end
156
+
157
+ encode_object(object, io)
158
+ end
159
+ io.putc(PRN_CLS)
160
+ end
161
+
135
162
  def escape_name(name)
136
163
  return name if name[LOWERCASE_REGEXP] == name
137
164
  DBL_QUOT + name + DBL_QUOT
@@ -282,12 +309,16 @@ module Cassandra
282
309
  # @private
283
310
  COMMA = ', '.freeze
284
311
  # @private
285
- COLON = ' : '.freeze
312
+ COLON = ': '.freeze
286
313
  # @private
287
314
  QUOT = ?'.freeze
288
315
  # @private
289
316
  ESC_QUOT = "''".freeze
290
317
  # @private
291
318
  DBL_QUOT = ?".freeze
319
+ # @private
320
+ PRN_OPN = '('.freeze
321
+ # @private
322
+ PRN_CLS = ')'.freeze
292
323
  end
293
324
  end
@@ -53,8 +53,13 @@ module Cassandra
53
53
  end
54
54
  end
55
55
 
56
+ # @private
56
57
  def hash
57
- @n.hash
58
+ @h ||= begin
59
+ h = 17
60
+ h = 31 * h + @n.hash
61
+ h
62
+ end
58
63
  end
59
64
 
60
65
  # Returns the numerical representation of this UUID
@@ -44,7 +44,7 @@ module Cassandra
44
44
  # @param [Object<#now>] clock used to generate timeuuid from current time
45
45
  #
46
46
  # @raise [ArgumentError] if clock doesn't respond to `now`
47
- def initialize(node_id = (SecureRandom.random_number(2**47) | 0x010000000000), clock_id = SecureRandom.random_number(65536), clock = Time)
47
+ def initialize(node_id = (::SecureRandom.random_number(2**47) | 0x010000000000), clock_id = ::SecureRandom.random_number(65536), clock = ::Time)
48
48
  raise ::ArgumentError, "invalid clock" unless clock.respond_to?(:now)
49
49
 
50
50
  @node_id = Integer(node_id)
@@ -84,7 +84,7 @@ module Cassandra
84
84
  @sequence += 1
85
85
  elsif @last_usecs && @last_usecs > usecs
86
86
  @sequence = 0
87
- @clock_id = SecureRandom.random_number(65536)
87
+ @clock_id = ::SecureRandom.random_number(65536)
88
88
  else
89
89
  @sequence = 0
90
90
  end
@@ -153,12 +153,12 @@ module Cassandra
153
153
  raise ::ArgumentError, "not enough arguments" if args.empty?
154
154
  raise ::ArgumentError, "too many arguments" if args.size > 3
155
155
 
156
- if args.first.is_a?(Time)
156
+ if args.first.is_a?(::Time)
157
157
  time = args.shift
158
- jitter = args.empty? ? SecureRandom.random_number(65536) : Integer(args.shift)
158
+ jitter = args.empty? ? ::SecureRandom.random_number(65536) : Integer(args.shift)
159
159
  else
160
- jitter = args.size > 2 ? Integer(args.pop) : SecureRandom.random_number(65536)
161
- time = Time.at(*args)
160
+ jitter = args.size > 2 ? Integer(args.pop) : ::SecureRandom.random_number(65536)
161
+ time = ::Time.at(*args)
162
162
  end
163
163
 
164
164
  from_usecs(time.to_i * 1_000_000 + time.usec + jitter)
@@ -179,7 +179,7 @@ module Cassandra
179
179
  #
180
180
  # @return [Cassandra::Uuid] a new UUID
181
181
  def uuid
182
- Uuid.new(SecureRandom.uuid)
182
+ Uuid.new(::SecureRandom.uuid)
183
183
  end
184
184
 
185
185
  private
@@ -17,5 +17,5 @@
17
17
  #++
18
18
 
19
19
  module Cassandra
20
- VERSION = '2.1.7'.freeze
20
+ VERSION = '3.0.0.beta.1'.freeze
21
21
  end
@@ -33,12 +33,15 @@ module DataStax
33
33
  end
34
34
 
35
35
  previous = nil
36
+ murmur3 = nil
36
37
  if defined?(::Cassandra)
37
38
  previous = ::Cassandra
39
+ murmur3 = ::Cassandra::Murmur3
38
40
  Object.send(:remove_const, :Cassandra)
39
41
  end
40
42
  include 'cassandra'
41
- DataStax::Cassandra::Murmur3 = ::Cassandra::Murmur3
42
- Object.send(:remove_const, :Cassandra)
43
+ murmur3 ||= ::Cassandra::Murmur3
44
+ DataStax::Cassandra::Murmur3 = murmur3
45
+ Object.send(:remove_const, :Cassandra) if defined?(::Cassandra)
43
46
  ::Cassandra = previous if previous
44
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassandra-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.7
4
+ version: 3.0.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Hultberg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-09-02 00:00:00.000000000 Z
12
+ date: 2015-12-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ione
@@ -72,6 +72,8 @@ files:
72
72
  - lib/cassandra/address_resolution/policies.rb
73
73
  - lib/cassandra/address_resolution/policies/ec2_multi_region.rb
74
74
  - lib/cassandra/address_resolution/policies/none.rb
75
+ - lib/cassandra/aggregate.rb
76
+ - lib/cassandra/argument.rb
75
77
  - lib/cassandra/auth.rb
76
78
  - lib/cassandra/auth/providers.rb
77
79
  - lib/cassandra/auth/providers/password.rb
@@ -85,6 +87,9 @@ files:
85
87
  - lib/cassandra/cluster/options.rb
86
88
  - lib/cassandra/cluster/registry.rb
87
89
  - lib/cassandra/cluster/schema.rb
90
+ - lib/cassandra/cluster/schema/cql_type_parser.rb
91
+ - lib/cassandra/cluster/schema/fetchers.rb
92
+ - lib/cassandra/cluster/schema/fqcn_type_parser.rb
88
93
  - lib/cassandra/cluster/schema/partitioners.rb
89
94
  - lib/cassandra/cluster/schema/partitioners/murmur3.rb
90
95
  - lib/cassandra/cluster/schema/partitioners/ordered.rb
@@ -93,7 +98,6 @@ files:
93
98
  - lib/cassandra/cluster/schema/replication_strategies/network_topology.rb
94
99
  - lib/cassandra/cluster/schema/replication_strategies/none.rb
95
100
  - lib/cassandra/cluster/schema/replication_strategies/simple.rb
96
- - lib/cassandra/cluster/schema/type_parser.rb
97
101
  - lib/cassandra/column.rb
98
102
  - lib/cassandra/compression.rb
99
103
  - lib/cassandra/compression/compressors/lz4.rb
@@ -104,6 +108,7 @@ files:
104
108
  - lib/cassandra/execution/options.rb
105
109
  - lib/cassandra/execution/trace.rb
106
110
  - lib/cassandra/executors.rb
111
+ - lib/cassandra/function.rb
107
112
  - lib/cassandra/future.rb
108
113
  - lib/cassandra/host.rb
109
114
  - lib/cassandra/keyspace.rb
@@ -137,8 +142,10 @@ files:
137
142
  - lib/cassandra/protocol/responses/authenticate_response.rb
138
143
  - lib/cassandra/protocol/responses/error_response.rb
139
144
  - lib/cassandra/protocol/responses/event_response.rb
145
+ - lib/cassandra/protocol/responses/function_failure_error_response.rb
140
146
  - lib/cassandra/protocol/responses/prepared_result_response.rb
141
147
  - lib/cassandra/protocol/responses/raw_rows_result_response.rb
148
+ - lib/cassandra/protocol/responses/read_failure_error_response.rb
142
149
  - lib/cassandra/protocol/responses/read_timeout_error_response.rb
143
150
  - lib/cassandra/protocol/responses/ready_response.rb
144
151
  - lib/cassandra/protocol/responses/result_response.rb
@@ -152,9 +159,11 @@ files:
152
159
  - lib/cassandra/protocol/responses/unavailable_error_response.rb
153
160
  - lib/cassandra/protocol/responses/unprepared_error_response.rb
154
161
  - lib/cassandra/protocol/responses/void_result_response.rb
162
+ - lib/cassandra/protocol/responses/write_failure_error_response.rb
155
163
  - lib/cassandra/protocol/responses/write_timeout_error_response.rb
156
164
  - lib/cassandra/protocol/v1.rb
157
165
  - lib/cassandra/protocol/v3.rb
166
+ - lib/cassandra/protocol/v4.rb
158
167
  - lib/cassandra/reconnection.rb
159
168
  - lib/cassandra/reconnection/policies.rb
160
169
  - lib/cassandra/reconnection/policies/constant.rb
@@ -174,6 +183,7 @@ files:
174
183
  - lib/cassandra/statements/simple.rb
175
184
  - lib/cassandra/statements/void.rb
176
185
  - lib/cassandra/table.rb
186
+ - lib/cassandra/time.rb
177
187
  - lib/cassandra/time_uuid.rb
178
188
  - lib/cassandra/tuple.rb
179
189
  - lib/cassandra/types.rb
@@ -203,12 +213,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
213
  version: 1.9.3
204
214
  required_rubygems_version: !ruby/object:Gem::Requirement
205
215
  requirements:
206
- - - ! '>='
216
+ - - ! '>'
207
217
  - !ruby/object:Gem::Version
208
- version: '0'
218
+ version: 1.3.1
209
219
  requirements: []
210
220
  rubyforge_project:
211
- rubygems_version: 2.5.0
221
+ rubygems_version: 2.4.6
212
222
  signing_key:
213
223
  specification_version: 4
214
224
  summary: Datastax Ruby Driver for Apache Cassandra