cql-rb 1.2.2 → 2.0.0.pre0
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.
- checksums.yaml +4 -4
 - data/.yardopts +4 -0
 - data/README.md +139 -17
 - data/lib/cql/client.rb +237 -8
 - data/lib/cql/client/asynchronous_client.rb +138 -54
 - data/lib/cql/client/asynchronous_prepared_statement.rb +41 -6
 - data/lib/cql/client/authenticators.rb +46 -0
 - data/lib/cql/client/batch.rb +115 -0
 - data/lib/cql/client/connector.rb +255 -0
 - data/lib/cql/client/execute_options_decoder.rb +25 -9
 - data/lib/cql/client/keyspace_changer.rb +5 -5
 - data/lib/cql/client/peer_discovery.rb +33 -0
 - data/lib/cql/client/query_result.rb +124 -1
 - data/lib/cql/client/request_runner.rb +4 -2
 - data/lib/cql/client/synchronous_client.rb +14 -2
 - data/lib/cql/client/synchronous_prepared_statement.rb +19 -1
 - data/lib/cql/future.rb +97 -50
 - data/lib/cql/io/connection.rb +0 -1
 - data/lib/cql/io/io_reactor.rb +1 -1
 - data/lib/cql/protocol.rb +8 -1
 - data/lib/cql/protocol/cql_protocol_handler.rb +2 -2
 - data/lib/cql/protocol/decoding.rb +10 -15
 - data/lib/cql/protocol/frame_decoder.rb +2 -1
 - data/lib/cql/protocol/frame_encoder.rb +5 -4
 - data/lib/cql/protocol/requests/auth_response_request.rb +31 -0
 - data/lib/cql/protocol/requests/batch_request.rb +59 -0
 - data/lib/cql/protocol/requests/credentials_request.rb +1 -1
 - data/lib/cql/protocol/requests/execute_request.rb +45 -17
 - data/lib/cql/protocol/requests/options_request.rb +1 -1
 - data/lib/cql/protocol/requests/prepare_request.rb +1 -1
 - data/lib/cql/protocol/requests/query_request.rb +97 -5
 - data/lib/cql/protocol/requests/register_request.rb +1 -1
 - data/lib/cql/protocol/requests/startup_request.rb +4 -4
 - data/lib/cql/protocol/response.rb +2 -2
 - data/lib/cql/protocol/responses/auth_challenge_response.rb +25 -0
 - data/lib/cql/protocol/responses/auth_success_response.rb +25 -0
 - data/lib/cql/protocol/responses/authenticate_response.rb +1 -1
 - data/lib/cql/protocol/responses/detailed_error_response.rb +1 -1
 - data/lib/cql/protocol/responses/error_response.rb +3 -2
 - data/lib/cql/protocol/responses/event_response.rb +3 -2
 - data/lib/cql/protocol/responses/prepared_result_response.rb +10 -6
 - data/lib/cql/protocol/responses/raw_rows_result_response.rb +27 -0
 - data/lib/cql/protocol/responses/ready_response.rb +1 -1
 - data/lib/cql/protocol/responses/result_response.rb +2 -2
 - data/lib/cql/protocol/responses/rows_result_response.rb +43 -23
 - data/lib/cql/protocol/responses/schema_change_event_response.rb +1 -1
 - data/lib/cql/protocol/responses/schema_change_result_response.rb +1 -1
 - data/lib/cql/protocol/responses/set_keyspace_result_response.rb +1 -1
 - data/lib/cql/protocol/responses/status_change_event_response.rb +1 -1
 - data/lib/cql/protocol/responses/supported_response.rb +1 -1
 - data/lib/cql/protocol/responses/void_result_response.rb +1 -1
 - data/lib/cql/protocol/type_converter.rb +2 -2
 - data/lib/cql/uuid.rb +2 -2
 - data/lib/cql/version.rb +1 -1
 - data/spec/cql/client/asynchronous_client_spec.rb +493 -50
 - data/spec/cql/client/asynchronous_prepared_statement_spec.rb +193 -11
 - data/spec/cql/client/authenticators_spec.rb +56 -0
 - data/spec/cql/client/batch_spec.rb +277 -0
 - data/spec/cql/client/connector_spec.rb +606 -0
 - data/spec/cql/client/execute_options_decoder_spec.rb +95 -0
 - data/spec/cql/client/keyspace_changer_spec.rb +8 -8
 - data/spec/cql/client/peer_discovery_spec.rb +92 -0
 - data/spec/cql/client/query_result_spec.rb +352 -0
 - data/spec/cql/client/request_runner_spec.rb +31 -5
 - data/spec/cql/client/synchronous_client_spec.rb +44 -1
 - data/spec/cql/client/synchronous_prepared_statement_spec.rb +63 -1
 - data/spec/cql/future_spec.rb +50 -2
 - data/spec/cql/protocol/cql_protocol_handler_spec.rb +16 -5
 - data/spec/cql/protocol/decoding_spec.rb +16 -6
 - data/spec/cql/protocol/encoding_spec.rb +3 -1
 - data/spec/cql/protocol/frame_encoder_spec.rb +99 -50
 - data/spec/cql/protocol/requests/auth_response_request_spec.rb +62 -0
 - data/spec/cql/protocol/requests/batch_request_spec.rb +155 -0
 - data/spec/cql/protocol/requests/credentials_request_spec.rb +1 -1
 - data/spec/cql/protocol/requests/execute_request_spec.rb +184 -71
 - data/spec/cql/protocol/requests/options_request_spec.rb +1 -1
 - data/spec/cql/protocol/requests/prepare_request_spec.rb +1 -1
 - data/spec/cql/protocol/requests/query_request_spec.rb +255 -32
 - data/spec/cql/protocol/requests/register_request_spec.rb +1 -1
 - data/spec/cql/protocol/requests/startup_request_spec.rb +12 -6
 - data/spec/cql/protocol/responses/auth_challenge_response_spec.rb +31 -0
 - data/spec/cql/protocol/responses/auth_success_response_spec.rb +31 -0
 - data/spec/cql/protocol/responses/authenticate_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/detailed_error_response_spec.rb +14 -7
 - data/spec/cql/protocol/responses/error_response_spec.rb +4 -2
 - data/spec/cql/protocol/responses/event_response_spec.rb +7 -4
 - data/spec/cql/protocol/responses/prepared_result_response_spec.rb +89 -34
 - data/spec/cql/protocol/responses/raw_rows_result_response_spec.rb +66 -0
 - data/spec/cql/protocol/responses/ready_response_spec.rb +1 -1
 - data/spec/cql/protocol/responses/result_response_spec.rb +19 -7
 - data/spec/cql/protocol/responses/rows_result_response_spec.rb +56 -11
 - data/spec/cql/protocol/responses/schema_change_event_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/schema_change_result_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/set_keyspace_result_response_spec.rb +1 -1
 - data/spec/cql/protocol/responses/status_change_event_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/supported_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/topology_change_event_response_spec.rb +2 -1
 - data/spec/cql/protocol/responses/void_result_response_spec.rb +1 -1
 - data/spec/cql/protocol/type_converter_spec.rb +21 -4
 - data/spec/cql/uuid_spec.rb +10 -3
 - data/spec/integration/client_spec.rb +251 -28
 - data/spec/integration/protocol_spec.rb +213 -62
 - data/spec/integration/regression_spec.rb +4 -1
 - data/spec/integration/uuid_spec.rb +4 -1
 - data/spec/support/fake_io_reactor.rb +5 -5
 - metadata +36 -7
 - data/lib/cql/client/connection_helper.rb +0 -181
 - data/spec/cql/client/connection_helper_spec.rb +0 -429
 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: ascii-8bit
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Cql
         
     | 
| 
      
 7 
     | 
    
         
            +
              module Protocol
         
     | 
| 
      
 8 
     | 
    
         
            +
                describe AuthSuccessResponse do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  describe '.decode!' do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    it 'decodes the token' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x0cbingbongpong")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      response.token.should == 'bingbongpong'
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    it 'decodes a nil token' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\xff\xff\xff\xff")
         
     | 
| 
      
 18 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      response.token.should be_nil
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  describe '#to_s' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    it 'returns a string with number of bytes in the token' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      response = described_class.new('bingbongpong')
         
     | 
| 
      
 26 
     | 
    
         
            +
                      response.to_s.should == 'AUTH_SUCCESS 12'
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -8,7 +8,8 @@ module Cql 
     | 
|
| 
       8 
8 
     | 
    
         
             
                describe AuthenticateResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    let :response do
         
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x2forg.apache.cassandra.auth.PasswordAuthenticator")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       12 
13 
     | 
    
         
             
                    end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
                    it 'decodes the authentication class' do
         
     | 
| 
         @@ -8,7 +8,8 @@ module Cql 
     | 
|
| 
       8 
8 
     | 
    
         
             
                describe DetailedErrorResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    it 'decodes an unavailable error' do
         
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x05\x00\x00\x00\x03\x00\x00\x00\x02")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      response = described_class.decode!(0x1000, '', 1, buffer, buffer.length)
         
     | 
| 
       12 
13 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       13 
14 
     | 
    
         
             
                        :cl => :all,
         
     | 
| 
       14 
15 
     | 
    
         
             
                        :required => 3,
         
     | 
| 
         @@ -17,7 +18,8 @@ module Cql 
     | 
|
| 
       17 
18 
     | 
    
         
             
                    end
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                    it 'decodes a write_timeout error' do
         
     | 
| 
       20 
     | 
    
         
            -
                       
     | 
| 
      
 21 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\tBATCH_LOG")
         
     | 
| 
      
 22 
     | 
    
         
            +
                      response = described_class.decode!(0x1100, '', 1, buffer, buffer.length)
         
     | 
| 
       21 
23 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       22 
24 
     | 
    
         
             
                        :cl => :one,
         
     | 
| 
       23 
25 
     | 
    
         
             
                        :received => 0,
         
     | 
| 
         @@ -27,14 +29,16 @@ module Cql 
     | 
|
| 
       27 
29 
     | 
    
         
             
                    end
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
                    it 'decodes a read_timeout error' do
         
     | 
| 
       30 
     | 
    
         
            -
                       
     | 
| 
      
 32 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x01")
         
     | 
| 
      
 33 
     | 
    
         
            +
                      response = described_class.decode!(0x1200, '', 1, buffer, buffer.length)
         
     | 
| 
       31 
34 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       32 
35 
     | 
    
         
             
                        :cl => :one,
         
     | 
| 
       33 
36 
     | 
    
         
             
                        :received => 0,
         
     | 
| 
       34 
37 
     | 
    
         
             
                        :blockfor => 1,
         
     | 
| 
       35 
38 
     | 
    
         
             
                        :data_present => true
         
     | 
| 
       36 
39 
     | 
    
         
             
                      }
         
     | 
| 
       37 
     | 
    
         
            -
                       
     | 
| 
      
 40 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00")
         
     | 
| 
      
 41 
     | 
    
         
            +
                      response = described_class.decode!(0x1200, '', 1, buffer, buffer.length)
         
     | 
| 
       38 
42 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       39 
43 
     | 
    
         
             
                        :cl => :one,
         
     | 
| 
       40 
44 
     | 
    
         
             
                        :received => 0,
         
     | 
| 
         @@ -44,7 +48,8 @@ module Cql 
     | 
|
| 
       44 
48 
     | 
    
         
             
                    end
         
     | 
| 
       45 
49 
     | 
    
         | 
| 
       46 
50 
     | 
    
         
             
                    it 'decodes an already_exists error with a keyspace' do
         
     | 
| 
       47 
     | 
    
         
            -
                       
     | 
| 
      
 51 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x05stuff\x00\x00")
         
     | 
| 
      
 52 
     | 
    
         
            +
                      response = described_class.decode!(0x2400, '', 1, buffer, buffer.length)
         
     | 
| 
       48 
53 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       49 
54 
     | 
    
         
             
                        :ks => 'stuff',
         
     | 
| 
       50 
55 
     | 
    
         
             
                        :table => '',
         
     | 
| 
         @@ -52,7 +57,8 @@ module Cql 
     | 
|
| 
       52 
57 
     | 
    
         
             
                    end
         
     | 
| 
       53 
58 
     | 
    
         | 
| 
       54 
59 
     | 
    
         
             
                    it 'decodes an already_exists error with a keyspace and table' do
         
     | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
      
 60 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x05stuff\x00\x06things")
         
     | 
| 
      
 61 
     | 
    
         
            +
                      response = described_class.decode!(0x2400, '', 1, buffer, buffer.length)
         
     | 
| 
       56 
62 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       57 
63 
     | 
    
         
             
                        :ks => 'stuff',
         
     | 
| 
       58 
64 
     | 
    
         
             
                        :table => 'things',
         
     | 
| 
         @@ -60,7 +66,8 @@ module Cql 
     | 
|
| 
       60 
66 
     | 
    
         
             
                    end
         
     | 
| 
       61 
67 
     | 
    
         | 
| 
       62 
68 
     | 
    
         
             
                    it 'decodes unprepared error' do
         
     | 
| 
       63 
     | 
    
         
            -
                       
     | 
| 
      
 69 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x10\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/")
         
     | 
| 
      
 70 
     | 
    
         
            +
                      response = described_class.decode!(0x2500, '', 1, buffer, buffer.length)
         
     | 
| 
       64 
71 
     | 
    
         
             
                      response.details.should == {
         
     | 
| 
       65 
72 
     | 
    
         
             
                        :id => "\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/"
         
     | 
| 
       66 
73 
     | 
    
         
             
                      }
         
     | 
| 
         @@ -8,7 +8,8 @@ module Cql 
     | 
|
| 
       8 
8 
     | 
    
         
             
                describe ErrorResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    let :response do
         
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\n\x00PProvided version 4.0.0 is not supported by this server (supported: 2.0.0, 3.0.0)")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       12 
13 
     | 
    
         
             
                    end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
                    it 'decodes the error code' do
         
     | 
| 
         @@ -20,7 +21,8 @@ module Cql 
     | 
|
| 
       20 
21 
     | 
    
         
             
                    end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
                    it 'decodes error frames with details' do
         
     | 
| 
       23 
     | 
    
         
            -
                       
     | 
| 
      
 24 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x11\x00\x000Operation timed out - received only 0 responses.\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\tBATCH_LOG")
         
     | 
| 
      
 25 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       24 
26 
     | 
    
         
             
                      response.details.should_not be_nil
         
     | 
| 
       25 
27 
     | 
    
         
             
                    end
         
     | 
| 
       26 
28 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -8,7 +8,8 @@ module Cql 
     | 
|
| 
       8 
8 
     | 
    
         
             
                describe EventResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    it 'decodes a SCHEMA_CHANGE event' do
         
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\rSCHEMA_CHANGE\x00\aDROPPED\x00\ncql_rb_609\x00\x05users")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       12 
13 
     | 
    
         
             
                      response.type.should == 'SCHEMA_CHANGE'
         
     | 
| 
       13 
14 
     | 
    
         
             
                      response.change.should == 'DROPPED'
         
     | 
| 
       14 
15 
     | 
    
         
             
                      response.keyspace.should == 'cql_rb_609'
         
     | 
| 
         @@ -16,7 +17,8 @@ module Cql 
     | 
|
| 
       16 
17 
     | 
    
         
             
                    end
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
                    it 'decodes a STATUS_CHANGE event' do
         
     | 
| 
       19 
     | 
    
         
            -
                       
     | 
| 
      
 20 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\rSTATUS_CHANGE\x00\x04DOWN\x04\x00\x00\x00\x00\x00\x00#R")
         
     | 
| 
      
 21 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       20 
22 
     | 
    
         
             
                      response.type.should == 'STATUS_CHANGE'
         
     | 
| 
       21 
23 
     | 
    
         
             
                      response.change.should == 'DOWN'
         
     | 
| 
       22 
24 
     | 
    
         
             
                      response.address.should == IPAddr.new('0.0.0.0')
         
     | 
| 
         @@ -24,7 +26,8 @@ module Cql 
     | 
|
| 
       24 
26 
     | 
    
         
             
                    end
         
     | 
| 
       25 
27 
     | 
    
         | 
| 
       26 
28 
     | 
    
         
             
                    it 'decodes a TOPOLOGY_CHANGE event' do
         
     | 
| 
       27 
     | 
    
         
            -
                       
     | 
| 
      
 29 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x0FTOPOLOGY_CHANGE\x00\fREMOVED_NODE\x04\x00\x00\x00\x00\x00\x00#R")
         
     | 
| 
      
 30 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       28 
31 
     | 
    
         
             
                      response.type.should == 'TOPOLOGY_CHANGE'
         
     | 
| 
       29 
32 
     | 
    
         
             
                      response.change.should == 'REMOVED_NODE'
         
     | 
| 
       30 
33 
     | 
    
         
             
                      response.address.should == IPAddr.new('0.0.0.0')
         
     | 
| 
         @@ -32,7 +35,7 @@ module Cql 
     | 
|
| 
       32 
35 
     | 
    
         
             
                    end
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
37 
     | 
    
         
             
                    it 'complains when asked to decode an unknown event type' do
         
     | 
| 
       35 
     | 
    
         
            -
                      expect { described_class.decode!(ByteBuffer.new("\x00\x04PING")) }.to raise_error(UnsupportedEventTypeError, /PING/)
         
     | 
| 
      
 38 
     | 
    
         
            +
                      expect { described_class.decode!(1, ByteBuffer.new("\x00\x04PING"), 6) }.to raise_error(UnsupportedEventTypeError, /PING/)
         
     | 
| 
       36 
39 
     | 
    
         
             
                    end
         
     | 
| 
       37 
40 
     | 
    
         
             
                  end
         
     | 
| 
       38 
41 
     | 
    
         
             
                end
         
     | 
| 
         @@ -7,99 +7,154 @@ module Cql 
     | 
|
| 
       7 
7 
     | 
    
         
             
              module Protocol
         
     | 
| 
       8 
8 
     | 
    
         
             
                describe PreparedResultResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
     | 
    
         
            -
                     
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                       
     | 
| 
      
 10 
     | 
    
         
            +
                    context 'with a protocol v1 frame' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                      let :response do
         
     | 
| 
      
 12 
     | 
    
         
            +
                        buffer = ByteBuffer.new
         
     | 
| 
      
 13 
     | 
    
         
            +
                        buffer << "\x00\x10\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/" # statement ID
         
     | 
| 
      
 14 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # flags (global_tables_spec)
         
     | 
| 
      
 15 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # column count
         
     | 
| 
      
 16 
     | 
    
         
            +
                        buffer << "\x00\ncql_rb_911\x00\x05users" # global_tables_spec
         
     | 
| 
      
 17 
     | 
    
         
            +
                        buffer << "\x00\tuser_name\x00\r" # col_spec (name + type)
         
     | 
| 
      
 18 
     | 
    
         
            +
                        described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                      it 'decodes the ID' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                        response.id.should == "\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/"
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      it 'decodes the column metadata' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                        response.metadata.should == [['cql_rb_911', 'users', 'user_name', :varchar]]
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    context 'with a protocol v2 frame' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                      let :response do
         
     | 
| 
      
 32 
     | 
    
         
            +
                        buffer = ByteBuffer.new
         
     | 
| 
      
 33 
     | 
    
         
            +
                        buffer << "\x00\x10\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/" # statement ID
         
     | 
| 
      
 34 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # flags (global_tables_spec)
         
     | 
| 
      
 35 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # column count
         
     | 
| 
      
 36 
     | 
    
         
            +
                        buffer << "\x00\ncql_rb_911\x00\x05users" # global_tables_spec
         
     | 
| 
      
 37 
     | 
    
         
            +
                        buffer << "\x00\tuser_name\x00\r" # col_spec (name + type)
         
     | 
| 
      
 38 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # flags (global_tables_spec)
         
     | 
| 
      
 39 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x02" # column count
         
     | 
| 
      
 40 
     | 
    
         
            +
                        buffer << "\x00\ncql_rb_911\x00\x05users" # global_tables_spec
         
     | 
| 
      
 41 
     | 
    
         
            +
                        buffer << "\x00\tuser_name\x00\r" # col_spec (name + type)
         
     | 
| 
      
 42 
     | 
    
         
            +
                        buffer << "\x00\x05email\x00\r" # col_spec (name + type)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        described_class.decode!(2, buffer, buffer.length)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      it 'decodes the ID' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                        response.id.should == "\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/"
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                      it 'decodes the column metadata' do
         
     | 
| 
      
 51 
     | 
    
         
            +
                        response.metadata.should == [
         
     | 
| 
      
 52 
     | 
    
         
            +
                          ['cql_rb_911', 'users', 'user_name', :varchar]
         
     | 
| 
      
 53 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 54 
     | 
    
         
            +
                      end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                      it 'decodes the result metadata' do
         
     | 
| 
      
 57 
     | 
    
         
            +
                        response.result_metadata.should == [
         
     | 
| 
      
 58 
     | 
    
         
            +
                          ['cql_rb_911', 'users', 'user_name', :varchar],
         
     | 
| 
      
 59 
     | 
    
         
            +
                          ['cql_rb_911', 'users', 'email', :varchar]
         
     | 
| 
      
 60 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 61 
     | 
    
         
            +
                      end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                      it 'decodes the absence of result metadata' do
         
     | 
| 
      
 64 
     | 
    
         
            +
                        buffer = ByteBuffer.new
         
     | 
| 
      
 65 
     | 
    
         
            +
                        buffer << "\x00\x10\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/" # statement ID
         
     | 
| 
      
 66 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # flags (global_tables_spec)
         
     | 
| 
      
 67 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x01" # column count
         
     | 
| 
      
 68 
     | 
    
         
            +
                        buffer << "\x00\ncql_rb_911\x00\x05users" # global_tables_spec
         
     | 
| 
      
 69 
     | 
    
         
            +
                        buffer << "\x00\tuser_name\x00\r" # col_spec (name + type)
         
     | 
| 
      
 70 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x04" # flags (no_metadata)
         
     | 
| 
      
 71 
     | 
    
         
            +
                        buffer << "\x00\x00\x00\x00" # column count
         
     | 
| 
      
 72 
     | 
    
         
            +
                        response = described_class.decode!(2, buffer, buffer.length)
         
     | 
| 
      
 73 
     | 
    
         
            +
                        response.result_metadata.should be_nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                      end
         
     | 
| 
       20 
75 
     | 
    
         
             
                    end
         
     | 
| 
       21 
76 
     | 
    
         
             
                  end
         
     | 
| 
       22 
77 
     | 
    
         | 
| 
       23 
78 
     | 
    
         
             
                  describe '#void?' do
         
     | 
| 
       24 
79 
     | 
    
         
             
                    it 'is not void' do
         
     | 
| 
       25 
     | 
    
         
            -
                      response = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 80 
     | 
    
         
            +
                      response = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       26 
81 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       27 
82 
     | 
    
         
             
                    end
         
     | 
| 
       28 
83 
     | 
    
         
             
                  end
         
     | 
| 
       29 
84 
     | 
    
         | 
| 
       30 
85 
     | 
    
         
             
                  describe '#to_s' do
         
     | 
| 
       31 
86 
     | 
    
         
             
                    it 'returns a string with the ID and metadata' do
         
     | 
| 
       32 
     | 
    
         
            -
                      response = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\x00/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 87 
     | 
    
         
            +
                      response = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\x00/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       33 
88 
     | 
    
         
             
                      response.to_s.should match(/^RESULT PREPARED [0-9a-f]{32} \[\["ks", "tbl", "col", :varchar\]\]$/)
         
     | 
| 
       34 
89 
     | 
    
         
             
                    end
         
     | 
| 
       35 
90 
     | 
    
         
             
                  end
         
     | 
| 
       36 
91 
     | 
    
         | 
| 
       37 
92 
     | 
    
         
             
                  describe '#eql?' do
         
     | 
| 
       38 
93 
     | 
    
         
             
                    it 'is equal to an identical response' do
         
     | 
| 
       39 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       40 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 94 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 95 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       41 
96 
     | 
    
         
             
                      r1.should eql(r2)
         
     | 
| 
       42 
97 
     | 
    
         
             
                    end
         
     | 
| 
       43 
98 
     | 
    
         | 
| 
       44 
99 
     | 
    
         
             
                    it 'is not equal when the IDs differ' do
         
     | 
| 
       45 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       46 
     | 
    
         
            -
                      r2 = described_class.new("\x00" * 16, [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 101 
     | 
    
         
            +
                      r2 = described_class.new("\x00" * 16, [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       47 
102 
     | 
    
         
             
                      r1.should_not eql(r2)
         
     | 
| 
       48 
103 
     | 
    
         
             
                    end
         
     | 
| 
       49 
104 
     | 
    
         | 
| 
       50 
105 
     | 
    
         
             
                    it 'is not equal when the metadata differ' do
         
     | 
| 
       51 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       52 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar], ['ks', 'tbl', 'col2', :uuid]], nil)
         
     | 
| 
      
 106 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 107 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar], ['ks', 'tbl', 'col2', :uuid]], nil, nil)
         
     | 
| 
       53 
108 
     | 
    
         
             
                      r1.should_not eql(r2)
         
     | 
| 
       54 
109 
     | 
    
         
             
                    end
         
     | 
| 
       55 
110 
     | 
    
         | 
| 
       56 
111 
     | 
    
         
             
                    it 'is not equal when one has a trace ID' do
         
     | 
| 
       57 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       58 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 112 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 113 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       59 
114 
     | 
    
         
             
                      r1.should_not eql(r2)
         
     | 
| 
       60 
115 
     | 
    
         
             
                    end
         
     | 
| 
       61 
116 
     | 
    
         | 
| 
       62 
117 
     | 
    
         
             
                    it 'is not equal when the trace IDs differ' do
         
     | 
| 
       63 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       64 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('11111111-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 118 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 119 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('11111111-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       65 
120 
     | 
    
         
             
                      r1.should_not eql(r2)
         
     | 
| 
       66 
121 
     | 
    
         
             
                    end
         
     | 
| 
       67 
122 
     | 
    
         | 
| 
       68 
123 
     | 
    
         
             
                    it 'is aliased as ==' do
         
     | 
| 
       69 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       70 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 124 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 125 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       71 
126 
     | 
    
         
             
                      r1.should == r2
         
     | 
| 
       72 
127 
     | 
    
         
             
                    end
         
     | 
| 
       73 
128 
     | 
    
         
             
                  end
         
     | 
| 
       74 
129 
     | 
    
         | 
| 
       75 
130 
     | 
    
         
             
                  describe '#hash' do
         
     | 
| 
       76 
131 
     | 
    
         
             
                    it 'is the same for an identical response' do
         
     | 
| 
       77 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       78 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 132 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 133 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       79 
134 
     | 
    
         
             
                      r1.hash.should == r2.hash
         
     | 
| 
       80 
135 
     | 
    
         
             
                    end
         
     | 
| 
       81 
136 
     | 
    
         | 
| 
       82 
137 
     | 
    
         
             
                    it 'is not the same when the IDs differ' do
         
     | 
| 
       83 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       84 
     | 
    
         
            -
                      r2 = described_class.new("\x00" * 16, [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 138 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 139 
     | 
    
         
            +
                      r2 = described_class.new("\x00" * 16, [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       85 
140 
     | 
    
         
             
                      r1.hash.should_not == r2.hash
         
     | 
| 
       86 
141 
     | 
    
         
             
                    end
         
     | 
| 
       87 
142 
     | 
    
         | 
| 
       88 
143 
     | 
    
         
             
                    it 'is not the same when the metadata differ' do
         
     | 
| 
       89 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
       90 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar], ['ks', 'tbl', 'col2', :uuid]], nil)
         
     | 
| 
      
 144 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar], ['ks', 'tbl', 'col2', :uuid]], nil, nil)
         
     | 
| 
       91 
146 
     | 
    
         
             
                      r1.hash.should_not == r2.hash
         
     | 
| 
       92 
147 
     | 
    
         
             
                    end
         
     | 
| 
       93 
148 
     | 
    
         | 
| 
       94 
149 
     | 
    
         
             
                    it 'is not the same when one has a trace ID' do
         
     | 
| 
       95 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       96 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil)
         
     | 
| 
      
 150 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 151 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, nil)
         
     | 
| 
       97 
152 
     | 
    
         
             
                      r1.hash.should_not == r2.hash
         
     | 
| 
       98 
153 
     | 
    
         
             
                    end
         
     | 
| 
       99 
154 
     | 
    
         | 
| 
       100 
155 
     | 
    
         
             
                    it 'is not equal when the trace IDs differ' do
         
     | 
| 
       101 
     | 
    
         
            -
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       102 
     | 
    
         
            -
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], Uuid.new('11111111-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 156 
     | 
    
         
            +
                      r1 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('00b69180-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
      
 157 
     | 
    
         
            +
                      r2 = described_class.new("\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/", [['ks', 'tbl', 'col', :varchar]], nil, Uuid.new('11111111-d0e1-11e2-8b8b-0800200c9a66'))
         
     | 
| 
       103 
158 
     | 
    
         
             
                      r1.hash.should_not == r2.hash
         
     | 
| 
       104 
159 
     | 
    
         
             
                    end
         
     | 
| 
       105 
160 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,66 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: ascii-8bit
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Cql
         
     | 
| 
      
 7 
     | 
    
         
            +
              module Protocol
         
     | 
| 
      
 8 
     | 
    
         
            +
                describe RawRowsResultResponse do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  let :response do
         
     | 
| 
      
 10 
     | 
    
         
            +
                    described_class.new(2, raw_rows, nil, nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  let :raw_rows do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    ByteBuffer.new("\x00\x00\x00\x02\x00\x00\x00\x04phil\x00\x00\x00\x0dphil@heck.com\xff\xff\xff\xff\x00\x00\x00\x03sue\x00\x00\x00\x0dsue@inter.net\xff\xff\xff\xff")
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  let :metadata do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    [
         
     | 
| 
      
 19 
     | 
    
         
            +
                      ['ks', 'users', 'user_name', :varchar],
         
     | 
| 
      
 20 
     | 
    
         
            +
                      ['ks', 'users', 'email', :varchar],
         
     | 
| 
      
 21 
     | 
    
         
            +
                      ['ks', 'users', 'password', :varchar],
         
     | 
| 
      
 22 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  describe '#materialize' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    it 'decodes the rows using the given metadata' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                      response.materialize(metadata)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      response.rows.should == [
         
     | 
| 
      
 29 
     | 
    
         
            +
                        {'user_name' => 'phil', 'email' => 'phil@heck.com', 'password' => nil},
         
     | 
| 
      
 30 
     | 
    
         
            +
                        {'user_name' => 'sue', 'email' => 'sue@inter.net', 'password' => nil},
         
     | 
| 
      
 31 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    it 'returns the rows' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                      rows = response.materialize(metadata)
         
     | 
| 
      
 36 
     | 
    
         
            +
                      rows.should == [
         
     | 
| 
      
 37 
     | 
    
         
            +
                        {'user_name' => 'phil', 'email' => 'phil@heck.com', 'password' => nil},
         
     | 
| 
      
 38 
     | 
    
         
            +
                        {'user_name' => 'sue', 'email' => 'sue@inter.net', 'password' => nil},
         
     | 
| 
      
 39 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  describe '#rows' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                    it 'raises an error before #materialize has been called' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                      expect { response.rows }.to raise_error(UnmaterializedRowsError)
         
     | 
| 
      
 46 
     | 
    
         
            +
                      response.materialize(metadata)
         
     | 
| 
      
 47 
     | 
    
         
            +
                      response.rows
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  describe '#metadata' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                    it 'returns nil before #materialize has been called' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                      response.metadata.should be_nil
         
     | 
| 
      
 54 
     | 
    
         
            +
                      response.materialize(metadata)
         
     | 
| 
      
 55 
     | 
    
         
            +
                      response.metadata.should == metadata
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  describe '#to_s' do
         
     | 
| 
      
 60 
     | 
    
         
            +
                    it 'returns a static string' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                      response.to_s.should == 'RESULT ROWS (raw)'
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -9,7 +9,7 @@ module Cql 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    it 'returns a new instance' do
         
     | 
| 
       11 
11 
     | 
    
         
             
                      unused_byte_buffer = nil
         
     | 
| 
       12 
     | 
    
         
            -
                      described_class.decode!(unused_byte_buffer).should be_a(described_class)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      described_class.decode!(1, unused_byte_buffer, 0).should be_a(described_class)
         
     | 
| 
       13 
13 
     | 
    
         
             
                    end
         
     | 
| 
       14 
14 
     | 
    
         
             
                  end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
         @@ -8,13 +8,15 @@ module Cql 
     | 
|
| 
       8 
8 
     | 
    
         
             
                describe ResultResponse do
         
     | 
| 
       9 
9 
     | 
    
         
             
                  describe '.decode!' do
         
     | 
| 
       10 
10 
     | 
    
         
             
                    it 'decodes a set_keyspace result' do
         
     | 
| 
       11 
     | 
    
         
            -
                       
     | 
| 
      
 11 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x03\x00\x06system")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       12 
13 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       13 
14 
     | 
    
         
             
                      response.keyspace.should == 'system'
         
     | 
| 
       14 
15 
     | 
    
         
             
                    end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
                    it 'decodes a schema_change CREATED result' do
         
     | 
| 
       17 
     | 
    
         
            -
                       
     | 
| 
      
 18 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x05\x00\aCREATED\x00\ncql_rb_477\x00\x00")
         
     | 
| 
      
 19 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       18 
20 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       19 
21 
     | 
    
         
             
                      response.change.should == 'CREATED'
         
     | 
| 
       20 
22 
     | 
    
         
             
                      response.keyspace.should == 'cql_rb_477'
         
     | 
| 
         @@ -22,7 +24,8 @@ module Cql 
     | 
|
| 
       22 
24 
     | 
    
         
             
                    end
         
     | 
| 
       23 
25 
     | 
    
         | 
| 
       24 
26 
     | 
    
         
             
                    it 'decodes a schema_change UPDATED result' do
         
     | 
| 
       25 
     | 
    
         
            -
                       
     | 
| 
      
 27 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x05\x00\aUPDATED\x00\ncql_rb_973\x00\x05users")
         
     | 
| 
      
 28 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       26 
29 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       27 
30 
     | 
    
         
             
                      response.change.should == 'UPDATED'
         
     | 
| 
       28 
31 
     | 
    
         
             
                      response.keyspace.should == 'cql_rb_973'
         
     | 
| 
         @@ -30,26 +33,35 @@ module Cql 
     | 
|
| 
       30 
33 
     | 
    
         
             
                    end
         
     | 
| 
       31 
34 
     | 
    
         | 
| 
       32 
35 
     | 
    
         
             
                    it 'decodes a void result' do
         
     | 
| 
       33 
     | 
    
         
            -
                       
     | 
| 
      
 36 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x01")
         
     | 
| 
      
 37 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       34 
38 
     | 
    
         
             
                      response.should be_void
         
     | 
| 
       35 
39 
     | 
    
         
             
                    end
         
     | 
| 
       36 
40 
     | 
    
         | 
| 
       37 
41 
     | 
    
         
             
                    it 'decodes a rows result' do
         
     | 
| 
       38 
     | 
    
         
            -
                       
     | 
| 
      
 42 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\ncql_rb_126\x00\x05users\x00\tuser_name\x00\r\x00\x05email\x00\r\x00\bpassword\x00\r\x00\x00\x00\x02\x00\x00\x00\x04phil\x00\x00\x00\rphil@heck.com\xFF\xFF\xFF\xFF\x00\x00\x00\x03sue\x00\x00\x00\rsue@inter.net\xFF\xFF\xFF\xFF")
         
     | 
| 
      
 43 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       39 
44 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       40 
45 
     | 
    
         
             
                      response.rows.size.should == 2
         
     | 
| 
       41 
46 
     | 
    
         
             
                      response.metadata.size.should == 3
         
     | 
| 
       42 
47 
     | 
    
         
             
                    end
         
     | 
| 
       43 
48 
     | 
    
         | 
| 
      
 49 
     | 
    
         
            +
                    it 'decodes a rows result' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x03\x00\x05email\x00\r\x00\bpassword\x00\r\x00\x00\x00\x02\x00\x00\x00\x04phil\x00\x00\x00\rphil@heck.com\xFF\xFF\xFF\xFF\x00\x00\x00\x03sue\x00\x00\x00\rsue@inter.net\xFF\xFF\xFF\xFF")
         
     | 
| 
      
 51 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
      
 52 
     | 
    
         
            +
                      response.should_not be_void
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
       44 
55 
     | 
    
         
             
                    it 'decodes a prepared result' do
         
     | 
| 
       45 
     | 
    
         
            -
                       
     | 
| 
      
 56 
     | 
    
         
            +
                      buffer = ByteBuffer.new("\x00\x00\x00\x04\x00\x10\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/\x00\x00\x00\x01\x00\x00\x00\x01\x00\ncql_rb_911\x00\x05users\x00\tuser_name\x00\r")
         
     | 
| 
      
 57 
     | 
    
         
            +
                      response = described_class.decode!(1, buffer, buffer.length)
         
     | 
| 
       46 
58 
     | 
    
         
             
                      response.should_not be_void
         
     | 
| 
       47 
59 
     | 
    
         
             
                      response.id.should == "\xCAH\x7F\x1Ez\x82\xD2<N\x8A\xF35Qq\xA5/"
         
     | 
| 
       48 
60 
     | 
    
         
             
                      response.metadata.size.should == 1
         
     | 
| 
       49 
61 
     | 
    
         
             
                    end
         
     | 
| 
       50 
62 
     | 
    
         | 
| 
       51 
63 
     | 
    
         
             
                    it 'complains when asked to decode an unknown result type' do
         
     | 
| 
       52 
     | 
    
         
            -
                      expect { described_class.decode!(ByteBuffer.new("\x00\x00\x00\xffhello")) }.to raise_error(UnsupportedResultKindError)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      expect { described_class.decode!(1, ByteBuffer.new("\x00\x00\x00\xffhello"), 9) }.to raise_error(UnsupportedResultKindError)
         
     | 
| 
       53 
65 
     | 
    
         
             
                    end
         
     | 
| 
       54 
66 
     | 
    
         
             
                  end
         
     | 
| 
       55 
67 
     | 
    
         
             
                end
         
     |