Class: Libcouchbase::ResultsNative

Inherits:
Results
  • Object
show all
Defined in:
lib/libcouchbase/results_native.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) ⇒ ResultsNative

Returns a new instance of ResultsNative.



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/libcouchbase/results_native.rb', line 7

def initialize(query, &row_modifier)
    @query_in_progress = false
    @query_completed = false
    @complete_result_set = false

    @results = []

    # This could be a view or n1ql query
    @query = query
    @row_modifier = row_modifier
end

Instance Method Details

#cancelObject



135
136
137
138
139
140
# File 'lib/libcouchbase/results_native.rb', line 135

def cancel
    return if @cancelled
    @cancelled = true
    @query.cancel
    process_next_item
end

#countObject



105
106
107
108
# File 'lib/libcouchbase/results_native.rb', line 105

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
86
87
# File 'lib/libcouchbase/results_native.rb', line 57

def each(&blk)
    # return a valid enumerator
    return load_all.each unless block_given?

    if @complete_result_set
        @results.each &blk
    else
        perform

        begin
            index = 0
            remaining = index < @results.length
            while !@query_completed || remaining do
                if remaining
                    yield @results[index]
                    index += 1
                else
                    process_next_item
                end

                remaining = index < @results.length
            end
        ensure
            # cancel is executed on break or error
            cancel unless @query_completed
        end

        raise @error if @error
    end
    self
end

#firstObject



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/libcouchbase/results_native.rb', line 89

def first
    if @complete_result_set || @results.length > 0
        @results[0]
    else
        perform is_complete: false, limit: 1

        while not @query_completed do
            process_next_item
        end
        raise @error if @error

        result = @results[0]
        result
    end
end

#options(**opts) ⇒ Object



19
20
21
22
# File 'lib/libcouchbase/results_native.rb', line 19

def options(**opts)
    reset
    @query.options.merge!(opts)
end

#resetObject



50
51
52
53
54
55
# File 'lib/libcouchbase/results_native.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



24
25
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_native.rb', line 24

def stream(&blk)
    if @complete_result_set
        @results.each &blk
    else
        perform is_complete: false
        begin
            remaining = @results.length > 0
            while !@query_completed || remaining do
                if remaining
                    yield @results.shift
                else
                    process_next_item
                end

                remaining = @results.length > 0
            end
        ensure
            # cancel is executed on break or error
            cancel unless @query_completed
        end

        raise @error if @error
    end
    self
end

#take(num) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/libcouchbase/results_native.rb', line 110

def take(num)
    if @complete_result_set || @results.length >= num
        @results[0...num]
    else
        perform is_complete: false, limit: num

        index = 0
        result = []
        remaining = index < @results.length && index < num
        while !@query_completed || remaining do
            if remaining
                result << @results[index]
                index += 1
            else
                process_next_item
            end

            remaining = index < @results.length && index < num
        end

        raise @error if @error
        result
    end
end