hbase-jruby 0.2.5-java → 0.2.6-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 +5 -0
- data/README.md +6 -6
- data/lib/hbase-jruby/scoped.rb +24 -15
- data/lib/hbase-jruby/version.rb +1 -1
- data/test/test_scoped.rb +43 -0
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
0.2.6
|
5
|
+
-----
|
6
|
+
- Fixed `HBase::Scoped#filter` method to take short integer (byte, short, int) values
|
7
|
+
- Fixed `HBase::Scoped#range` method to take short integer (byte, short, int) values
|
8
|
+
|
4
9
|
0.2.5
|
5
10
|
-----
|
6
11
|
- Added `HBase::Table#snapshots` method
|
data/README.md
CHANGED
@@ -68,8 +68,8 @@ Call `HBase.resolve_dependency!` helper method passing one of the arguments list
|
|
68
68
|
|
69
69
|
| Argument | Dependency | Default version | Required executable |
|
70
70
|
| ---------- | ------------------------ | --------------- | ------------------- |
|
71
|
-
| cdh4.2[.*] | Cloudera CDH4.2 | cdh4.2.
|
72
|
-
| cdh4.1[.*] | Cloudera CDH4.1 | cdh4.1.
|
71
|
+
| cdh4.2[.*] | Cloudera CDH4.2 | cdh4.2.1 | mvn |
|
72
|
+
| cdh4.1[.*] | Cloudera CDH4.1 | cdh4.1.4 | mvn |
|
73
73
|
| cdh3[u*] | Cloudera CDH3 | cdh3u6 | mvn |
|
74
74
|
| 0.95[.*] | Apache HBase 0.95 | 0.95.0 | mvn |
|
75
75
|
| 0.94[.*] | Apache HBase 0.94 | 0.94.6.1 | mvn |
|
@@ -492,10 +492,10 @@ See the following example.
|
|
492
492
|
table.put idx, 'cf1:a' => idx % 10
|
493
493
|
end
|
494
494
|
|
495
|
-
table.filter('cf1:a' => { lte: 1 }).
|
496
|
-
# 0, 1, 10, 11, 20, 21
|
497
|
-
table.while('cf1:a'
|
498
|
-
# 0, 1
|
495
|
+
table.filter('cf1:a' => { lte: 1 }).map { |r| r.rowkey :fixnum }
|
496
|
+
# [0, 1, 10, 11, 20, 21]
|
497
|
+
table.while('cf1:a' => { lte: 1 }).map { |r| r.rowkey :fixnum }
|
498
|
+
# [0, 1]
|
499
499
|
# Scan terminates immediately when condition not met.
|
500
500
|
```
|
501
501
|
|
data/lib/hbase-jruby/scoped.rb
CHANGED
@@ -121,25 +121,32 @@ class Scoped
|
|
121
121
|
# table.range(:prefix => '2012')
|
122
122
|
# table.range(:prefix => ['2010', '2012'])
|
123
123
|
def range *key_range
|
124
|
-
if key_range.last.is_a?(Hash)
|
125
|
-
prefixes
|
126
|
-
|
127
|
-
|
128
|
-
key_range = key_range[0...-1]
|
124
|
+
if (last = key_range.last).is_a?(Hash)
|
125
|
+
prefixes = arrayfy(last[:prefix]).compact
|
126
|
+
last = last.reject { |k, v| k == :prefix }
|
127
|
+
|
128
|
+
key_range = key_range[0...-1] # defensive
|
129
|
+
key_range << last unless last.empty?
|
130
|
+
else
|
131
|
+
prefixes = []
|
129
132
|
end
|
130
133
|
|
131
|
-
if
|
134
|
+
if key_range[0].is_a?(Range)
|
135
|
+
raise ArgumentError, "Invalid range" unless key_range.length == 1
|
136
|
+
elsif !prefixes.empty?
|
132
137
|
raise ArgumentError, "Invalid range" unless [0, 1, 2].include?(key_range.length)
|
133
138
|
else
|
134
139
|
raise ArgumentError, "Invalid range" unless [1, 2].include?(key_range.length)
|
135
140
|
end
|
136
141
|
|
142
|
+
raise ArgumentError, "Invalid range" if !key_range.empty? && key_range.all? { |e| e.nil? }
|
143
|
+
|
137
144
|
spawn :@range,
|
138
145
|
key_range[0].is_a?(Range) ?
|
139
146
|
key_range[0] :
|
140
|
-
(key_range.empty? ? nil : key_range),
|
147
|
+
(key_range.empty? ? nil : key_range.map { |e| e.nil? ? nil : Util.to_bytes(e) }),
|
141
148
|
:@prefixes,
|
142
|
-
prefixes
|
149
|
+
prefixes
|
143
150
|
end
|
144
151
|
|
145
152
|
# Returns an HBase::Scoped object with the filters added
|
@@ -368,12 +375,12 @@ private
|
|
368
375
|
filters <<
|
369
376
|
RowFilter.new(
|
370
377
|
CompareFilter::CompareOp::GREATER_OR_EQUAL,
|
371
|
-
BinaryComparator.new(
|
378
|
+
BinaryComparator.new(range[0])) if range[0]
|
372
379
|
|
373
380
|
filters <<
|
374
381
|
RowFilter.new(
|
375
382
|
CompareFilter::CompareOp::LESS,
|
376
|
-
BinaryComparator.new(
|
383
|
+
BinaryComparator.new(range[1])) if range[1]
|
377
384
|
else
|
378
385
|
raise ArgumentError, "Invalid range"
|
379
386
|
end if range
|
@@ -432,7 +439,11 @@ private
|
|
432
439
|
when :ne # , :!= # Ruby 1.8 compatibility
|
433
440
|
CompareFilter::CompareOp::NOT_EQUAL
|
434
441
|
else
|
435
|
-
|
442
|
+
if val.length == 1
|
443
|
+
return filter_for(cf, cq, Util.to_bytes(val))
|
444
|
+
else
|
445
|
+
raise ArgumentError, "Unknown operator: #{op}"
|
446
|
+
end
|
436
447
|
end
|
437
448
|
case v
|
438
449
|
when Array
|
@@ -448,8 +459,6 @@ private
|
|
448
459
|
SingleColumnValueFilter.new(cf, cq, operator, Util.to_bytes(vv))
|
449
460
|
}
|
450
461
|
)
|
451
|
-
when Hash
|
452
|
-
raise ArgumentError, "Hash predicate not supported"
|
453
462
|
else
|
454
463
|
SingleColumnValueFilter.new(cf, cq, operator, Util.to_bytes(v))
|
455
464
|
end
|
@@ -483,8 +492,8 @@ private
|
|
483
492
|
scan.setStopRow Util.append_0(Util.to_bytes range.end)
|
484
493
|
end
|
485
494
|
when Array
|
486
|
-
scan.setStartRow
|
487
|
-
scan.setStopRow
|
495
|
+
scan.setStartRow range[0] if range[0]
|
496
|
+
scan.setStopRow range[1] if range[1]
|
488
497
|
else
|
489
498
|
# This shouldn't happen though.
|
490
499
|
raise ArgumentError, "Invalid range"
|
data/lib/hbase-jruby/version.rb
CHANGED
data/test/test_scoped.rb
CHANGED
@@ -25,7 +25,10 @@ class TestScoped < TestHBaseJRubyBase
|
|
25
25
|
def test_invalid_range
|
26
26
|
assert_raise(ArgumentError) { @table.range }
|
27
27
|
assert_raise(ArgumentError) { @table.range(:xxx => 'row1') }
|
28
|
+
assert_raise(ArgumentError) { @table.range({}) }
|
28
29
|
assert_raise(ArgumentError) { @table.range(1, 2, 3) }
|
30
|
+
assert_raise(ArgumentError) { @table.range(nil, nil) }
|
31
|
+
assert_raise(ArgumentError) { @table.range(1..3, 4..5) }
|
29
32
|
end
|
30
33
|
|
31
34
|
def test_invalid_project
|
@@ -96,6 +99,46 @@ class TestScoped < TestHBaseJRubyBase
|
|
96
99
|
assert_equal 50, @table.range(111..150).filter('cf1:a' => 131...140, 'cf2:b' => 132..133).unscope.count
|
97
100
|
end
|
98
101
|
|
102
|
+
def test_range_on_short_int
|
103
|
+
(1..10).each do |i|
|
104
|
+
@table.put({ :short => i }, 'cf1:a' => 'dummy')
|
105
|
+
end
|
106
|
+
|
107
|
+
assert_equal 5, @table.range({ :short => 6 }).count
|
108
|
+
assert_equal 2, @table.range({ :short => 6 }, { :short => 8 }).count
|
109
|
+
assert_equal 2, @table.range({ :short => 6 }, { :short => 8, :prefix => []}).count
|
110
|
+
assert_equal 2, @table.range({ :short => 6 }, { :short => 8 }, :prefix => []).count
|
111
|
+
assert_equal 3, @table.range(nil, { :short => 4 }).count
|
112
|
+
assert_equal 3, @table.range(nil, { :short => 4, :prefix => [] }).count
|
113
|
+
assert_equal 3, @table.range(nil, { :short => 4 }, :prefix => []).count
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_filter_on_short_int
|
117
|
+
@table.put(1, 'cf1:a' => { :long => 100 })
|
118
|
+
@table.put(2, 'cf1:a' => { :int => 100 })
|
119
|
+
@table.put(3, 'cf1:a' => { :short => 100 })
|
120
|
+
@table.put(4, 'cf1:a' => { :byte => 100 })
|
121
|
+
@table.put(5, 'cf1:a' => { :byte => 110 })
|
122
|
+
|
123
|
+
assert_equal 1, @table.filter('cf1:a' => { :long => 100 }).count
|
124
|
+
assert_equal 1, @table.filter('cf1:a' => { :int => 100 }).count
|
125
|
+
assert_equal 1, @table.filter('cf1:a' => { :short => 100 }).count
|
126
|
+
assert_equal 1, @table.filter('cf1:a' => { :byte => 100 }).count
|
127
|
+
|
128
|
+
assert_equal 1, @table.filter('cf1:a' => { :long => 100 }).first.rowkey(:fixnum)
|
129
|
+
assert_equal 2, @table.filter('cf1:a' => { :int => 100 }).first.rowkey(:fixnum)
|
130
|
+
assert_equal 3, @table.filter('cf1:a' => { :short => 100 }).first.rowkey(:fixnum)
|
131
|
+
assert_equal 4, @table.filter('cf1:a' => { :byte => 100 }).first.rowkey(:fixnum)
|
132
|
+
|
133
|
+
assert_equal 5, @table.filter('cf1:a' => { :gt => { :byte => 100 } }).first.rowkey(:fixnum)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_filter_operator_and_short_int
|
137
|
+
assert_raise(ArgumentError) {
|
138
|
+
@table.filter('cf1:a' => { :long => 100, :gt => 10 })
|
139
|
+
}
|
140
|
+
end
|
141
|
+
|
99
142
|
def test_scan
|
100
143
|
insert = lambda do
|
101
144
|
(40..70).each do |i|
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: hbase-jruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.6
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Junegunn Choi
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-unit
|