cassandra-driver 2.1.7-java → 3.0.0.beta.1-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 (79) hide show
  1. checksums.yaml +4 -4
  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/cassandra_murmur3.jar +0 -0
  78. data/lib/datastax/cassandra.rb +5 -2
  79. metadata +27 -17
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ # Copyright 2013-2015 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
+ module Protocol
21
+ class ReadFailureErrorResponse < ErrorResponse
22
+ attr_reader :consistency, :received, :blockfor, :numfailures, :data_present
23
+
24
+ def initialize(custom_payload, warnings, code, message, consistency, received, blockfor, numfailures, data_present)
25
+ super(custom_payload, warnings, code, message)
26
+
27
+ @consistency = consistency
28
+ @received = received
29
+ @blockfor = blockfor
30
+ @numfailures = numfailures
31
+ @data_present = data_present
32
+ end
33
+
34
+ def to_error(keyspace, statement, options, hosts, consistency, retries)
35
+ Errors::ReadError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, consistency, retries, @data_present, @consistency, @blockfor, @numfailures, @received)
36
+ end
37
+
38
+ def to_s
39
+ "#{super} #{@consistency} #{@received} #{@blockfor} #{@numfailures} #{@data_present}"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -21,8 +21,8 @@ module Cassandra
21
21
  class ReadTimeoutErrorResponse < ErrorResponse
22
22
  attr_reader :consistency, :received, :blockfor, :data_present
23
23
 
24
- def initialize(code, message, consistency, received, blockfor, data_present)
25
- super(code, message)
24
+ def initialize(custom_payload, warnings, code, message, consistency, received, blockfor, data_present)
25
+ super(custom_payload, warnings, code, message)
26
26
 
27
27
  @consistency = consistency
28
28
  @received = received
@@ -30,8 +30,8 @@ module Cassandra
30
30
  @data_present = data_present
31
31
  end
32
32
 
33
- def to_error(statement = nil)
34
- Errors::ReadTimeoutError.new(@message, statement, @data_present, @consistency, @blockfor, @received)
33
+ def to_error(keyspace, statement, options, hosts, consistency, retries)
34
+ Errors::ReadTimeoutError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, consistency, retries, @data_present, @consistency, @blockfor, @received)
35
35
  end
36
36
 
37
37
  def to_s
@@ -25,7 +25,11 @@ module Cassandra
25
25
  alias_method :==, :eql?
26
26
 
27
27
  def hash
28
- @h ||= to_s.hash ^ 0xbadc0de
28
+ @h ||= begin
29
+ h = 17
30
+ h = 31 * h + 'READY'.hash
31
+ h
32
+ end
29
33
  end
30
34
 
31
35
  def to_s
@@ -19,10 +19,10 @@
19
19
  module Cassandra
20
20
  module Protocol
21
21
  class ResultResponse < Response
22
- attr_reader :trace_id
22
+ attr_reader :custom_payload, :warnings, :trace_id
23
23
 
24
- def initialize(trace_id)
25
- @trace_id = trace_id
24
+ def initialize(custom_payload, warnings, trace_id)
25
+ @custom_payload, @warnings, @trace_id = custom_payload, warnings, trace_id
26
26
  end
27
27
 
28
28
  def void?
@@ -21,8 +21,8 @@ module Cassandra
21
21
  class RowsResultResponse < ResultResponse
22
22
  attr_reader :rows, :metadata, :paging_state
23
23
 
24
- def initialize(rows, metadata, paging_state, trace_id)
25
- super(trace_id)
24
+ def initialize(custom_payload, warnings, rows, metadata, paging_state, trace_id)
25
+ super(custom_payload, warnings, trace_id)
26
26
  @rows, @metadata, @paging_state = rows, metadata, paging_state
27
27
  end
28
28
 
@@ -21,47 +21,48 @@ module Cassandra
21
21
  class SchemaChangeEventResponse < EventResponse
22
22
  TYPE = 'SCHEMA_CHANGE'.freeze
23
23
 
24
- attr_reader :change, :keyspace, :table, :type, :target
24
+ attr_reader :change, :keyspace, :name, :target, :arguments
25
25
 
26
- def initialize(change, keyspace, name, target = nil)
27
- @change = change
28
- @keyspace = keyspace
29
-
30
- if target
31
- @target = target
32
- @table = @type = name
33
- else
34
- if name.empty?
35
- @target = Constants::SCHEMA_CHANGE_TARGET_KEYSPACE
36
- else
37
- @target = Constants::SCHEMA_CHANGE_TARGET_TABLE
38
- @table = name
39
- end
40
- end
26
+ def initialize(change, keyspace, name, target, arguments)
27
+ @change = change
28
+ @keyspace = keyspace
29
+ @name = name
30
+ @target = target
31
+ @arguments = arguments
41
32
  end
42
33
 
43
34
  def type
44
35
  TYPE
45
36
  end
46
37
 
47
- def eql?(rs)
48
- rs.type == self.type && rs.change == self.change && rs.keyspace == self.keyspace && rs.table == self.table
38
+ def eql?(other)
39
+ other.is_a?(SchemaChangeEventResponse) && other.type == TYPE &&
40
+ @change == other.change &&
41
+ @keyspace == other.keyspace &&
42
+ @name == other.name &&
43
+ @target == other.target &&
44
+ @arguments == other.arguments
49
45
  end
50
46
  alias_method :==, :eql?
51
47
 
52
48
  def hash
53
49
  @h ||= begin
54
- h = 0
55
- h = ((h & 33554431) * 31) ^ @type.hash
56
- h = ((h & 33554431) * 31) ^ @change.hash
57
- h = ((h & 33554431) * 31) ^ @keyspace.hash
58
- h = ((h & 33554431) * 31) ^ @table.hash
50
+ h = 17
51
+ h = 31 * h + @change.hash
52
+ h = 31 * h + @keyspace.hash
53
+ h = 31 * h + @name.hash
54
+ h = 31 * h + @target.hash
55
+ h = 31 * h + @arguments.hash
59
56
  h
60
57
  end
61
58
  end
62
59
 
63
60
  def to_s
64
- %(EVENT SCHEMA_CHANGE #@change #@target "#@keyspace" "#@table")
61
+ if @arguments
62
+ %(EVENT SCHEMA_CHANGE #@change #@target "#@keyspace" "#@name" #@arguments)
63
+ else
64
+ %(EVENT SCHEMA_CHANGE #@change #@target "#@keyspace" "#@name")
65
+ end
65
66
  end
66
67
 
67
68
  private
@@ -19,44 +19,41 @@
19
19
  module Cassandra
20
20
  module Protocol
21
21
  class SchemaChangeResultResponse < ResultResponse
22
- attr_reader :change, :keyspace, :table, :type, :target
22
+ attr_reader :change, :keyspace, :name, :type, :target, :arguments
23
23
 
24
- def initialize(change, keyspace, name, trace_id, target = nil)
25
- super(trace_id)
24
+ def initialize(custom_payload, warnings, change, keyspace, name, target, arguments, trace_id)
25
+ super(custom_payload, warnings, trace_id)
26
26
 
27
- @change = change
28
- @keyspace = keyspace
29
-
30
- if target
31
- @target = target
32
- @table = @type = name
33
- else
34
- if name.empty?
35
- @target = Constants::SCHEMA_CHANGE_TARGET_KEYSPACE
36
- else
37
- @target = Constants::SCHEMA_CHANGE_TARGET_TABLE
38
- @table = name
39
- end
40
- end
27
+ @change = change
28
+ @keyspace = keyspace
29
+ @name = name
30
+ @target = target
31
+ @arguments = arguments
41
32
  end
42
33
 
43
34
  def eql?(other)
44
- self.change == other.change && self.keyspace == other.keyspace && self.table == other.table
35
+ @change == other.change &&
36
+ @keyspace == other.keyspace &&
37
+ @name == other.name &&
38
+ @target == other.target &&
39
+ @arguments == other.arguments
45
40
  end
46
41
  alias_method :==, :eql?
47
42
 
48
43
  def hash
49
44
  @h ||= begin
50
- h = 0
51
- h = ((h & 0xffffffff) * 31) ^ @change.hash
52
- h = ((h & 0xffffffff) * 31) ^ @keyspace.hash
53
- h = ((h & 0xffffffff) * 31) ^ @table.hash
45
+ h = 17
46
+ h = 31 * h + @change.hash
47
+ h = 31 * h + @keyspace.hash
48
+ h = 31 * h + @name.hash
49
+ h = 31 * h + @target.hash
50
+ h = 31 * h + @arguments.hash
54
51
  h
55
52
  end
56
53
  end
57
54
 
58
55
  def to_s
59
- %(RESULT SCHEMA_CHANGE #@change #@target "#@keyspace" "#@table")
56
+ %(RESULT SCHEMA_CHANGE #@change #@target "#@keyspace" "#@name")
60
57
  end
61
58
 
62
59
  private
@@ -21,8 +21,8 @@ module Cassandra
21
21
  class SetKeyspaceResultResponse < ResultResponse
22
22
  attr_reader :keyspace
23
23
 
24
- def initialize(keyspace, trace_id)
25
- super(trace_id)
24
+ def initialize(custom_payload, warnings, keyspace, trace_id)
25
+ super(custom_payload, warnings, trace_id)
26
26
  @keyspace = keyspace
27
27
  end
28
28
 
@@ -21,16 +21,16 @@ module Cassandra
21
21
  class UnavailableErrorResponse < ErrorResponse
22
22
  attr_reader :consistency, :required, :alive
23
23
 
24
- def initialize(code, message, consistency, required, alive)
25
- super(code, message)
24
+ def initialize(custom_payload, warnings, code, message, consistency, required, alive)
25
+ super(custom_payload, warnings, code, message)
26
26
 
27
27
  @consistency = consistency
28
28
  @required = required
29
29
  @alive = alive
30
30
  end
31
31
 
32
- def to_error(statement = nil)
33
- Errors::UnavailableError.new(@message, statement, @consistency, @required, @alive)
32
+ def to_error(keyspace, statement, options, hosts, r_consistency, retries)
33
+ Errors::UnavailableError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, r_consistency, retries, @consistency, @required, @alive)
34
34
  end
35
35
 
36
36
  def to_s
@@ -21,14 +21,14 @@ module Cassandra
21
21
  class UnpreparedErrorResponse < ErrorResponse
22
22
  attr_reader :id
23
23
 
24
- def initialize(code, message, id)
25
- super(code, message)
24
+ def initialize(custom_payload, warnings, code, message, id)
25
+ super(custom_payload, warnings, code, message)
26
26
 
27
27
  @id = id
28
28
  end
29
29
 
30
- def to_error(statement = nil)
31
- Errors::UnpreparedError.new(@message, statement, @id)
30
+ def to_error(keyspace, statement, options, hosts, consistency, retries)
31
+ Errors::UnpreparedError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, consistency, retries, @id)
32
32
  end
33
33
 
34
34
  def to_s
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ # Copyright 2013-2015 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
+ module Protocol
21
+ class WriteFailureErrorResponse < ErrorResponse
22
+ attr_reader :consistency, :received, :blockfor, :numfailures, :write_type
23
+
24
+ def initialize(custom_payload, warnings, code, message, consistency, received, blockfor, numfailures, write_type)
25
+ super(custom_payload, warnings, code, message)
26
+
27
+ write_type.downcase!
28
+
29
+ @consistency = consistency
30
+ @received = received
31
+ @blockfor = blockfor
32
+ @numfailures = numfailures
33
+ @write_type = write_type.to_sym
34
+ end
35
+
36
+ def to_error(keyspace, statement, options, hosts, consistency, retries)
37
+ Errors::WriteError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, consistency, retries, @write_type, @consistency, @blockfor, @numfailures, @received)
38
+ end
39
+
40
+ def to_s
41
+ "#{super} #{@write_type} #{@consistency} #{@blockfor} #{@numfailures} #{@received}"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -21,8 +21,8 @@ module Cassandra
21
21
  class WriteTimeoutErrorResponse < ErrorResponse
22
22
  attr_reader :consistency, :received, :blockfor, :write_type
23
23
 
24
- def initialize(code, message, consistency, received, blockfor, write_type)
25
- super(code, message)
24
+ def initialize(custom_payload, warnings, code, message, consistency, received, blockfor, write_type)
25
+ super(custom_payload, warnings, code, message)
26
26
 
27
27
  write_type.downcase!
28
28
 
@@ -32,8 +32,8 @@ module Cassandra
32
32
  @write_type = write_type.to_sym
33
33
  end
34
34
 
35
- def to_error(statement = nil)
36
- Errors::WriteTimeoutError.new(@message, statement, @write_type, @consistency, @blockfor, @received)
35
+ def to_error(keyspace, statement, options, hosts, consistency, retries)
36
+ Errors::WriteTimeoutError.new(@message, @custom_payload, @warnings, keyspace, statement, options, hosts, consistency, retries, @write_type, @consistency, @blockfor, @received)
37
37
  end
38
38
 
39
39
  def to_s
@@ -179,19 +179,19 @@ module Cassandra
179
179
  message = buffer.read_string
180
180
 
181
181
  case code
182
- when 0x1000 then UnavailableErrorResponse.new(code, message, buffer.read_consistency, buffer.read_int, buffer.read_int)
183
- when 0x1100 then WriteTimeoutErrorResponse.new(code, message, buffer.read_consistency, buffer.read_int, buffer.read_int, buffer.read_string)
184
- when 0x1200 then ReadTimeoutErrorResponse.new(code, message, buffer.read_consistency, buffer.read_int, buffer.read_int, (buffer.read_byte != 0))
185
- when 0x2400 then AlreadyExistsErrorResponse.new(code, message, buffer.read_string, buffer.read_string)
186
- when 0x2500 then UnpreparedErrorResponse.new(code, message, buffer.read_short_bytes)
182
+ when 0x1000 then UnavailableErrorResponse.new(nil, nil, code, message, buffer.read_consistency, buffer.read_int, buffer.read_int)
183
+ when 0x1100 then WriteTimeoutErrorResponse.new(nil, nil, code, message, buffer.read_consistency, buffer.read_int, buffer.read_int, buffer.read_string)
184
+ when 0x1200 then ReadTimeoutErrorResponse.new(nil, nil, code, message, buffer.read_consistency, buffer.read_int, buffer.read_int, (buffer.read_byte != 0))
185
+ when 0x2400 then AlreadyExistsErrorResponse.new(nil, nil, code, message, buffer.read_string, buffer.read_string)
186
+ when 0x2500 then UnpreparedErrorResponse.new(nil, nil, code, message, buffer.read_short_bytes)
187
187
  else
188
- ErrorResponse.new(code, message)
188
+ ErrorResponse.new(nil, nil, code, message)
189
189
  end
190
190
  when CODE_RESULT
191
191
  result_type = buffer.read_int
192
192
  case result_type
193
193
  when 0x0001 # Void
194
- VoidResultResponse.new(trace_id)
194
+ VoidResultResponse.new(nil, nil, trace_id)
195
195
  when 0x0002 # Rows
196
196
  original_buffer_length = buffer.length
197
197
  column_specs, paging_state = Coder.read_metadata_v1(buffer)
@@ -199,21 +199,34 @@ module Cassandra
199
199
  if column_specs.nil?
200
200
  consumed_bytes = original_buffer_length - buffer.length
201
201
  remaining_bytes = CqlByteBuffer.new(buffer.read(size - consumed_bytes - 4))
202
- RawRowsResultResponse.new(protocol_version, remaining_bytes, paging_state, trace_id)
202
+ RawRowsResultResponse.new(nil, nil, protocol_version, remaining_bytes, paging_state, trace_id)
203
203
  else
204
- RowsResultResponse.new(Coder.read_values_v1(buffer, column_specs), column_specs, paging_state, trace_id)
204
+ RowsResultResponse.new(nil, nil, Coder.read_values_v1(buffer, column_specs), column_specs, paging_state, trace_id)
205
205
  end
206
206
  when 0x0003 # SetKeyspace
207
- SetKeyspaceResultResponse.new(buffer.read_string, trace_id)
207
+ SetKeyspaceResultResponse.new(nil, nil, buffer.read_string, trace_id)
208
208
  when 0x0004 # Prepared
209
209
  id = buffer.read_short_bytes
210
210
  params_metadata = Coder.read_metadata_v1(buffer).first
211
211
  result_metadata = nil
212
212
  result_metadata = Coder.read_metadata_v1(buffer).first if protocol_version > 1
213
213
 
214
- PreparedResultResponse.new(id, params_metadata, result_metadata, trace_id)
214
+ PreparedResultResponse.new(nil, nil, id, params_metadata, result_metadata, nil, trace_id)
215
215
  when 0x0005 # SchemaChange
216
- SchemaChangeResultResponse.new(buffer.read_string, buffer.read_string, buffer.read_string, trace_id)
216
+ change = buffer.read_string
217
+ keyspace = buffer.read_string
218
+ name = buffer.read_string
219
+ arguments = EMPTY_LIST
220
+ target = nil
221
+
222
+ if name.empty?
223
+ name = nil
224
+ target = Constants::SCHEMA_CHANGE_TARGET_KEYSPACE
225
+ else
226
+ target = Constants::SCHEMA_CHANGE_TARGET_TABLE
227
+ end
228
+
229
+ SchemaChangeResultResponse.new(nil, nil, change, keyspace, name, target, arguments, nil)
217
230
  else
218
231
  raise Errors::DecodingError, "Unsupported result type: #{result_type.inspect}"
219
232
  end
@@ -221,7 +234,19 @@ module Cassandra
221
234
  event_type = buffer.read_string
222
235
  case event_type
223
236
  when 'SCHEMA_CHANGE'
224
- SchemaChangeEventResponse.new(buffer.read_string, buffer.read_string, buffer.read_string)
237
+ change = buffer.read_string
238
+ keyspace = buffer.read_string
239
+ name = buffer.read_string
240
+ arguments = EMPTY_LIST
241
+
242
+ if name.empty?
243
+ name = nil
244
+ target = Constants::SCHEMA_CHANGE_TARGET_KEYSPACE
245
+ else
246
+ target = Constants::SCHEMA_CHANGE_TARGET_TABLE
247
+ end
248
+
249
+ SchemaChangeEventResponse.new(change, keyspace, name, target, arguments)
225
250
  when 'STATUS_CHANGE'
226
251
  StatusChangeEventResponse.new(buffer.read_string, *buffer.read_inet)
227
252
  when 'TOPOLOGY_CHANGE'