cassie 1.0.0.beta.4 → 1.0.0.beta.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b68910ecc81a9d339e0a59ee8b46adc36841089
4
- data.tar.gz: 42a0a317184f67ad97c9d7281378fedf787eb605
3
+ metadata.gz: ad2343accacdf35f48e99a510cf6905bb86f91b5
4
+ data.tar.gz: 8e79fb85280c7f756c2f43c4be640f932dcd7eaf
5
5
  SHA512:
6
- metadata.gz: 096994330cb1cd057c68d1fc90276d682426f91b9be08939f372d9e8c980c2f0857b1fdd5db7750826fbae94caab1073576a849fff2eb8a33163cb8c697a1cd4
7
- data.tar.gz: 28a4de6c7522a2c360af1472cc6e76d52a0b1957fe7c94a1e1460072b7b2fabcbcecaaa32b91884e91622f5c733d65c79d14ae3cf6924cb036621ff41e251c8e
6
+ metadata.gz: 9d1823d0746fb58f0c7bc6026cda513f5957fd42d7fe63e162635cc70ac39b14dd6531a8fe85aa7a157e56a03d8669683f015a061329e86fba1cc24256f8ec41
7
+ data.tar.gz: ea60edb6e9944e0009a2864a0d349990aa349b820751940beb41b73047a13fdc7b3307ef4c9b84aefdc216116c21167ca8d29f7ee1e9394a62a468a09e9df65d
@@ -7,8 +7,8 @@ module Cassie::Queries::Statement
7
7
  extend ::ActiveSupport::Concern
8
8
 
9
9
  included do
10
- attr_reader :paging_state
11
- attr_reader :stateless_page_size
10
+ attr_accessor :paging_state
11
+ attr_accessor :stateless_page_size
12
12
  end
13
13
 
14
14
  def fetch_each(opts={})
@@ -29,24 +29,34 @@ module Cassie::Queries::Statement
29
29
  #
30
30
  # "max score in group: 26"
31
31
  def fetch_in_batches(opts={})
32
- return to_enum(:fetch_in_batches, opts) unless block_given?
32
+ # we want to clone the query as soon as the enumerable is
33
+ # created, not wait until the firt iteration is called
34
+ # as the client could mutate the object between these states
35
+ # but we don't want to clone twice if enumerator returned
36
+ return to_enum(:fetch_in_batches, opts.merge(_paged_query: self.clone)) unless block_given?
37
+
33
38
  opts[:batch_size] ||= 1000
34
39
 
40
+ # use Cassandra internal paging
41
+ # but clone the query to isolate it
42
+ # but allow all paging queries
43
+ # to execute within a Cassie::Query
44
+ # for use of other features, like logging
45
+ paged_query = opts.delete(:_paged_query) || self.clone
46
+
35
47
  # set cassandra internal
36
48
  # stateless page size (independent from limit)
37
- @stateless_page_size = opts[:batch_size]
38
- @paging_state = nil
49
+ paged_query.stateless_page_size = opts[:batch_size]
50
+ paged_query.paging_state = nil
39
51
  done = false
40
52
 
41
- # use Cassandra internal paging
42
- # but keep result within this query object
43
53
  loop do
44
- raise page_size_changed_error(opts[:batch_size]) if opts[:batch_size] != self.stateless_page_size
45
- batch = fetch
54
+ raise page_size_changed_error(opts[:batch_size]) if opts[:batch_size] != paged_query.stateless_page_size
55
+ batch = paged_query.fetch
46
56
 
47
- @paging_state = result.paging_state
57
+ paged_query.paging_state = paged_query.result.paging_state
48
58
  break if done
49
- done = true if result.last_page?
59
+ done = true if paged_query.result.last_page?
50
60
 
51
61
  yield batch
52
62
  end
@@ -4,9 +4,10 @@ module Cassie::Testing::Fake
4
4
  class Result
5
5
  attr_accessor :rows, :statement
6
6
 
7
- def initialize(statement, opts={})
7
+ def initialize(statement, execution_opts={})
8
8
  @statement = statement
9
- @rows = opts[:rows]
9
+ @opts = execution_opts
10
+ @rows = @opts[:rows]
10
11
  end
11
12
 
12
13
  def execution_info
@@ -22,11 +23,21 @@ module Cassie::Testing::Fake
22
23
  end
23
24
 
24
25
  def last_page?
26
+ return nil unless @opts[:page_size]
27
+ return @last_page if defined?(@last_page)
25
28
  true
26
29
  end
27
30
 
31
+ def assert_last_page(val=true)
32
+ @last_page = val
33
+ end
34
+
28
35
  def paging_state
29
- 'that state tho!'
36
+ return nil unless @opts[:page_size]
37
+ return "paging #{SecureRandom.hex(6)}:0" unless @opts[:paging_state]
38
+ bytes = @opts[:paging_state].bytes
39
+ bytes[-1] = bytes[-1] + 1
40
+ return bytes.pack('c*')
30
41
  end
31
42
  end
32
43
  end
@@ -6,9 +6,9 @@ module Cassie::Testing::Fake
6
6
  attr_reader :last_statement
7
7
  attr_accessor :rows
8
8
 
9
- def execute(statement, *args)
9
+ def execute(statement, args={})
10
10
  @last_statement = statement
11
- Result.new(statement, rows: rows)
11
+ Result.new(statement, args.merge(rows: rows))
12
12
  end
13
13
 
14
14
  def prepare(statement)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassie
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta.4
4
+ version: 1.0.0.beta.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Prothro