hbase-jruby 0.1.3-java → 0.1.4-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.
- data/CHANGELOG.md +9 -0
- data/README.md +9 -4
- data/lib/hbase-jruby/byte_array.rb +31 -1
- data/lib/hbase-jruby/cell.rb +1 -0
- data/lib/hbase-jruby/column_key.rb +9 -0
- data/lib/hbase-jruby/result.rb +15 -0
- data/lib/hbase-jruby/scoped.rb +22 -5
- data/lib/hbase-jruby/table.rb +5 -1
- data/lib/hbase-jruby/util.rb +8 -2
- data/lib/hbase-jruby/version.rb +1 -1
- data/test/test_byte_array.rb +9 -0
- data/test/test_scoped.rb +20 -0
- data/test/test_util.rb +14 -2
- metadata +1 -1
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
0.1.4
|
5
|
+
-----
|
6
|
+
- Fix: Start/stop row not correctly set when byte array rowkey range specified
|
7
|
+
- More efficient count with FirstKeyOnlyFilter
|
8
|
+
- Added `HBase::ByteArray` method as a shorthand notation for `HBase::ByteArray.new`
|
9
|
+
- Added `HBase::ByteArray#+` method for concatenating two byte arrays
|
10
|
+
- Added `HBase::Util::java_bytes?` method
|
11
|
+
- Documentation
|
12
|
+
|
4
13
|
0.1.3
|
5
14
|
-----
|
6
15
|
- Supports Ruby 1.8 compatibility mode
|
data/README.md
CHANGED
@@ -109,7 +109,9 @@ hbase = HBase.new 'hbase.zookeeper.quorum' => 'remote-server.mydomain.net'
|
|
109
109
|
|
110
110
|
# Extra configuration
|
111
111
|
hbase = HBase.new 'hbase.zookeeper.quorum' => 'remote-server.mydomain.net',
|
112
|
-
'hbase.client.retries.number' => 3
|
112
|
+
'hbase.client.retries.number' => 3,
|
113
|
+
'hbase.client.scanner.caching' => 1000,
|
114
|
+
'hbase.rpc.timeout' => 120000
|
113
115
|
|
114
116
|
# Close HBase connection
|
115
117
|
hbase.close
|
@@ -310,7 +312,7 @@ table.truncate!
|
|
310
312
|
# Atomically increase cf1:counter by one
|
311
313
|
table.increment('rowkey1', 'cf1:counter', 1)
|
312
314
|
|
313
|
-
# Atomically increase two columns by one
|
315
|
+
# Atomically increase two columns by one and two respectively
|
314
316
|
table.increment('rowkey1', 'cf1:counter' => 1, 'cf1:counter2' => 2)
|
315
317
|
```
|
316
318
|
|
@@ -504,7 +506,7 @@ scoped.project(:prefix => 'alice').
|
|
504
506
|
scoped.project(:range => 'a'...'c').
|
505
507
|
project(:range => ['i'...'k', 'x'...'z'])
|
506
508
|
|
507
|
-
# Column pagination filter
|
509
|
+
# Column pagination filter:
|
508
510
|
# Fetch columns within the specified intra-scan offset and limit
|
509
511
|
scoped.project(:offset => 1000, :limit => 10)
|
510
512
|
```
|
@@ -556,6 +558,9 @@ end
|
|
556
558
|
# instead of just iterating through the scope, as it internally
|
557
559
|
# minimizes amount of data fetched with KeyOnlyFilter
|
558
560
|
scoped.count
|
561
|
+
|
562
|
+
# This should be even faster as it dramatically reduces the number of RPC calls
|
563
|
+
scoped.caching(1000).count
|
559
564
|
```
|
560
565
|
|
561
566
|
## Basic aggregation using coprocessor
|
@@ -674,7 +679,7 @@ table.remove_coprocessor! cp_class_name1
|
|
674
679
|
```
|
675
680
|
|
676
681
|
You can perform other types of administrative tasks
|
677
|
-
with
|
682
|
+
with native Java [HBaseAdmin object](http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html),
|
678
683
|
which can be obtained by `HBase#admin` method. Optionally, a block can be given
|
679
684
|
so that the HBaseAdmin object is automatically closed at the end of the given block.
|
680
685
|
|
@@ -1,21 +1,49 @@
|
|
1
1
|
class HBase
|
2
|
-
|
2
|
+
class << self
|
3
|
+
# Shortcut method to HBase::ByteArray.new
|
4
|
+
# @param [Object] value
|
5
|
+
def ByteArray value
|
6
|
+
ByteArray.new value
|
7
|
+
end
|
8
|
+
end
|
9
|
+
# Boxed class for Java byte arrays
|
10
|
+
# @!attribute [r] java
|
11
|
+
# @return [byte[]] Java byte array
|
3
12
|
class ByteArray
|
4
13
|
attr_reader :java
|
5
14
|
|
15
|
+
# @param [Object] value
|
6
16
|
def initialize value
|
7
17
|
@java = Util.to_bytes value
|
8
18
|
end
|
9
19
|
|
20
|
+
# Checks if the two byte arrays are the same
|
21
|
+
# @param [HBase::ByteArray] other
|
10
22
|
def eql? other
|
11
23
|
Arrays.equals(@java, other.java)
|
12
24
|
end
|
13
25
|
alias == eql?
|
14
26
|
|
27
|
+
# Compares two ByteArray objects
|
28
|
+
# @param [HBase::ByteArray] other
|
15
29
|
def <=> other
|
16
30
|
Bytes.compareTo(@java, other.java)
|
17
31
|
end
|
18
32
|
|
33
|
+
# Concats two byte arrays
|
34
|
+
# @param [HBase::ByteArray] other
|
35
|
+
def + other
|
36
|
+
ByteArray.new(Bytes.add @java, other.java)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the Java byte array
|
40
|
+
# @return [byte[]]
|
41
|
+
def to_java_bytes
|
42
|
+
@java
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns the first byte array whose prefix doesn't match this byte array
|
46
|
+
# @return [byte[]]
|
19
47
|
def stopkey_bytes_for_prefix
|
20
48
|
arr = @java.to_a
|
21
49
|
csr = arr.length - 1
|
@@ -31,6 +59,8 @@ class ByteArray
|
|
31
59
|
end
|
32
60
|
end
|
33
61
|
|
62
|
+
# Returns a hash number for the byte array
|
63
|
+
# @return [Fixnum]
|
34
64
|
def hash
|
35
65
|
Arrays.java_send(:hashCode, [Util::JAVA_BYTE_ARRAY_CLASS], @java)
|
36
66
|
end
|
data/lib/hbase-jruby/cell.rb
CHANGED
@@ -8,6 +8,8 @@ class << self
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
# Boxed class for column keys
|
11
|
+
# @!attribute [r] cf
|
12
|
+
# @return [String] The column family
|
11
13
|
class ColumnKey
|
12
14
|
attr_reader :cf
|
13
15
|
alias family cf
|
@@ -20,12 +22,14 @@ class ColumnKey
|
|
20
22
|
@cq = Util.to_bytes(cq)
|
21
23
|
end
|
22
24
|
|
25
|
+
# Returns the column qualifer decoded as the given type
|
23
26
|
# @param [Symbol] type
|
24
27
|
def cq type = :string
|
25
28
|
Util.from_bytes type, @cq
|
26
29
|
end
|
27
30
|
alias qualifier cq
|
28
31
|
|
32
|
+
# Checks whether if the two ColumnKeys are equal
|
29
33
|
# @param [Object] other
|
30
34
|
def eql? other
|
31
35
|
other = other_as_ck(other)
|
@@ -33,6 +37,7 @@ class ColumnKey
|
|
33
37
|
end
|
34
38
|
alias == eql?
|
35
39
|
|
40
|
+
# Compares two ColumnKeys
|
36
41
|
# @param [Object] other
|
37
42
|
def <=> other
|
38
43
|
other = other_as_ck(other)
|
@@ -40,10 +45,14 @@ class ColumnKey
|
|
40
45
|
d != 0 ? d : Bytes.compareTo(@cq, other.cq(:raw))
|
41
46
|
end
|
42
47
|
|
48
|
+
# Returns a hash number for this ColumnKey
|
49
|
+
# @return [Fixnum]
|
43
50
|
def hash
|
44
51
|
[@cf, Arrays.java_send(:hashCode, [Util::JAVA_BYTE_ARRAY_CLASS], @cq)].hash
|
45
52
|
end
|
46
53
|
|
54
|
+
# Returns String representation of the column key (Qualifier decoded as a String)
|
55
|
+
# @return [String]
|
47
56
|
def to_s
|
48
57
|
[@cf, @cq.empty? ? nil : cq].compact.join(':')
|
49
58
|
end
|
data/lib/hbase-jruby/result.rb
CHANGED
@@ -66,6 +66,7 @@ class Result
|
|
66
66
|
}
|
67
67
|
end
|
68
68
|
|
69
|
+
# Returns column values as byte arrays
|
69
70
|
# @overload raw(column)
|
70
71
|
# Returns the latest column value as a byte array
|
71
72
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -86,6 +87,7 @@ class Result
|
|
86
87
|
end
|
87
88
|
end
|
88
89
|
|
90
|
+
# Returns all versions of column values as byte arrays in a Hash indexed by their timestamps
|
89
91
|
# @overload raws(column)
|
90
92
|
# Returns all versions of column values as byte arrays in a Hash indexed by their timestamps
|
91
93
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -106,6 +108,7 @@ class Result
|
|
106
108
|
end
|
107
109
|
end
|
108
110
|
|
111
|
+
# Returns column values as Strings
|
109
112
|
# @overload string(column)
|
110
113
|
# Returns the latest column value as a String
|
111
114
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -120,6 +123,7 @@ class Result
|
|
120
123
|
end
|
121
124
|
alias str string
|
122
125
|
|
126
|
+
# Returns all versions of column values as Strings in a Hash indexed by their timestamps
|
123
127
|
# @overload strings(column)
|
124
128
|
# Returns all versions of column values as Strings in a Hash indexed by their timestamps
|
125
129
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -134,6 +138,7 @@ class Result
|
|
134
138
|
end
|
135
139
|
alias strs strings
|
136
140
|
|
141
|
+
# Returns column values as Symbols
|
137
142
|
# @overload symbol(column)
|
138
143
|
# Returns the latest column value as a Symbol
|
139
144
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -148,6 +153,7 @@ class Result
|
|
148
153
|
end
|
149
154
|
alias sym symbol
|
150
155
|
|
156
|
+
# Returns all versions of column values as Symbols in a Hash indexed by their timestamps
|
151
157
|
# @overload symbols(column)
|
152
158
|
# Returns all versions of column values as Symbols in a Hash indexed by their timestamps
|
153
159
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -162,6 +168,7 @@ class Result
|
|
162
168
|
end
|
163
169
|
alias syms symbols
|
164
170
|
|
171
|
+
# Returns column values as Fixnums
|
165
172
|
# @overload fixnum(column)
|
166
173
|
# Returns the latest column value as a Fixnum
|
167
174
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -177,6 +184,7 @@ class Result
|
|
177
184
|
alias integer fixnum
|
178
185
|
alias int fixnum
|
179
186
|
|
187
|
+
# Returns all versions of column values as Fixnums in a Hash indexed by their timestamps
|
180
188
|
# @overload fixnums(column)
|
181
189
|
# Returns all versions of column values as Fixnums in a Hash indexed by their timestamps
|
182
190
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -192,6 +200,7 @@ class Result
|
|
192
200
|
alias integers fixnums
|
193
201
|
alias ints fixnums
|
194
202
|
|
203
|
+
# Returns column values as Bigdecimals
|
195
204
|
# @overload bigdecimal(column)
|
196
205
|
# Returns the latest column value as a BigDecimal
|
197
206
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -205,6 +214,7 @@ class Result
|
|
205
214
|
decode_values :bigdecimal, cols
|
206
215
|
end
|
207
216
|
|
217
|
+
# Returns all versions of column values as BigDecimals in a Hash indexed by their timestamps
|
208
218
|
# @overload bigdecimals(column)
|
209
219
|
# Returns all versions of column values as BigDecimals in a Hash indexed by their timestamps
|
210
220
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -218,6 +228,7 @@ class Result
|
|
218
228
|
decode_values :bigdecimal, cols, true
|
219
229
|
end
|
220
230
|
|
231
|
+
# Returns column values as Floats
|
221
232
|
# @overload float(column)
|
222
233
|
# Returns the latest column value as a Float
|
223
234
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -232,6 +243,7 @@ class Result
|
|
232
243
|
end
|
233
244
|
alias double float
|
234
245
|
|
246
|
+
# Returns all versions of column values as Floats in a Hash indexed by their timestamps
|
235
247
|
# @overload floats(column)
|
236
248
|
# Returns all versions of column values as Floats in a Hash indexed by their timestamps
|
237
249
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -246,6 +258,7 @@ class Result
|
|
246
258
|
end
|
247
259
|
alias doubles floats
|
248
260
|
|
261
|
+
# Returns column values as Booleans
|
249
262
|
# @overload boolean(column)
|
250
263
|
# Returns the latest column value as a boolean value
|
251
264
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -260,6 +273,7 @@ class Result
|
|
260
273
|
end
|
261
274
|
alias bool boolean
|
262
275
|
|
276
|
+
# Returns all versions of column values as Booleans in a Hash indexed by their timestamps
|
263
277
|
# @overload booleans(column)
|
264
278
|
# Returns all versions of column values as boolean values in a Hash indexed by their timestamps
|
265
279
|
# @param [String, HBase::ColumnKey] column "FAMILY:QUALIFIER" expression or ColumnKey object.
|
@@ -274,6 +288,7 @@ class Result
|
|
274
288
|
end
|
275
289
|
alias bools booleans
|
276
290
|
|
291
|
+
# Compares two Result instances on their row keys
|
277
292
|
def <=> other
|
278
293
|
Bytes.compareTo(rowkey(:raw), other.rowkey(:raw))
|
279
294
|
end
|
data/lib/hbase-jruby/scoped.rb
CHANGED
@@ -35,6 +35,7 @@ class Scoped
|
|
35
35
|
cnt
|
36
36
|
end
|
37
37
|
|
38
|
+
# Performs GET operations
|
38
39
|
# @overload get(rowkey)
|
39
40
|
# Single GET.
|
40
41
|
# Gets a record with the given rowkey. If the record is not found, nil is returned.
|
@@ -115,7 +116,7 @@ class Scoped
|
|
115
116
|
# table.range(:prefix => ['2010', '2012'])
|
116
117
|
def range *key_range
|
117
118
|
if key_range.last.is_a?(Hash)
|
118
|
-
prefixes =
|
119
|
+
prefixes = arrayfy(key_range.last[:prefix]).compact
|
119
120
|
raise ArgumentError,
|
120
121
|
"Invalid range. Unknown option(s) specified." unless (key_range.last.keys - [:prefix]).empty?
|
121
122
|
key_range = key_range[0...-1]
|
@@ -237,9 +238,9 @@ private
|
|
237
238
|
col.each do |prop, val|
|
238
239
|
case prop
|
239
240
|
when :prefix
|
240
|
-
prefixes +=
|
241
|
+
prefixes += arrayfy(val)
|
241
242
|
when :range
|
242
|
-
ranges += val
|
243
|
+
ranges += arrayfy(val)
|
243
244
|
when :limit
|
244
245
|
limit = val
|
245
246
|
when :offset
|
@@ -462,10 +463,15 @@ private
|
|
462
463
|
filtered_scan.tap do |scan|
|
463
464
|
scan.cache_blocks = false
|
464
465
|
|
466
|
+
# A filter that will only return the first KV from each row
|
467
|
+
# A filter that will only return the key component of each KV
|
468
|
+
filters = [FirstKeyOnlyFilter.new, KeyOnlyFilter.new]
|
465
469
|
if flist = scan.getFilter
|
466
|
-
|
470
|
+
filters.each do |filter|
|
471
|
+
flist.addFilter filter
|
472
|
+
end
|
467
473
|
else
|
468
|
-
scan.setFilter FilterList.new(
|
474
|
+
scan.setFilter FilterList.new(filters)
|
469
475
|
end
|
470
476
|
end
|
471
477
|
end
|
@@ -516,6 +522,17 @@ private
|
|
516
522
|
end
|
517
523
|
}.flatten
|
518
524
|
end
|
525
|
+
|
526
|
+
def arrayfy val
|
527
|
+
# No range splat
|
528
|
+
if Util.java_bytes?(val)
|
529
|
+
[val]
|
530
|
+
elsif val.is_a?(Array)
|
531
|
+
val
|
532
|
+
else
|
533
|
+
[val]
|
534
|
+
end
|
535
|
+
end
|
519
536
|
end#Scoped
|
520
537
|
end#HBase
|
521
538
|
|
data/lib/hbase-jruby/table.rb
CHANGED
@@ -47,6 +47,7 @@ class Table
|
|
47
47
|
!enabled?
|
48
48
|
end
|
49
49
|
|
50
|
+
# Creates the table
|
50
51
|
# @overload create!(column_family_name, props = {})
|
51
52
|
# Create the table with one column family of the given name
|
52
53
|
# @param [#to_s] The name of the column family
|
@@ -257,6 +258,7 @@ class Table
|
|
257
258
|
end
|
258
259
|
end
|
259
260
|
|
261
|
+
# Performs PUT operations
|
260
262
|
# @overload put(rowkey, data)
|
261
263
|
# Put operation on a rowkey
|
262
264
|
# @param [Object] rowkey Rowkey
|
@@ -274,6 +276,7 @@ class Table
|
|
274
276
|
puts.length
|
275
277
|
end
|
276
278
|
|
279
|
+
# Deletes data
|
277
280
|
# @overload delete(rowkey)
|
278
281
|
# Deletes a row with the given rowkey
|
279
282
|
# @param [Object] rowkey
|
@@ -334,6 +337,7 @@ class Table
|
|
334
337
|
}
|
335
338
|
end
|
336
339
|
|
340
|
+
# Atomically increase numeric values
|
337
341
|
# @overload increment(rowkey, column, by)
|
338
342
|
# Atomically increase column value by the specified amount
|
339
343
|
# @param [Object] rowkey Rowkey
|
@@ -383,7 +387,7 @@ class Table
|
|
383
387
|
(local_htables[@name] = @pool.get_table(@name))
|
384
388
|
end
|
385
389
|
|
386
|
-
# Returns table description
|
390
|
+
# Returns a printable version of the table description
|
387
391
|
# @return [String] Table description
|
388
392
|
def inspect
|
389
393
|
if exists?
|
data/lib/hbase-jruby/util.rb
CHANGED
@@ -6,12 +6,16 @@ module Util
|
|
6
6
|
JAVA_BYTE_ARRAY_CLASS = JAVA_BYTE_ARRAY_EMPTY.java_class
|
7
7
|
|
8
8
|
class << self
|
9
|
+
def java_bytes? v
|
10
|
+
v.respond_to?(:java_class) && v.java_class == JAVA_BYTE_ARRAY_CLASS
|
11
|
+
end
|
12
|
+
|
9
13
|
# Returns byte array representation of the Ruby object
|
10
14
|
# @param [byte[]] v
|
11
15
|
# @return [byte[]]
|
12
16
|
def to_bytes v
|
13
17
|
case v
|
14
|
-
when String
|
18
|
+
when String, ByteArray
|
15
19
|
v.to_java_bytes
|
16
20
|
when Fixnum
|
17
21
|
Bytes.java_send :toBytes, [Java::long], v
|
@@ -30,7 +34,7 @@ module Util
|
|
30
34
|
when java.math.BigDecimal
|
31
35
|
Bytes.java_send :toBytes, [java.math.BigDecimal], v
|
32
36
|
else
|
33
|
-
if
|
37
|
+
if java_bytes?(v)
|
34
38
|
v
|
35
39
|
else
|
36
40
|
raise ArgumentError.new("Don't know how to convert #{v.class} into Java bytes")
|
@@ -94,6 +98,7 @@ module Util
|
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
101
|
+
# Import Java classes (Prerequisite for classes in hbase-jruby)
|
97
102
|
# @return [nil]
|
98
103
|
def import_java_classes!
|
99
104
|
imp = lambda { |base, classes|
|
@@ -161,6 +166,7 @@ module Util
|
|
161
166
|
org.apache.hadoop.hbase.filter.FilterBase
|
162
167
|
org.apache.hadoop.hbase.filter.FilterList
|
163
168
|
org.apache.hadoop.hbase.filter.KeyOnlyFilter
|
169
|
+
org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter
|
164
170
|
org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter
|
165
171
|
org.apache.hadoop.hbase.filter.PrefixFilter
|
166
172
|
org.apache.hadoop.hbase.filter.RegexStringComparator
|
data/lib/hbase-jruby/version.rb
CHANGED
data/test/test_byte_array.rb
CHANGED
@@ -37,4 +37,13 @@ class TestByteArray < Test::Unit::TestCase
|
|
37
37
|
assert_equal 1, hash[ HBase::ByteArray.new("Hello") ]
|
38
38
|
assert_equal 2, hash[ HBase::ByteArray.new("World".to_java_bytes) ]
|
39
39
|
end
|
40
|
+
|
41
|
+
def test_concat
|
42
|
+
concat = HBase::ByteArray(100) + HBase::ByteArray(200)
|
43
|
+
assert_instance_of HBase::ByteArray, concat
|
44
|
+
assert_equal 16, concat.to_java_bytes.to_a.length
|
45
|
+
|
46
|
+
assert_equal 100, HBase::Util.from_bytes( :fixnum, concat.to_java_bytes.to_a[0, 8].to_java(Java::byte) )
|
47
|
+
assert_equal 200, HBase::Util.from_bytes( :fixnum, concat.java.to_a[8, 8].to_java(Java::byte) )
|
48
|
+
end
|
40
49
|
end
|
data/test/test_scoped.rb
CHANGED
@@ -358,5 +358,25 @@ class TestScoped < TestHBaseJRubyBase
|
|
358
358
|
assert_equal 28, @table.filter('cf1:a' => ['aa', 'cc', /^g/]).count
|
359
359
|
assert_equal 54, @table.filter('cf1:a' => ['aa', 'cc', /^g/, { :gte => 'xa', :lt => 'y'}]).count
|
360
360
|
end
|
361
|
+
|
362
|
+
def test_java_bytes_prefix
|
363
|
+
(1..100).each do |i|
|
364
|
+
(1..100).each do |j|
|
365
|
+
@table.put((HBase::ByteArray(i) + HBase::ByteArray(j)).to_java_bytes, 'cf1:a' => i * j)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
assert_equal 100, @table.range(:prefix => HBase::ByteArray(50)).count
|
370
|
+
assert_equal 100, @table.range(:prefix => HBase::ByteArray(50).to_java_bytes).count
|
371
|
+
assert_equal 200, @table.range(HBase::ByteArray(50), HBase::ByteArray(52)).count
|
372
|
+
assert_equal 1, @table.range(:prefix => (HBase::ByteArray(50) + HBase::ByteArray(50))).count
|
373
|
+
|
374
|
+
assert_equal 2, @table.range(:prefix => [
|
375
|
+
(HBase::ByteArray(50) + HBase::ByteArray(50)).java,
|
376
|
+
(HBase::ByteArray(50) + HBase::ByteArray(51)).java ]).count
|
377
|
+
|
378
|
+
# Fails on 0.1.3
|
379
|
+
assert_equal 1, @table.range(:prefix => (HBase::ByteArray(50) + HBase::ByteArray(50)).java).count
|
380
|
+
end
|
361
381
|
end
|
362
382
|
|
data/test/test_util.rb
CHANGED
@@ -14,12 +14,14 @@ class TestUtil < Test::Unit::TestCase
|
|
14
14
|
|
15
15
|
[:fixnum, :int, :integer].each do |type|
|
16
16
|
assert_equal 100, Util.from_bytes( type, Util.to_bytes(100) )
|
17
|
+
assert_equal 100, Util.from_bytes( type, Util.to_bytes(HBase::ByteArray(100)) )
|
17
18
|
end
|
18
19
|
[:float, :double].each do |type|
|
19
20
|
assert_equal 3.14, Util.from_bytes( type, Util.to_bytes(3.14) )
|
20
21
|
end
|
21
22
|
[:string, :str].each do |type|
|
22
23
|
assert_equal "Hello", Util.from_bytes( type, Util.to_bytes("Hello") )
|
24
|
+
assert_equal "Hello", Util.from_bytes( type, Util.to_bytes(HBase::ByteArray("Hello")) )
|
23
25
|
end
|
24
26
|
[:bool, :boolean].each do |type|
|
25
27
|
assert_equal true, Util.from_bytes( type, Util.to_bytes(true) )
|
@@ -46,8 +48,8 @@ class TestUtil < Test::Unit::TestCase
|
|
46
48
|
end
|
47
49
|
|
48
50
|
def test_parse_column_name
|
49
|
-
assert_equal ['abc', 'def'], parse_to_str('abc:def')
|
50
|
-
assert_equal ['abc', 'def:'], parse_to_str('abc:def:')
|
51
|
+
assert_equal ['abc', 'def'], parse_to_str('abc:def')
|
52
|
+
assert_equal ['abc', 'def:'], parse_to_str('abc:def:')
|
51
53
|
assert_equal ['abc', ''], parse_to_str('abc:')
|
52
54
|
assert_equal ['abc', nil], parse_to_str('abc')
|
53
55
|
assert_equal ['abc', ':::'], parse_to_str('abc::::')
|
@@ -72,6 +74,16 @@ class TestUtil < Test::Unit::TestCase
|
|
72
74
|
assert_equal [97, 97, 97, 0], Util.append_0("aaa".to_java_bytes).to_a
|
73
75
|
end
|
74
76
|
|
77
|
+
def test_java_bytes
|
78
|
+
["Hello", 1234, :symbol].each do |v|
|
79
|
+
assert_false Util.java_bytes?(v)
|
80
|
+
end
|
81
|
+
|
82
|
+
["Hello".to_java_bytes, Util.to_bytes(1234), Util.to_bytes(:symbol)].each do |v|
|
83
|
+
assert Util.java_bytes?(v)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
75
87
|
private
|
76
88
|
def parse_to_str v, type = :string
|
77
89
|
Util.parse_column_name(v).map { |e| Util.from_bytes type, e }
|