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 +4 -4
- data/lib/cassie/queries/statement/batches.rb +21 -11
- data/lib/cassie/testing/fake/result.rb +14 -3
- data/lib/cassie/testing/fake/session.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad2343accacdf35f48e99a510cf6905bb86f91b5
|
4
|
+
data.tar.gz: 8e79fb85280c7f756c2f43c4be640f932dcd7eaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
11
|
-
|
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
|
-
|
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
|
-
|
38
|
-
|
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] !=
|
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
|
-
|
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,
|
7
|
+
def initialize(statement, execution_opts={})
|
8
8
|
@statement = statement
|
9
|
-
@
|
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
|
-
|
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,
|
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)
|