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

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.
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