right_support 2.3.2 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -313,6 +313,61 @@ module RightSupport::DB
313
313
  rows
314
314
  end
315
315
 
316
+ # This method is an attempt to circumvent the Cassandra gem limitation of returning only 100 columns for wide rows
317
+ # This method returns only columns that are within the result set specified by a secondary index equality query
318
+ # This method will iterate through chunks of rows of the resultset and it will yield to the caller all of the
319
+ # columns in chunks of 1,000 until all of the columns have been retrieved
320
+ #
321
+ # == Parameters:
322
+ # @param [String] index column name
323
+ # @param [String] index column value
324
+ #
325
+ # == Yields:
326
+ # @yield [Array<String, Array<CassandraThrift::ColumnOrSuperColumn>>] irray containing ndex column value passed in and an array of columns matching the index query
327
+ def stream_all_indexed_slices(index, key)
328
+ expr = do_op(:create_idx_expr, index, key, "EQ")
329
+
330
+ start_row = ''
331
+ row_count = 10
332
+ has_more_rows = true
333
+
334
+ while (start_row != nil)
335
+ clause = do_op(:create_idx_clause, [expr], start_row, row_count)
336
+
337
+ rows = self.conn.get_indexed_slices(column_family, clause, 'account_id',
338
+ :key_count => row_count, :key_start => start_row)
339
+ rows = rows.keys
340
+ rows.shift unless start_row == ''
341
+ start_row = rows.last
342
+
343
+ rows.each do |row|
344
+ start_column = ''
345
+ column_count = 1_000
346
+ has_more_columns = true
347
+
348
+ while has_more_columns
349
+ clause = do_op(:create_idx_clause, [expr], row, 1)
350
+ chunk = self.conn.get_indexed_slices(column_family, clause, nil,
351
+ :start => start_column,
352
+ :count => column_count)
353
+
354
+ key = chunk.keys.first
355
+ columns = chunk.values.first
356
+ columns.shift unless start_column == ''
357
+ yield(key, columns) unless chunk.empty?
358
+
359
+ if columns.size >= column_count - 1
360
+ #Assume there are more columns, use last column as start of next slice
361
+ start_column = columns.last.column.name
362
+ column_count = 1_001
363
+ else
364
+ has_more_columns = false
365
+ end
366
+ end
367
+ end
368
+ end
369
+ end
370
+
316
371
  # Get all rows for specified secondary key
317
372
  #
318
373
  # === Parameters
@@ -7,8 +7,8 @@ spec = Gem::Specification.new do |s|
7
7
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
8
8
 
9
9
  s.name = 'right_support'
10
- s.version = '2.3.2'
11
- s.date = '2012-08-06'
10
+ s.version = '2.3.3'
11
+ s.date = '2012-08-23'
12
12
 
13
13
  s.authors = ['Tony Spataro', 'Sergey Sergyenko', 'Ryan Williamson', 'Lee Kirchhoff', 'Sergey Enin']
14
14
  s.email = 'support@rightscale.com'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_support
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 3
9
- - 2
10
- version: 2.3.2
9
+ - 3
10
+ version: 2.3.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tony Spataro
@@ -19,7 +19,7 @@ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
21
 
22
- date: 2012-08-06 00:00:00 -07:00
22
+ date: 2012-08-23 00:00:00 -07:00
23
23
  default_executable:
24
24
  dependencies: []
25
25