Class: Libcouchbase::ResultsFiber
- Inherits:
-
Results
- Object
- Results
- Libcouchbase::ResultsFiber
show all
- Defined in:
- lib/libcouchbase/results_fiber.rb
Instance Attribute Summary
Attributes inherited from Results
#complete_result_set, #metadata, #query_completed, #query_in_progress
Instance Method Summary
collapse
Constructor Details
#initialize(query, &row_modifier) ⇒ ResultsFiber
Returns a new instance of ResultsFiber.
7
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/libcouchbase/results_fiber.rb', line 7
def initialize(query, &row_modifier)
@query_in_progress = false
@query_completed = false
@complete_result_set = false
@results = []
@fiber = nil
@query = query
@row_modifier = row_modifier
end
|
Instance Method Details
#cancel ⇒ Object
139
140
141
142
143
|
# File 'lib/libcouchbase/results_fiber.rb', line 139
def cancel
@cancelled = true
@query.cancel
resume
end
|
#count ⇒ Object
107
108
109
110
|
# File 'lib/libcouchbase/results_fiber.rb', line 107
def count
first unless @metadata
@query.get_count @metadata
end
|
#each(&blk) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/libcouchbase/results_fiber.rb', line 57
def each(&blk)
return load_all.each unless block_given?
if @complete_result_set
@results.each &blk
else
perform
index = 0
@fiber = Fiber.current
begin
while not @query_completed do
if index < @results.length
yield @results[index]
index += 1
else
resume
end
end
ensure
cancel unless @query_completed
@fiber = nil
end
end
self
end
|
#first ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/libcouchbase/results_fiber.rb', line 87
def first
if @complete_result_set || @results.length > 0
@results[0]
else
perform is_complete: false, limit: 1
@fiber = Fiber.current
begin
while not @query_completed do
resume
end
ensure
@fiber = nil
end
result = @results[0]
result
end
end
|
#options(**opts) ⇒ Object
20
21
22
23
|
# File 'lib/libcouchbase/results_fiber.rb', line 20
def options(**opts)
reset
@query.options.merge!(opts)
end
|
#reset ⇒ Object
50
51
52
53
54
55
|
# File 'lib/libcouchbase/results_fiber.rb', line 50
def reset
raise 'query in progress' if @query_in_progress
@query_in_progress = false
@complete_result_set = false
@results.clear
end
|
#stream(&blk) ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/libcouchbase/results_fiber.rb', line 26
def stream(&blk)
if @complete_result_set
@results.each &blk
else
perform is_complete: false
@fiber = Fiber.current
begin
while not @query_completed do
if @results.length > 0
yield @results.shift
else
resume
end
end
ensure
cancel unless @query_completed
@fiber = nil
end
end
self
end
|
#take(num) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/libcouchbase/results_fiber.rb', line 112
def take(num)
if @complete_result_set || @results.length >= num
@results[0...num]
else
perform is_complete: false, limit: num
index = 0
@fiber = Fiber.current
result = []
begin
while not @query_completed do
if index < @results.length && index < num
result << @results[index]
index += 1
else
resume
end
end
ensure
@fiber = nil
end
result
end
end
|