google-cloud-bigtable 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/lib/google-cloud-bigtable.rb +19 -21
  5. data/lib/google/cloud/bigtable.rb +11 -17
  6. data/lib/google/cloud/bigtable/app_profile.rb +148 -82
  7. data/lib/google/cloud/bigtable/app_profile/job.rb +5 -8
  8. data/lib/google/cloud/bigtable/app_profile/list.rb +11 -5
  9. data/lib/google/cloud/bigtable/chunk_processor.rb +23 -35
  10. data/lib/google/cloud/bigtable/cluster.rb +38 -11
  11. data/lib/google/cloud/bigtable/cluster/job.rb +3 -7
  12. data/lib/google/cloud/bigtable/cluster/list.rb +20 -18
  13. data/lib/google/cloud/bigtable/column_family.rb +22 -229
  14. data/lib/google/cloud/bigtable/column_family_map.rb +426 -0
  15. data/lib/google/cloud/bigtable/column_range.rb +9 -1
  16. data/lib/google/cloud/bigtable/convert.rb +12 -4
  17. data/lib/google/cloud/bigtable/errors.rb +4 -1
  18. data/lib/google/cloud/bigtable/gc_rule.rb +184 -65
  19. data/lib/google/cloud/bigtable/instance.rb +136 -126
  20. data/lib/google/cloud/bigtable/instance/cluster_map.rb +9 -7
  21. data/lib/google/cloud/bigtable/instance/job.rb +4 -3
  22. data/lib/google/cloud/bigtable/instance/list.rb +14 -9
  23. data/lib/google/cloud/bigtable/longrunning_job.rb +6 -0
  24. data/lib/google/cloud/bigtable/mutation_entry.rb +19 -23
  25. data/lib/google/cloud/bigtable/mutation_operations.rb +82 -29
  26. data/lib/google/cloud/bigtable/policy.rb +9 -5
  27. data/lib/google/cloud/bigtable/project.rb +62 -140
  28. data/lib/google/cloud/bigtable/read_modify_write_rule.rb +9 -4
  29. data/lib/google/cloud/bigtable/read_operations.rb +28 -41
  30. data/lib/google/cloud/bigtable/routing_policy.rb +171 -0
  31. data/lib/google/cloud/bigtable/row.rb +18 -7
  32. data/lib/google/cloud/bigtable/row_filter.rb +49 -20
  33. data/lib/google/cloud/bigtable/row_filter/chain_filter.rb +71 -43
  34. data/lib/google/cloud/bigtable/row_filter/condition_filter.rb +4 -1
  35. data/lib/google/cloud/bigtable/row_filter/interleave_filter.rb +74 -43
  36. data/lib/google/cloud/bigtable/row_filter/simple_filter.rb +22 -7
  37. data/lib/google/cloud/bigtable/row_range.rb +5 -0
  38. data/lib/google/cloud/bigtable/rows_mutator.rb +14 -17
  39. data/lib/google/cloud/bigtable/rows_reader.rb +18 -14
  40. data/lib/google/cloud/bigtable/sample_row_key.rb +5 -2
  41. data/lib/google/cloud/bigtable/service.rb +161 -242
  42. data/lib/google/cloud/bigtable/status.rb +76 -0
  43. data/lib/google/cloud/bigtable/table.rb +141 -236
  44. data/lib/google/cloud/bigtable/table/cluster_state.rb +7 -1
  45. data/lib/google/cloud/bigtable/table/list.rb +14 -7
  46. data/lib/google/cloud/bigtable/value_range.rb +5 -0
  47. data/lib/google/cloud/bigtable/version.rb +1 -1
  48. metadata +27 -25
  49. data/lib/google/cloud/bigtable/table/column_family_map.rb +0 -70
@@ -26,6 +26,7 @@ require "google/cloud/bigtable/row_filter/condition_filter"
26
26
  module Google
27
27
  module Cloud
28
28
  module Bigtable
29
+ ##
29
30
  # # RowFilter
30
31
  #
31
32
  # Takes a row as input and produces an alternate view of the row based on
@@ -145,6 +146,7 @@ module Google
145
146
 
146
147
  private_constant :PASS, :BLOCK, :SINK, :STRIP_VALUE
147
148
 
149
+ ##
148
150
  # Creates a chain filter instance.
149
151
  #
150
152
  # A chain RowFilter that sends rows through several RowFilters in sequence.
@@ -166,7 +168,7 @@ module Google
166
168
  # chain.strip_value
167
169
  #
168
170
  # # OR
169
- # chain.key("user-*).strip_value
171
+ # chain.key("user-*").strip_value
170
172
  #
171
173
  # @example Create complex chain filter.
172
174
  #
@@ -176,12 +178,13 @@ module Google
176
178
  # chain_1.label("users").qualifier("name").cells_per_row(5)
177
179
  #
178
180
  # # Add to main chain filter
179
- # chain.chain(chain_1).value("xyz*).key("user-*")
181
+ # chain.chain(chain_1).value("xyz*").key("user-*")
180
182
  #
181
183
  def self.chain
182
184
  ChainFilter.new
183
185
  end
184
186
 
187
+ ##
185
188
  # Creates an interleave filter.
186
189
  #
187
190
  # A RowFilter that sends each row to each of several component
@@ -224,7 +227,7 @@ module Google
224
227
  # interleave.sink
225
228
  #
226
229
  # # OR
227
- # interleave.key("user-*).sink
230
+ # interleave.key("user-*").sink
228
231
  #
229
232
  # @example Create complex interleave filter.
230
233
  #
@@ -234,12 +237,13 @@ module Google
234
237
  # chain_1.label("users").qualifier("name").cells_per_row(5)
235
238
  #
236
239
  # # Add to main chain filter
237
- # interleave.chain(chain_1).value("xyz*).key("user-*")
240
+ # interleave.chain(chain_1).value("xyz*").key("user-*")
238
241
  #
239
242
  def self.interleave
240
243
  InterleaveFilter.new
241
244
  end
242
245
 
246
+ ##
243
247
  # Creates a condition filter instance.
244
248
  #
245
249
  # A RowFilter that evaluates one of two possible RowFilters, depending on
@@ -267,9 +271,10 @@ module Google
267
271
  # condition.on_match(label).otherwise(strip_value)
268
272
  #
269
273
  def self.condition predicate
270
- ConditionFilter.new(predicate)
274
+ ConditionFilter.new predicate
271
275
  end
272
276
 
277
+ ##
273
278
  # Creates a pass filter instance.
274
279
  #
275
280
  # Matches all cells, regardless of input. Functionally equivalent to
@@ -285,6 +290,7 @@ module Google
285
290
  PASS
286
291
  end
287
292
 
293
+ ##
288
294
  # Creates a block-all filter instance.
289
295
  #
290
296
  # Does not match any cells, regardless of input. Useful for temporarily
@@ -300,6 +306,7 @@ module Google
300
306
  BLOCK
301
307
  end
302
308
 
309
+ ##
303
310
  # Creates a sink filter instance.
304
311
  #
305
312
  # Outputs all cells directly to the output of the read rather than to any
@@ -315,6 +322,7 @@ module Google
315
322
  SINK
316
323
  end
317
324
 
325
+ ##
318
326
  # Creates a strip value filter instance.
319
327
  #
320
328
  # Replaces each cell's value with an empty string.
@@ -329,6 +337,7 @@ module Google
329
337
  STRIP_VALUE
330
338
  end
331
339
 
340
+ ##
332
341
  # Creates a key filter instance to match a row key using a regular expression.
333
342
  #
334
343
  # Matches only cells from rows whose row keys satisfy the given RE2 regex. In
@@ -350,9 +359,10 @@ module Google
350
359
  # filter = Google::Cloud::Bigtable::RowFilter.key("user-.*")
351
360
  #
352
361
  def self.key regex
353
- SimpleFilter.new.key(regex)
362
+ SimpleFilter.new.key regex
354
363
  end
355
364
 
365
+ ##
356
366
  # Creates a sample probability filter instance.
357
367
  #
358
368
  # Matches all cells from a row with probability p, and matches no cells
@@ -367,9 +377,10 @@ module Google
367
377
  # filter = Google::Cloud::Bigtable::RowFilter.sample(0.5)
368
378
  #
369
379
  def self.sample probability
370
- SimpleFilter.new.sample(probability)
380
+ SimpleFilter.new.sample probability
371
381
  end
372
382
 
383
+ ##
373
384
  # Creates a family name match filter using a regular expression.
374
385
  #
375
386
  # Matches only cells from columns whose families satisfy the given RE2
@@ -390,9 +401,10 @@ module Google
390
401
  # filter = Google::Cloud::Bigtable::RowFilter.family("cf-.*")
391
402
  #
392
403
  def self.family regex
393
- SimpleFilter.new.family(regex)
404
+ SimpleFilter.new.family regex
394
405
  end
395
406
 
407
+ ##
396
408
  # Creates a column qualifier match filter using a regular expression.
397
409
  #
398
410
  # Matches only cells from columns whose qualifiers satisfy the given RE2
@@ -413,9 +425,10 @@ module Google
413
425
  # filter = Google::Cloud::Bigtable::RowFilter.qualifier("user-name.*")
414
426
  #
415
427
  def self.qualifier regex
416
- SimpleFilter.new.qualifier(regex)
428
+ SimpleFilter.new.qualifier regex
417
429
  end
418
430
 
431
+ ##
419
432
  # Creates a value match filter using a regular expression.
420
433
  #
421
434
  # Matches only cells with values that satisfy the given regular expression.
@@ -435,9 +448,10 @@ module Google
435
448
  # filter = Google::Cloud::Bigtable::RowFilter.value("abc.*")
436
449
  #
437
450
  def self.value regex
438
- SimpleFilter.new.value(regex)
451
+ SimpleFilter.new.value regex
439
452
  end
440
453
 
454
+ ##
441
455
  # Creates a label filter instance to apply a label based on the result of
442
456
  # read rows.
443
457
  #
@@ -462,9 +476,10 @@ module Google
462
476
  # filter = Google::Cloud::Bigtable::RowFilter.label("user-detail")
463
477
  #
464
478
  def self.label value
465
- SimpleFilter.new.label(value)
479
+ SimpleFilter.new.label value
466
480
  end
467
481
 
482
+ ##
468
483
  # Creates a cell-per-row-offset filter instance to skip first N cells.
469
484
  #
470
485
  # Skips the first N cells of each row, matching all subsequent cells.
@@ -479,9 +494,10 @@ module Google
479
494
  # filter = Google::Cloud::Bigtable::RowFilter.cells_per_row_offset(3)
480
495
  #
481
496
  def self.cells_per_row_offset offset
482
- SimpleFilter.new.cells_per_row_offset(offset)
497
+ SimpleFilter.new.cells_per_row_offset offset
483
498
  end
484
499
 
500
+ ##
485
501
  # Create a cells-per-row limit filter instance.
486
502
  #
487
503
  # Matches only the first N cells of each row.
@@ -496,9 +512,10 @@ module Google
496
512
  # filter = Google::Cloud::Bigtable::RowFilter.cells_per_row(5)
497
513
  #
498
514
  def self.cells_per_row limit
499
- SimpleFilter.new.cells_per_row(limit)
515
+ SimpleFilter.new.cells_per_row limit
500
516
  end
501
517
 
518
+ ##
502
519
  # Creates cells-per-column filter instance.
503
520
  #
504
521
  # Matches only the most recent N cells within each column.
@@ -513,9 +530,10 @@ module Google
513
530
  # filter = Google::Cloud::Bigtable::RowFilter.cells_per_column(5)
514
531
  #
515
532
  def self.cells_per_column limit
516
- SimpleFilter.new.cells_per_column(limit)
533
+ SimpleFilter.new.cells_per_column limit
517
534
  end
518
535
 
536
+ ##
519
537
  # Creates a timestamp-range filter instance.
520
538
  #
521
539
  # Matches only cells with timestamps within the given range.
@@ -540,9 +558,10 @@ module Google
540
558
  # filter = Google::Cloud::Bigtable::RowFilter.timestamp_range(to: to)
541
559
  #
542
560
  def self.timestamp_range from: nil, to: nil
543
- SimpleFilter.new.timestamp_range(from, to)
561
+ SimpleFilter.new.timestamp_range from, to
544
562
  end
545
563
 
564
+ ##
546
565
  # Creates a value-range filter instance.
547
566
  #
548
567
  # Matches only cells with values that fall within the given range.
@@ -559,19 +578,28 @@ module Google
559
578
  # @return [Google::Cloud::Bigtable::RowFilter::SimpleFilter]
560
579
  #
561
580
  # @example Start to end range
581
+ # require "google/cloud/bigtable"
562
582
  #
563
- # range = Google::Cloud::Bigtable::ValueRange.from("abc").to("xyz")
583
+ # bigtable = Google::Cloud::Bigtable.new
584
+ # table = bigtable.table("my-instance", "my-table")
585
+ #
586
+ # range = table.new_value_range.from("value-001", inclusive: false)
564
587
  # filter = Google::Cloud::Bigtable::RowFilter.value_range(range)
565
588
  #
566
589
  # @example Start exlusive to infinite end range
590
+ # require "google/cloud/bigtable"
591
+ #
592
+ # bigtable = Google::Cloud::Bigtable.new
593
+ # table = bigtable.table("my-instance", "my-table")
567
594
  #
568
- # range = Google::Cloud::Bigtable::ValueRange.from("abc", inclusive: false)
595
+ # range = table.new_value_range.from("value-001", inclusive: false)
569
596
  # filter = Google::Cloud::Bigtable::RowFilter.value_range(range)
570
597
  #
571
598
  def self.value_range range
572
- SimpleFilter.new.value_range(range)
599
+ SimpleFilter.new.value_range range
573
600
  end
574
601
 
602
+ ##
575
603
  # Creates a column-range filter instance.
576
604
  #
577
605
  # Matches only cells from columns within the given range.
@@ -580,13 +608,14 @@ module Google
580
608
  # @return [Google::Cloud::Bigtable::RowFilter::SimpleFilter]
581
609
  #
582
610
  # @example
611
+ # require "google/cloud/bigtable"
583
612
  #
584
- # range = Google::Cloud::Bigtable::ColumnRange.new(cf).from("field0").to("field5")
613
+ # range = Google::Cloud::Bigtable::ColumnRange.new("cf").from("field0").to("field5")
585
614
  #
586
615
  # filter = Google::Cloud::Bigtable::RowFilter.column_range(range)
587
616
  #
588
617
  def self.column_range range
589
- SimpleFilter.new.column_range(range)
618
+ SimpleFilter.new.column_range range
590
619
  end
591
620
  end
592
621
  end
@@ -19,6 +19,7 @@ module Google
19
19
  module Cloud
20
20
  module Bigtable
21
21
  module RowFilter
22
+ ##
22
23
  # # ChainFilter
23
24
  #
24
25
  # A RowFilter that sends rows through several RowFilters in sequence.
@@ -37,9 +38,10 @@ module Google
37
38
  # @private
38
39
  # Creates an instance of a chain filter.
39
40
  def initialize
40
- @grpc = Google::Bigtable::V2::RowFilter::Chain.new
41
+ @filters = []
41
42
  end
42
43
 
44
+ ##
43
45
  # Adds a chain filter instance.
44
46
  #
45
47
  # A Chain RowFilter that sends rows through several RowFilters in sequence.
@@ -66,12 +68,11 @@ module Google
66
68
  # filter = Google::Cloud::Bigtable::RowFilter.chain.chain(chain_1)
67
69
  #
68
70
  def chain filter
69
- unless filter.instance_of?(ChainFilter)
70
- raise RowFilterError, "Filter type must be ChainFilter"
71
- end
72
- add(filter)
71
+ raise RowFilterError, "Filter type must be ChainFilter" unless filter.instance_of? ChainFilter
72
+ add filter
73
73
  end
74
74
 
75
+ ##
75
76
  # Add interleave filter.
76
77
  #
77
78
  # A RowFilter that sends each row to each of several component
@@ -119,12 +120,11 @@ module Google
119
120
  # chain = Google::Cloud::Bigtable::RowFilter.chain.interleave(interleave)
120
121
  #
121
122
  def interleave filter
122
- unless filter.instance_of?(InterleaveFilter)
123
- raise RowFilterError, "Filter type must be InterleaveFilter"
124
- end
125
- add(filter)
123
+ raise RowFilterError, "Filter type must be InterleaveFilter" unless filter.instance_of? InterleaveFilter
124
+ add filter
126
125
  end
127
126
 
127
+ ##
128
128
  # Adds a condition filter instance.
129
129
  #
130
130
  # A RowFilter that evaluates one of two possible RowFilters, depending on
@@ -148,17 +148,17 @@ module Google
148
148
  # label = Google::Cloud::Bigtable::RowFilter.label("user")
149
149
  # strip_value = Google::Cloud::Bigtable::RowFilter.strip_value
150
150
  #
151
- # condition_filter = Google::Cloud::Bigtable::RowFilter.condition(predicate).on_match(label).otherwise(strip_value)
151
+ # condition_filter = Google::Cloud::Bigtable::RowFilter.
152
+ # condition(predicate).on_match(label).otherwise(strip_value)
152
153
  #
153
154
  # filter = Google::Cloud::Bigtable::RowFilter.chain.condition(condition_filter)
154
155
  #
155
156
  def condition filter
156
- unless filter.instance_of?(ConditionFilter)
157
- raise RowFilterError, "Filter type must be ConditionFilter"
158
- end
159
- add(filter)
157
+ raise RowFilterError, "Filter type must be ConditionFilter" unless filter.instance_of? ConditionFilter
158
+ add filter
160
159
  end
161
160
 
161
+ ##
162
162
  # Adds a pass filter instance.
163
163
  #
164
164
  # Matches all cells, regardless of input. Functionally equivalent to
@@ -172,9 +172,10 @@ module Google
172
172
  # filter = Google::Cloud::Bigtable::RowFilter.chain.pass
173
173
  #
174
174
  def pass
175
- add(RowFilter.pass)
175
+ add RowFilter.pass
176
176
  end
177
177
 
178
+ ##
178
179
  # Adds a block-all filter instance.
179
180
  #
180
181
  # Does not match any cells, regardless of input. Useful for temporarily
@@ -188,9 +189,10 @@ module Google
188
189
  # filter = Google::Cloud::Bigtable::RowFilter.chain.block
189
190
  #
190
191
  def block
191
- add(RowFilter.block)
192
+ add RowFilter.block
192
193
  end
193
194
 
195
+ ##
194
196
  # Adds a sink filter instance.
195
197
  #
196
198
  # Outputs all cells directly to the output of the read rather than to any parent filter.
@@ -203,9 +205,10 @@ module Google
203
205
  # filter = Google::Cloud::Bigtable::RowFilter.chain.sink
204
206
  #
205
207
  def sink
206
- add(RowFilter.sink)
208
+ add RowFilter.sink
207
209
  end
208
210
 
211
+ ##
209
212
  # Adds a strip-value filter instance.
210
213
  #
211
214
  # Replaces each cell's value with an empty string.
@@ -218,9 +221,10 @@ module Google
218
221
  # filter = Google::Cloud::Bigtable::RowFilter.chain.strip_value
219
222
  #
220
223
  def strip_value
221
- add(RowFilter.strip_value)
224
+ add RowFilter.strip_value
222
225
  end
223
226
 
227
+ ##
224
228
  # Adds a key-filter instance to match keys using a regular expression.
225
229
  #
226
230
  # Matches only cells from rows whose keys satisfy the given RE2 regex. In
@@ -243,9 +247,10 @@ module Google
243
247
  # filter = Google::Cloud::Bigtable::RowFilter.chain.key("user-*")
244
248
  #
245
249
  def key regex
246
- add(RowFilter.key(regex))
250
+ add RowFilter.key(regex)
247
251
  end
248
252
 
253
+ ##
249
254
  # Adds a sample-probability filter instance.
250
255
  #
251
256
  # Matches all cells from a row with probability p, and matches no cells
@@ -261,9 +266,10 @@ module Google
261
266
  # filter = Google::Cloud::Bigtable::RowFilter.chain.sample(0.5)
262
267
  #
263
268
  def sample probability
264
- add(RowFilter.sample(probability))
269
+ add RowFilter.sample(probability)
265
270
  end
266
271
 
272
+ ##
267
273
  # Adds a family-name-match filter using a regular expression.
268
274
  #
269
275
  # Matches only cells from columns whose families satisfy the given RE2
@@ -285,9 +291,10 @@ module Google
285
291
  # filter = Google::Cloud::Bigtable::RowFilter.chain.family("cf-*")
286
292
  #
287
293
  def family regex
288
- add(RowFilter.family(regex))
294
+ add RowFilter.family(regex)
289
295
  end
290
296
 
297
+ ##
291
298
  # Add a column-qualifier-match filter using a regular expression.
292
299
  #
293
300
  # Matches only cells from columns whose qualifiers satisfy the given RE2
@@ -309,9 +316,10 @@ module Google
309
316
  # filter = Google::Cloud::Bigtable::RowFilter.chain.qualifier("user-name*")
310
317
  #
311
318
  def qualifier regex
312
- add(RowFilter.qualifier(regex))
319
+ add RowFilter.qualifier(regex)
313
320
  end
314
321
 
322
+ ##
315
323
  # Adds a value-match filter using a regular expression.
316
324
  #
317
325
  # Matches only cells with values that satisfy the given regular expression.
@@ -332,9 +340,10 @@ module Google
332
340
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value("abc*")
333
341
  #
334
342
  def value regex
335
- add(RowFilter.value(regex))
343
+ add RowFilter.value(regex)
336
344
  end
337
345
 
346
+ ##
338
347
  # Adds a label filter instance to apply a label based on the result of read rows.
339
348
  #
340
349
  # Applies the given label to all cells in the output row. This allows
@@ -359,9 +368,10 @@ module Google
359
368
  # filter = Google::Cloud::Bigtable::RowFilter.chain.label("user-detail")
360
369
  #
361
370
  def label value
362
- add(RowFilter.label(value))
371
+ add RowFilter.label(value)
363
372
  end
364
373
 
374
+ ##
365
375
  # Adds a cell-per-row-offset filter instance to skip the first N cells.
366
376
  #
367
377
  # Skips the first N cells of each row, matching all subsequent cells.
@@ -377,9 +387,10 @@ module Google
377
387
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_row_offset(3)
378
388
  #
379
389
  def cells_per_row_offset offset
380
- add(RowFilter.cells_per_row_offset(offset))
390
+ add RowFilter.cells_per_row_offset(offset)
381
391
  end
382
392
 
393
+ ##
383
394
  # Adds a cells-per-row-limit filter instance.
384
395
  #
385
396
  # Matches only the first N cells of each row.
@@ -395,9 +406,10 @@ module Google
395
406
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_row(5)
396
407
  #
397
408
  def cells_per_row limit
398
- add(RowFilter.cells_per_row(limit))
409
+ add RowFilter.cells_per_row(limit)
399
410
  end
400
411
 
412
+ ##
401
413
  # Adds a cells-per-column filter instance.
402
414
  #
403
415
  # Matches only the most recent N cells within each column. For example,
@@ -416,9 +428,10 @@ module Google
416
428
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_column(5)
417
429
  #
418
430
  def cells_per_column limit
419
- add(RowFilter.cells_per_column(limit))
431
+ add RowFilter.cells_per_column(limit)
420
432
  end
421
433
 
434
+ ##
422
435
  # Adds a timestamp-range filter instance.
423
436
  #
424
437
  # Matches only cells with timestamps within the given range.
@@ -440,9 +453,10 @@ module Google
440
453
  # filter = Google::Cloud::Bigtable::RowFilter.chain.timestamp_range(from: from, to: to)
441
454
  #
442
455
  def timestamp_range from: nil, to: nil
443
- add(RowFilter.timestamp_range(from: from, to: to))
456
+ add RowFilter.timestamp_range(from: from, to: to)
444
457
  end
445
458
 
459
+ ##
446
460
  # Adds a value-range filter instance.
447
461
  #
448
462
  # Matches only cells with values that fall within the given range.
@@ -451,26 +465,36 @@ module Google
451
465
  # option inclusive/exclusive options
452
466
  #
453
467
  # * The value at which to start the range. If neither field is set, interpreted as an empty string, inclusive.
454
- # * The value at which to end the range. If neither field is set, interpreted as the infinite string, exclusive.
468
+ # * The value at which to end the range. If neither field is set, interpreted as the infinite string,
469
+ # exclusive.
455
470
  #
456
471
  # @param range [Google::Cloud::Bigtable::ValueRange]
457
472
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
458
473
  # `self` instance of chain filter.
459
474
  #
460
475
  # @example Start to end range
476
+ # require "google/cloud/bigtable"
461
477
  #
462
- # range = Google::Cloud::Bigtable::ValueRange.from("abc").to('xyz')
478
+ # bigtable = Google::Cloud::Bigtable.new
479
+ # table = bigtable.table("my-instance", "my-table")
480
+ #
481
+ # range = table.new_value_range.from("value-001").to("value-005")
463
482
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value_range(range)
464
483
  #
465
- # @example Start exlusive to infinite end range
484
+ # @example Start exclusive to infinite end range
485
+ # require "google/cloud/bigtable"
486
+ #
487
+ # bigtable = Google::Cloud::Bigtable.new
488
+ # table = bigtable.table("my-instance", "my-table")
466
489
  #
467
- # range = Google::Cloud::Bigtable::ValueRange.from("abc", inclusive: false)
490
+ # range = table.new_value_range.from("value-001", inclusive: false)
468
491
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value_range(range)
469
492
  #
470
493
  def value_range range
471
- add(RowFilter.value_range(range))
494
+ add RowFilter.value_range(range)
472
495
  end
473
496
 
497
+ ##
474
498
  # Adds a column-range filter instance.
475
499
  #
476
500
  # Matches only cells from columns within the given range.
@@ -480,16 +504,18 @@ module Google
480
504
  # `self` instance of chain filter.
481
505
  #
482
506
  # @example
507
+ # require "google/cloud/bigtable"
483
508
  #
484
- # range = Google::Cloud::Bigtable::ColumnRange.new(cf).from("field0").to('field5')
509
+ # range = Google::Cloud::Bigtable::ColumnRange.new("cf").from("field0").to('field5')
485
510
  #
486
511
  # filter = Google::Cloud::Bigtable::RowFilter.chain.column_range(range)
487
512
  #
488
513
  def column_range range
489
- add(RowFilter.column_range(range))
514
+ add RowFilter.column_range(range)
490
515
  end
491
516
 
492
- # Gets the number of filters in the chain filter.
517
+ ##
518
+ # Gets the number of filters in the chain.
493
519
  #
494
520
  # @return [Integer]
495
521
  #
@@ -499,15 +525,16 @@ module Google
499
525
  # filter.length # 2
500
526
  #
501
527
  def length
502
- @grpc.filters.length
528
+ @filters.length
503
529
  end
504
530
 
505
- # Gets the list of filters.
531
+ ##
532
+ # Returns a frozen copy of the filters array.
506
533
  #
507
- # @return [Array<Google::Bigtable::V2::RowFilter>]
534
+ # @return [Array<SimpleFilter|ChainFilter|InterleaveFilter|ConditionFilter>]
508
535
  #
509
536
  def filters
510
- @grpc.filters
537
+ @filters.dup.freeze
511
538
  end
512
539
 
513
540
  # @private
@@ -517,10 +544,11 @@ module Google
517
544
  # @return [Google::Bigtable::V2::RowFilter]
518
545
  #
519
546
  def to_grpc
520
- Google::Bigtable::V2::RowFilter.new(chain: @grpc)
547
+ Google::Bigtable::V2::RowFilter.new(
548
+ chain: Google::Bigtable::V2::RowFilter::Chain.new(filters: @filters.map(&:to_grpc))
549
+ )
521
550
  end
522
551
 
523
-
524
552
  private
525
553
 
526
554
  # @private
@@ -529,7 +557,7 @@ module Google
529
557
  # @param filter [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter]
530
558
  #
531
559
  def add filter
532
- @grpc.filters << filter.to_grpc
560
+ @filters << filter
533
561
  self
534
562
  end
535
563
  end