cassandra-driver 1.2.0-java → 2.0.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/cassandra.rb +5 -3
- data/lib/cassandra/cluster/client.rb +88 -95
- data/lib/cassandra/cluster/control_connection.rb +14 -13
- data/lib/cassandra/column.rb +1 -9
- data/lib/cassandra/execution/options.rb +24 -1
- data/lib/cassandra/executors.rb +2 -0
- data/lib/cassandra/load_balancing.rb +0 -2
- data/lib/cassandra/protocol.rb +7 -5
- data/lib/cassandra/protocol/coder.rb +509 -0
- data/lib/cassandra/protocol/cql_byte_buffer.rb +4 -0
- data/lib/cassandra/protocol/cql_protocol_handler.rb +38 -57
- data/lib/cassandra/protocol/requests/auth_response_request.rb +1 -1
- data/lib/cassandra/protocol/requests/batch_request.rb +35 -19
- data/lib/cassandra/protocol/requests/credentials_request.rb +1 -1
- data/lib/cassandra/protocol/requests/execute_request.rb +3 -16
- data/lib/cassandra/protocol/requests/options_request.rb +1 -1
- data/lib/cassandra/protocol/requests/prepare_request.rb +1 -1
- data/lib/cassandra/protocol/requests/query_request.rb +5 -61
- data/lib/cassandra/protocol/requests/register_request.rb +1 -1
- data/lib/cassandra/protocol/requests/startup_request.rb +1 -1
- data/lib/cassandra/protocol/response.rb +0 -9
- data/lib/cassandra/protocol/responses/already_exists_error_response.rb +40 -0
- data/lib/cassandra/protocol/responses/auth_challenge_response.rb +0 -4
- data/lib/cassandra/protocol/responses/auth_success_response.rb +1 -5
- data/lib/cassandra/protocol/responses/authenticate_response.rb +0 -4
- data/lib/cassandra/protocol/responses/error_response.rb +0 -12
- data/lib/cassandra/protocol/responses/event_response.rb +0 -8
- data/lib/cassandra/protocol/responses/prepared_result_response.rb +0 -10
- data/lib/cassandra/protocol/responses/raw_rows_result_response.rb +1 -1
- data/lib/cassandra/protocol/responses/read_timeout_error_response.rb +42 -0
- data/lib/cassandra/protocol/responses/ready_response.rb +0 -4
- data/lib/cassandra/protocol/responses/result_response.rb +0 -7
- data/lib/cassandra/protocol/responses/rows_result_response.rb +0 -101
- data/lib/cassandra/protocol/responses/schema_change_event_response.rb +0 -3
- data/lib/cassandra/protocol/responses/set_keyspace_result_response.rb +0 -4
- data/lib/cassandra/protocol/responses/status_change_event_response.rb +0 -4
- data/lib/cassandra/protocol/responses/supported_response.rb +0 -4
- data/lib/cassandra/protocol/responses/unavailable_error_response.rb +41 -0
- data/lib/cassandra/protocol/responses/unprepared_error_response.rb +39 -0
- data/lib/cassandra/protocol/responses/void_result_response.rb +0 -4
- data/lib/cassandra/protocol/responses/write_timeout_error_response.rb +44 -0
- data/lib/cassandra/protocol/v1.rb +238 -0
- data/lib/cassandra/session.rb +95 -16
- data/lib/cassandra/statements/batch.rb +33 -6
- data/lib/cassandra/statements/bound.rb +3 -3
- data/lib/cassandra/statements/prepared.rb +38 -10
- data/lib/cassandra/statements/simple.rb +72 -3
- data/lib/cassandra/table.rb +2 -3
- data/lib/cassandra/util.rb +18 -0
- data/lib/cassandra/version.rb +1 -1
- metadata +8 -5
- data/lib/cassandra/protocol/frame_decoder.rb +0 -128
- data/lib/cassandra/protocol/frame_encoder.rb +0 -48
- data/lib/cassandra/protocol/responses/detailed_error_response.rb +0 -75
- data/lib/cassandra/protocol/type_converter.rb +0 -389
@@ -1,48 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Copyright 2013-2014 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
|
-
# @private
|
22
|
-
class FrameEncoder
|
23
|
-
def initialize(protocol_version=1, compressor=nil)
|
24
|
-
@protocol_version = protocol_version
|
25
|
-
@compressor = compressor
|
26
|
-
end
|
27
|
-
|
28
|
-
def encode_frame(request, stream_id=0, buffer=nil)
|
29
|
-
raise EncodingError, 'The stream ID must be between 0 and 127' unless 0 <= stream_id && stream_id < 128
|
30
|
-
buffer ||= CqlByteBuffer.new
|
31
|
-
flags = request.trace? ? 2 : 0
|
32
|
-
body = request.write(@protocol_version, CqlByteBuffer.new)
|
33
|
-
if @compressor && request.compressable? && @compressor.compress?(body)
|
34
|
-
flags |= 1
|
35
|
-
body = @compressor.compress(body)
|
36
|
-
end
|
37
|
-
header = [@protocol_version, flags, stream_id, request.opcode, body.bytesize]
|
38
|
-
buffer << header.pack(Formats::HEADER_FORMAT)
|
39
|
-
buffer << body
|
40
|
-
buffer
|
41
|
-
end
|
42
|
-
|
43
|
-
def change_stream_id(new_stream_id, buffer, offset=0)
|
44
|
-
buffer.update(offset + 2, new_stream_id.chr)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Copyright 2013-2014 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 DetailedErrorResponse < ErrorResponse
|
22
|
-
attr_reader :details
|
23
|
-
|
24
|
-
def initialize(code, message, details)
|
25
|
-
super(code, message)
|
26
|
-
@details = details
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.decode(code, message, protocol_version, buffer, length, trace_id=nil)
|
30
|
-
details = {}
|
31
|
-
case code
|
32
|
-
when 0x1000 # unavailable
|
33
|
-
details[:cl] = buffer.read_consistency
|
34
|
-
details[:required] = buffer.read_int
|
35
|
-
details[:alive] = buffer.read_int
|
36
|
-
when 0x1100 # write_timeout
|
37
|
-
details[:cl] = buffer.read_consistency
|
38
|
-
details[:received] = buffer.read_int
|
39
|
-
details[:blockfor] = buffer.read_int
|
40
|
-
write_type = buffer.read_string
|
41
|
-
write_type.downcase!
|
42
|
-
|
43
|
-
details[:write_type] = write_type.to_sym
|
44
|
-
when 0x1200 # read_timeout
|
45
|
-
details[:cl] = buffer.read_consistency
|
46
|
-
details[:received] = buffer.read_int
|
47
|
-
details[:blockfor] = buffer.read_int
|
48
|
-
details[:data_present] = buffer.read_byte != 0
|
49
|
-
when 0x2400 # already_exists
|
50
|
-
details[:ks] = buffer.read_string
|
51
|
-
details[:table] = buffer.read_string
|
52
|
-
when 0x2500
|
53
|
-
details[:id] = buffer.read_short_bytes
|
54
|
-
end
|
55
|
-
new(code, message, details)
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_error(statement = nil)
|
59
|
-
case code
|
60
|
-
when 0x1000 then Errors::UnavailableError.new(@message, statement, @details[:cl], @details[:required], @details[:alive])
|
61
|
-
when 0x1100 then Errors::WriteTimeoutError.new(@message, statement, @details[:write_type], @details[:cl], @details[:blockfor], @details[:received])
|
62
|
-
when 0x1200 then Errors::ReadTimeoutError.new(@message, statement, @details[:data_present], @details[:cl], @details[:blockfor], @details[:received])
|
63
|
-
when 0x2400 then Errors::AlreadyExistsError.new(@message, statement, @details[:ks], @details[:table])
|
64
|
-
when 0x2500 then Errors::UnpreparedError.new(@message, statement, @details[:id])
|
65
|
-
else
|
66
|
-
super
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def to_s
|
71
|
-
"#{super} #{@details}"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,389 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
#--
|
4
|
-
# Copyright 2013-2014 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 TypeConverter
|
22
|
-
def initialize
|
23
|
-
@from_bytes_converters = from_bytes_converters
|
24
|
-
@to_bytes_converters = to_bytes_converters
|
25
|
-
end
|
26
|
-
|
27
|
-
def from_bytes(buffer, type, size_bytes=4)
|
28
|
-
return nil if buffer.empty?
|
29
|
-
case type
|
30
|
-
when Array
|
31
|
-
return nil unless read_size(buffer, size_bytes)
|
32
|
-
case type.first
|
33
|
-
when :list
|
34
|
-
bytes_to_list(buffer, @from_bytes_converters[type[1]])
|
35
|
-
when :map
|
36
|
-
bytes_to_map(buffer, @from_bytes_converters[type[1]], @from_bytes_converters[type[2]])
|
37
|
-
when :set
|
38
|
-
bytes_to_set(buffer, @from_bytes_converters[type[1]])
|
39
|
-
end
|
40
|
-
else
|
41
|
-
@from_bytes_converters[type].call(buffer, size_bytes)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def to_bytes(buffer, type, value, size_bytes=4)
|
46
|
-
case type
|
47
|
-
when Array
|
48
|
-
unless value.nil? || value.is_a?(Enumerable)
|
49
|
-
raise EncodingError, 'Value for collection must be enumerable'
|
50
|
-
end
|
51
|
-
case type.first
|
52
|
-
when :list, :set
|
53
|
-
_, sub_type = type
|
54
|
-
if value
|
55
|
-
raw = CqlByteBuffer.new
|
56
|
-
raw.append_short(value.size)
|
57
|
-
value.each do |element|
|
58
|
-
to_bytes(raw, sub_type, element, 2)
|
59
|
-
end
|
60
|
-
buffer.append_bytes(raw)
|
61
|
-
else
|
62
|
-
nil_to_bytes(buffer, size_bytes)
|
63
|
-
end
|
64
|
-
when :map
|
65
|
-
_, key_type, value_type = type
|
66
|
-
if value
|
67
|
-
raw = CqlByteBuffer.new
|
68
|
-
raw.append_short(value.size)
|
69
|
-
value.each do |key, value|
|
70
|
-
to_bytes(raw, key_type, key, 2)
|
71
|
-
to_bytes(raw, value_type, value, 2)
|
72
|
-
end
|
73
|
-
buffer.append_bytes(raw)
|
74
|
-
else
|
75
|
-
nil_to_bytes(buffer, size_bytes)
|
76
|
-
end
|
77
|
-
else
|
78
|
-
raise EncodingError, %(Unsupported column collection type: #{type.first})
|
79
|
-
end
|
80
|
-
else
|
81
|
-
converter = @to_bytes_converters[type]
|
82
|
-
unless converter
|
83
|
-
raise EncodingError, %(Unsupported column type: #{type})
|
84
|
-
end
|
85
|
-
converter.call(buffer, value, size_bytes)
|
86
|
-
end
|
87
|
-
rescue TypeError => e
|
88
|
-
raise TypeError, %("#{value}" cannot be encoded as #{type.to_s.upcase}: #{e.message}), e.backtrace
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
def from_bytes_converters
|
94
|
-
{
|
95
|
-
:ascii => method(:bytes_to_ascii),
|
96
|
-
:bigint => method(:bytes_to_bigint),
|
97
|
-
:blob => method(:bytes_to_blob),
|
98
|
-
:boolean => method(:bytes_to_boolean),
|
99
|
-
:counter => method(:bytes_to_bigint),
|
100
|
-
:decimal => method(:bytes_to_decimal),
|
101
|
-
:double => method(:bytes_to_double),
|
102
|
-
:float => method(:bytes_to_float),
|
103
|
-
:int => method(:bytes_to_int),
|
104
|
-
:timestamp => method(:bytes_to_timestamp),
|
105
|
-
:varchar => method(:bytes_to_varchar),
|
106
|
-
:text => method(:bytes_to_varchar),
|
107
|
-
:varint => method(:bytes_to_varint),
|
108
|
-
:timeuuid => method(:bytes_to_timeuuid),
|
109
|
-
:uuid => method(:bytes_to_uuid),
|
110
|
-
:inet => method(:bytes_to_inet),
|
111
|
-
}
|
112
|
-
end
|
113
|
-
|
114
|
-
def to_bytes_converters
|
115
|
-
{
|
116
|
-
:ascii => method(:ascii_to_bytes),
|
117
|
-
:bigint => method(:bigint_to_bytes),
|
118
|
-
:blob => method(:blob_to_bytes),
|
119
|
-
:boolean => method(:boolean_to_bytes),
|
120
|
-
:counter => method(:bigint_to_bytes),
|
121
|
-
:decimal => method(:decimal_to_bytes),
|
122
|
-
:double => method(:double_to_bytes),
|
123
|
-
:float => method(:float_to_bytes),
|
124
|
-
:inet => method(:inet_to_bytes),
|
125
|
-
:int => method(:int_to_bytes),
|
126
|
-
:text => method(:varchar_to_bytes),
|
127
|
-
:varchar => method(:varchar_to_bytes),
|
128
|
-
:timestamp => method(:timestamp_to_bytes),
|
129
|
-
:timeuuid => method(:uuid_to_bytes),
|
130
|
-
:uuid => method(:uuid_to_bytes),
|
131
|
-
:varint => method(:varint_to_bytes),
|
132
|
-
}
|
133
|
-
end
|
134
|
-
|
135
|
-
def read_size(buffer, size_bytes)
|
136
|
-
if size_bytes == 2
|
137
|
-
size = buffer.read_short
|
138
|
-
return nil if size & 0x8000 == 0x8000
|
139
|
-
else
|
140
|
-
size = buffer.read_signed_int
|
141
|
-
return nil if size & 0x80000000 == 0x80000000
|
142
|
-
end
|
143
|
-
return nil if size.zero?
|
144
|
-
size
|
145
|
-
end
|
146
|
-
|
147
|
-
def bytes_to_ascii(buffer, size_bytes)
|
148
|
-
bytes = size_bytes == 4 ? buffer.read_bytes : buffer.read_short_bytes
|
149
|
-
bytes ? bytes.force_encoding(::Encoding::ASCII) : nil
|
150
|
-
end
|
151
|
-
|
152
|
-
def bytes_to_bigint(buffer, size_bytes)
|
153
|
-
return nil unless read_size(buffer, size_bytes)
|
154
|
-
buffer.read_long
|
155
|
-
end
|
156
|
-
|
157
|
-
def bytes_to_blob(buffer, size_bytes)
|
158
|
-
bytes = size_bytes == 4 ? buffer.read_bytes : buffer.read_short_bytes
|
159
|
-
bytes ? bytes : nil
|
160
|
-
end
|
161
|
-
|
162
|
-
def bytes_to_boolean(buffer, size_bytes)
|
163
|
-
return nil unless read_size(buffer, size_bytes)
|
164
|
-
buffer.read(1) == Constants::TRUE_BYTE
|
165
|
-
end
|
166
|
-
|
167
|
-
def bytes_to_decimal(buffer, size_bytes)
|
168
|
-
size = read_size(buffer, size_bytes)
|
169
|
-
return nil unless size
|
170
|
-
buffer.read_decimal(size)
|
171
|
-
end
|
172
|
-
|
173
|
-
def bytes_to_double(buffer, size_bytes)
|
174
|
-
return nil unless read_size(buffer, size_bytes)
|
175
|
-
buffer.read_double
|
176
|
-
end
|
177
|
-
|
178
|
-
def bytes_to_float(buffer, size_bytes)
|
179
|
-
return nil unless read_size(buffer, size_bytes)
|
180
|
-
buffer.read_float
|
181
|
-
end
|
182
|
-
|
183
|
-
def bytes_to_int(buffer, size_bytes)
|
184
|
-
return nil unless read_size(buffer, size_bytes)
|
185
|
-
buffer.read_signed_int
|
186
|
-
end
|
187
|
-
|
188
|
-
def bytes_to_timestamp(buffer, size_bytes)
|
189
|
-
return nil unless read_size(buffer, size_bytes)
|
190
|
-
timestamp = buffer.read_long
|
191
|
-
|
192
|
-
seconds = timestamp / 1_000
|
193
|
-
microsenconds = (timestamp % 1_000) * 1_000
|
194
|
-
|
195
|
-
Time.at(seconds, microsenconds)
|
196
|
-
end
|
197
|
-
|
198
|
-
def bytes_to_varchar(buffer, size_bytes)
|
199
|
-
bytes = size_bytes == 4 ? buffer.read_bytes : buffer.read_short_bytes
|
200
|
-
bytes ? bytes.force_encoding(::Encoding::UTF_8) : nil
|
201
|
-
end
|
202
|
-
|
203
|
-
def bytes_to_varint(buffer, size_bytes)
|
204
|
-
size = read_size(buffer, size_bytes)
|
205
|
-
return nil unless size
|
206
|
-
buffer.read_varint(size)
|
207
|
-
end
|
208
|
-
|
209
|
-
def bytes_to_uuid(buffer, size_bytes)
|
210
|
-
return nil unless read_size(buffer, size_bytes)
|
211
|
-
buffer.read_uuid
|
212
|
-
end
|
213
|
-
|
214
|
-
def bytes_to_timeuuid(buffer, size_bytes)
|
215
|
-
return nil unless read_size(buffer, size_bytes)
|
216
|
-
buffer.read_uuid(TimeUuid)
|
217
|
-
end
|
218
|
-
|
219
|
-
def bytes_to_inet(buffer, size_bytes)
|
220
|
-
size = read_size(buffer, size_bytes)
|
221
|
-
return nil unless size
|
222
|
-
IPAddr.new_ntoh(buffer.read(size))
|
223
|
-
end
|
224
|
-
|
225
|
-
def bytes_to_list(buffer, value_converter)
|
226
|
-
list = []
|
227
|
-
size = buffer.read_short
|
228
|
-
size.times do
|
229
|
-
list << value_converter.call(buffer, 2)
|
230
|
-
end
|
231
|
-
list
|
232
|
-
end
|
233
|
-
|
234
|
-
def bytes_to_map(buffer, key_converter, value_converter)
|
235
|
-
map = {}
|
236
|
-
size = buffer.read_short
|
237
|
-
size.times do
|
238
|
-
key = key_converter.call(buffer, 2)
|
239
|
-
value = value_converter.call(buffer, 2)
|
240
|
-
map[key] = value
|
241
|
-
end
|
242
|
-
map
|
243
|
-
end
|
244
|
-
|
245
|
-
def bytes_to_set(buffer, value_converter)
|
246
|
-
set = Set.new
|
247
|
-
size = buffer.read_short
|
248
|
-
size.times do
|
249
|
-
set << value_converter.call(buffer, 2)
|
250
|
-
end
|
251
|
-
set
|
252
|
-
end
|
253
|
-
|
254
|
-
def ascii_to_bytes(buffer, value, size_bytes)
|
255
|
-
v = value && value.encode(::Encoding::ASCII)
|
256
|
-
if size_bytes == 4
|
257
|
-
buffer.append_bytes(v)
|
258
|
-
else
|
259
|
-
buffer.append_short_bytes(v)
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
def bigint_to_bytes(buffer, value, size_bytes)
|
264
|
-
if value
|
265
|
-
size_to_bytes(buffer, 8, size_bytes)
|
266
|
-
buffer.append_long(value)
|
267
|
-
else
|
268
|
-
nil_to_bytes(buffer, size_bytes)
|
269
|
-
end
|
270
|
-
end
|
271
|
-
|
272
|
-
def blob_to_bytes(buffer, value, size_bytes)
|
273
|
-
v = value && value.encode(::Encoding::BINARY)
|
274
|
-
if size_bytes == 4
|
275
|
-
buffer.append_bytes(v)
|
276
|
-
else
|
277
|
-
buffer.append_short_bytes(v)
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
def boolean_to_bytes(buffer, value, size_bytes)
|
282
|
-
if !value.nil?
|
283
|
-
size_to_bytes(buffer, 1, size_bytes)
|
284
|
-
buffer.append(value ? Constants::TRUE_BYTE : Constants::FALSE_BYTE)
|
285
|
-
else
|
286
|
-
nil_to_bytes(buffer, size_bytes)
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
def decimal_to_bytes(buffer, value, size_bytes)
|
291
|
-
raw = value && CqlByteBuffer.new.append_decimal(value)
|
292
|
-
if size_bytes == 4
|
293
|
-
buffer.append_bytes(raw)
|
294
|
-
else
|
295
|
-
buffer.append_short_bytes(raw)
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
def double_to_bytes(buffer, value, size_bytes)
|
300
|
-
if value
|
301
|
-
size_to_bytes(buffer, 8, size_bytes)
|
302
|
-
buffer.append_double(value)
|
303
|
-
else
|
304
|
-
nil_to_bytes(buffer, size_bytes)
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
def float_to_bytes(buffer, value, size_bytes)
|
309
|
-
if value
|
310
|
-
size_to_bytes(buffer, 4, size_bytes)
|
311
|
-
buffer.append_float(value)
|
312
|
-
else
|
313
|
-
nil_to_bytes(buffer, size_bytes)
|
314
|
-
end
|
315
|
-
end
|
316
|
-
|
317
|
-
def inet_to_bytes(buffer, value, size_bytes)
|
318
|
-
if value
|
319
|
-
size_to_bytes(buffer, value.ipv6? ? 16 : 4, size_bytes)
|
320
|
-
buffer.append(value.hton)
|
321
|
-
else
|
322
|
-
nil_to_bytes(buffer, size_bytes)
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
def int_to_bytes(buffer, value, size_bytes)
|
327
|
-
if value
|
328
|
-
size_to_bytes(buffer, 4, size_bytes)
|
329
|
-
buffer.append_int(value)
|
330
|
-
else
|
331
|
-
nil_to_bytes(buffer, size_bytes)
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
def varchar_to_bytes(buffer, value, size_bytes)
|
336
|
-
v = value && value.encode(::Encoding::UTF_8)
|
337
|
-
if size_bytes == 4
|
338
|
-
buffer.append_bytes(v)
|
339
|
-
else
|
340
|
-
buffer.append_short_bytes(v)
|
341
|
-
end
|
342
|
-
end
|
343
|
-
|
344
|
-
def timestamp_to_bytes(buffer, value, size_bytes)
|
345
|
-
if value
|
346
|
-
ms = (value.to_r.to_f * 1000).to_i
|
347
|
-
size_to_bytes(buffer, 8, size_bytes)
|
348
|
-
buffer.append_long(ms)
|
349
|
-
else
|
350
|
-
nil_to_bytes(buffer, size_bytes)
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
def uuid_to_bytes(buffer, value, size_bytes)
|
355
|
-
if value
|
356
|
-
size_to_bytes(buffer, 16, size_bytes)
|
357
|
-
buffer.append_uuid(value)
|
358
|
-
else
|
359
|
-
nil_to_bytes(buffer, size_bytes)
|
360
|
-
end
|
361
|
-
end
|
362
|
-
|
363
|
-
def varint_to_bytes(buffer, value, size_bytes)
|
364
|
-
raw = value && CqlByteBuffer.new.append_varint(value)
|
365
|
-
if size_bytes == 4
|
366
|
-
buffer.append_bytes(raw)
|
367
|
-
else
|
368
|
-
buffer.append_short_bytes(raw)
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
def size_to_bytes(buffer, size, size_bytes)
|
373
|
-
if size_bytes == 4
|
374
|
-
buffer.append_int(size)
|
375
|
-
else
|
376
|
-
buffer.append_short(size)
|
377
|
-
end
|
378
|
-
end
|
379
|
-
|
380
|
-
def nil_to_bytes(buffer, size_bytes)
|
381
|
-
if size_bytes == 4
|
382
|
-
buffer.append_int(-1)
|
383
|
-
else
|
384
|
-
buffer.append_short(-1)
|
385
|
-
end
|
386
|
-
end
|
387
|
-
end
|
388
|
-
end
|
389
|
-
end
|