mongo 2.1.2 → 2.2.0.rc0
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/csasl/csasl.bundle +0 -0
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/bulk_write.rb +7 -1
- data/lib/mongo/client.rb +17 -15
- data/lib/mongo/cluster.rb +4 -2
- data/lib/mongo/collection.rb +36 -2
- data/lib/mongo/collection/view.rb +24 -21
- data/lib/mongo/collection/view/aggregation.rb +5 -42
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +5 -12
- data/lib/mongo/collection/view/iterable.rb +24 -2
- data/lib/mongo/collection/view/map_reduce.rb +18 -27
- data/lib/mongo/collection/view/readable.rb +70 -112
- data/lib/mongo/collection/view/writable.rb +23 -7
- data/lib/mongo/cursor.rb +76 -25
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/database.rb +2 -2
- data/lib/mongo/database/view.rb +9 -5
- data/lib/mongo/dbref.rb +3 -3
- data/lib/mongo/error.rb +1 -0
- data/lib/mongo/error/invalid_write_concern.rb +35 -0
- data/lib/mongo/grid/file/chunk.rb +2 -2
- data/lib/mongo/index/view.rb +5 -2
- data/lib/mongo/operation.rb +1 -0
- data/lib/mongo/operation/commands.rb +2 -0
- data/lib/mongo/operation/commands/aggregate.rb +39 -45
- data/lib/mongo/operation/commands/aggregate/result.rb +54 -68
- data/lib/mongo/operation/commands/collections_info.rb +38 -36
- data/lib/mongo/operation/commands/collections_info/result.rb +17 -15
- data/lib/mongo/operation/commands/command.rb +24 -22
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/indexes.rb +41 -39
- data/lib/mongo/operation/commands/list_collections.rb +25 -31
- data/lib/mongo/operation/commands/list_collections/result.rb +63 -81
- data/lib/mongo/operation/commands/list_indexes.rb +27 -35
- data/lib/mongo/operation/commands/list_indexes/result.rb +67 -85
- data/lib/mongo/operation/commands/map_reduce.rb +29 -37
- data/lib/mongo/operation/commands/map_reduce/result.rb +85 -88
- data/lib/mongo/operation/commands/parallel_scan.rb +29 -33
- data/lib/mongo/operation/commands/parallel_scan/result.rb +34 -42
- data/lib/mongo/operation/commands/user_query.rb +40 -38
- data/lib/mongo/operation/commands/users_info.rb +24 -29
- data/lib/mongo/operation/commands/users_info/result.rb +13 -11
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/result.rb +30 -0
- data/lib/mongo/operation/specifiable.rb +35 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +4 -3
- data/lib/mongo/operation/write/bulk/delete/result.rb +18 -25
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +2 -2
- data/lib/mongo/operation/write/command/delete.rb +3 -2
- data/lib/mongo/operation/write/command/insert.rb +4 -2
- data/lib/mongo/operation/write/command/update.rb +6 -3
- data/lib/mongo/operation/write/gle.rb +2 -1
- data/lib/mongo/operation/write/idable.rb +19 -2
- data/lib/mongo/options/mapper.rb +22 -0
- data/lib/mongo/protocol/bit_vector.rb +3 -3
- data/lib/mongo/protocol/delete.rb +15 -5
- data/lib/mongo/protocol/get_more.rb +10 -5
- data/lib/mongo/protocol/insert.rb +1 -6
- data/lib/mongo/protocol/kill_cursors.rb +14 -1
- data/lib/mongo/protocol/message.rb +32 -8
- data/lib/mongo/protocol/serializers.rb +15 -16
- data/lib/mongo/protocol/update.rb +35 -12
- data/lib/mongo/server/connectable.rb +3 -1
- data/lib/mongo/server/connection.rb +5 -5
- data/lib/mongo/server/description.rb +8 -2
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/monitor.rb +1 -12
- data/lib/mongo/server/monitor/connection.rb +30 -26
- data/lib/mongo/server_selector/selectable.rb +21 -4
- data/lib/mongo/uri.rb +2 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/mongo.gemspec +1 -2
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +13 -0
- data/spec/mongo/bulk_write_spec.rb +58 -0
- data/spec/mongo/client_spec.rb +6 -4
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +3 -52
- data/spec/mongo/collection/view/map_reduce_spec.rb +12 -12
- data/spec/mongo/collection/view/readable_spec.rb +86 -80
- data/spec/mongo/collection/view_spec.rb +109 -703
- data/spec/mongo/collection_spec.rb +594 -11
- data/spec/mongo/command_monitoring_spec.rb +40 -27
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +24 -3
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +3 -3
- data/spec/mongo/index/view_spec.rb +41 -0
- data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/commands/aggregate_spec.rb +1 -1
- data/spec/mongo/operation/commands/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/commands/command_spec.rb +1 -1
- data/spec/mongo/operation/commands/indexes_spec.rb +1 -1
- data/spec/mongo/operation/commands/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/write/command/delete_spec.rb +25 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +25 -0
- data/spec/mongo/operation/write/command/update_spec.rb +25 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +3 -3
- data/spec/mongo/protocol/query_spec.rb +7 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +9 -19
- data/spec/support/command_monitoring.rb +8 -0
- data/spec/support/command_monitoring/find.yml +53 -4
- data/spec/support/matchers.rb +1 -1
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/travis.rb +1 -1
- metadata +43 -10
- metadata.gz.sig +0 -0
@@ -31,10 +31,13 @@ module Mongo
|
|
31
31
|
#
|
32
32
|
# @since 2.0.0
|
33
33
|
def find_one_and_delete
|
34
|
-
cmd = { :findandmodify => collection.name, :query =>
|
34
|
+
cmd = { :findandmodify => collection.name, :query => filter, :remove => true }
|
35
35
|
cmd[:fields] = projection if projection
|
36
36
|
cmd[:sort] = sort if sort
|
37
37
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
38
|
+
wc = options[:write_concern] || (collection.write_concern &&
|
39
|
+
collection.write_concern.options)
|
40
|
+
cmd[:writeConcern] = wc if wc
|
38
41
|
write_with_retry do
|
39
42
|
database.command(cmd).first['value']
|
40
43
|
end
|
@@ -52,8 +55,11 @@ module Mongo
|
|
52
55
|
# @param [ Hash ] opts The options.
|
53
56
|
#
|
54
57
|
# @option opts [ Symbol ] :return_document Either :before or :after.
|
55
|
-
# @option opts [ true, false ] :upsert Whether to upsert if the
|
56
|
-
#
|
58
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
59
|
+
# @option opts [ true, false ] :bypass_document_validation Whether or
|
60
|
+
# not to skip document level validation.
|
61
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
62
|
+
# Defaults to the collection's write concern.
|
57
63
|
#
|
58
64
|
# @return [ BSON::Document ] The document.
|
59
65
|
#
|
@@ -71,18 +77,27 @@ module Mongo
|
|
71
77
|
# @param [ Hash ] opts The options.
|
72
78
|
#
|
73
79
|
# @option opts [ Symbol ] :return_document Either :before or :after.
|
80
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
81
|
+
# @option opts [ true, false ] :bypass_document_validation Whether or
|
82
|
+
# not to skip document level validation.
|
83
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
84
|
+
# Defaults to the collection's write concern.
|
74
85
|
#
|
75
86
|
# @return [ BSON::Document ] The document.
|
76
87
|
#
|
77
88
|
# @since 2.0.0
|
78
89
|
def find_one_and_update(document, opts = {})
|
79
|
-
cmd = { :findandmodify => collection.name, :query =>
|
90
|
+
cmd = { :findandmodify => collection.name, :query => filter }
|
80
91
|
cmd[:update] = document
|
81
92
|
cmd[:fields] = projection if projection
|
82
93
|
cmd[:sort] = sort if sort
|
83
94
|
cmd[:new] = !!(opts[:return_document] && opts[:return_document] == :after)
|
84
95
|
cmd[:upsert] = opts[:upsert] if opts[:upsert]
|
85
96
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
97
|
+
cmd[:bypassDocumentValidation] = !!opts[:bypass_document_validation]
|
98
|
+
wc = options[:write_concern] || (collection.write_concern &&
|
99
|
+
collection.write_concern.options)
|
100
|
+
cmd[:writeConcern] = wc if wc
|
86
101
|
write_with_retry do
|
87
102
|
value = database.command(cmd).first['value']
|
88
103
|
value unless value.nil? || value.empty?
|
@@ -172,7 +187,7 @@ module Mongo
|
|
172
187
|
def remove(value)
|
173
188
|
write_with_retry do
|
174
189
|
Operation::Write::Delete.new(
|
175
|
-
:delete => { Operation::Q =>
|
190
|
+
:delete => { Operation::Q => filter, Operation::LIMIT => value },
|
176
191
|
:db_name => collection.database.name,
|
177
192
|
:coll_name => collection.name,
|
178
193
|
:write_concern => collection.write_concern
|
@@ -183,13 +198,14 @@ module Mongo
|
|
183
198
|
def update(spec, multi, opts)
|
184
199
|
write_with_retry do
|
185
200
|
Operation::Write::Update.new(
|
186
|
-
:update => { Operation::Q =>
|
201
|
+
:update => { Operation::Q => filter,
|
187
202
|
Operation::U => spec,
|
188
203
|
Operation::MULTI => multi,
|
189
204
|
Operation::UPSERT => !!opts[:upsert] },
|
190
205
|
:db_name => collection.database.name,
|
191
206
|
:coll_name => collection.name,
|
192
|
-
:write_concern => collection.write_concern
|
207
|
+
:write_concern => collection.write_concern,
|
208
|
+
:bypass_document_validation => !!opts[:bypass_document_validation]
|
193
209
|
).execute(next_primary.context)
|
194
210
|
end
|
195
211
|
end
|
data/lib/mongo/cursor.rb
CHANGED
@@ -12,6 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'mongo/cursor/builder'
|
16
|
+
|
15
17
|
module Mongo
|
16
18
|
|
17
19
|
# Client-side representation of an iterator over a query result set on
|
@@ -35,6 +37,9 @@ module Mongo
|
|
35
37
|
def_delegators :@view, :collection, :limit
|
36
38
|
def_delegators :collection, :client, :database
|
37
39
|
|
40
|
+
# @return [ Collection::View ] view The collection view.
|
41
|
+
attr_reader :view
|
42
|
+
|
38
43
|
# Creates a +Cursor+ object.
|
39
44
|
#
|
40
45
|
# @example Instantiate the cursor.
|
@@ -82,12 +87,71 @@ module Mongo
|
|
82
87
|
end
|
83
88
|
end
|
84
89
|
|
85
|
-
|
86
|
-
|
90
|
+
# Get the batch size.
|
91
|
+
#
|
92
|
+
# @example Get the batch size.
|
93
|
+
# cursor.batch_size
|
94
|
+
#
|
95
|
+
# @return [ Integer ] The batch size.
|
96
|
+
#
|
97
|
+
# @since 2.2.0
|
87
98
|
def batch_size
|
88
99
|
@view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit
|
89
100
|
end
|
90
101
|
|
102
|
+
# Is the cursor closed?
|
103
|
+
#
|
104
|
+
# @example Is the cursor closed?
|
105
|
+
# cursor.closed?
|
106
|
+
#
|
107
|
+
# @return [ true, false ] If the cursor is closed.
|
108
|
+
#
|
109
|
+
# @since 2.2.0
|
110
|
+
def closed?
|
111
|
+
!more?
|
112
|
+
end
|
113
|
+
|
114
|
+
# Get the parsed collection name.
|
115
|
+
#
|
116
|
+
# @example Get the parsed collection name.
|
117
|
+
# cursor.coll_name
|
118
|
+
#
|
119
|
+
# @return [ String ] The collection name.
|
120
|
+
#
|
121
|
+
# @since 2.2.0
|
122
|
+
def collection_name
|
123
|
+
@coll_name || collection.name
|
124
|
+
end
|
125
|
+
|
126
|
+
# Get the cursor id.
|
127
|
+
#
|
128
|
+
# @example Get the cursor id.
|
129
|
+
# cursor.id
|
130
|
+
#
|
131
|
+
# @note A cursor id of 0 means the cursor was closed on the server.
|
132
|
+
#
|
133
|
+
# @return [ Integer ] The cursor id.
|
134
|
+
#
|
135
|
+
# @since 2.2.0
|
136
|
+
def id
|
137
|
+
@cursor_id
|
138
|
+
end
|
139
|
+
|
140
|
+
# Get the number of documents to return. Used on 3.0 and lower server
|
141
|
+
# versions.
|
142
|
+
#
|
143
|
+
# @example Get the number to return.
|
144
|
+
# cursor.to_return
|
145
|
+
#
|
146
|
+
# @return [ Integer ] The number of documents to return.
|
147
|
+
#
|
148
|
+
# @since 2.2.0
|
149
|
+
def to_return
|
150
|
+
use_limit? ? @remaining : (batch_size || 0)
|
151
|
+
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
91
155
|
def exhausted?
|
92
156
|
limited? ? @remaining <= 0 : false
|
93
157
|
end
|
@@ -97,16 +161,11 @@ module Mongo
|
|
97
161
|
end
|
98
162
|
|
99
163
|
def get_more_operation
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
:to_return => to_return,
|
106
|
-
:cursor_id => @cursor_id,
|
107
|
-
:db_name => database.name,
|
108
|
-
:coll_name => @coll_name || collection.name
|
109
|
-
}
|
164
|
+
if @server.features.find_command_enabled?
|
165
|
+
Operation::Commands::GetMore.new(Builder::GetMoreCommand.new(self).specification)
|
166
|
+
else
|
167
|
+
Operation::Read::GetMore.new(Builder::OpGetMore.new(self).specification)
|
168
|
+
end
|
110
169
|
end
|
111
170
|
|
112
171
|
def kill_cursors
|
@@ -114,15 +173,11 @@ module Mongo
|
|
114
173
|
end
|
115
174
|
|
116
175
|
def kill_cursors_operation
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
:coll_name => @coll_name || collection.name,
|
123
|
-
:db_name => database.name,
|
124
|
-
:cursor_ids => [ @cursor_id ]
|
125
|
-
}
|
176
|
+
if @server.features.find_command_enabled?
|
177
|
+
Operation::Commands::Command.new(Builder::KillCursorsCommand.new(self).specification)
|
178
|
+
else
|
179
|
+
Operation::KillCursors.new(Builder::OpKillCursors.new(self).specification)
|
180
|
+
end
|
126
181
|
end
|
127
182
|
|
128
183
|
def limited?
|
@@ -140,10 +195,6 @@ module Mongo
|
|
140
195
|
result.documents
|
141
196
|
end
|
142
197
|
|
143
|
-
def to_return
|
144
|
-
use_limit? ? @remaining : (batch_size || 0)
|
145
|
-
end
|
146
|
-
|
147
198
|
def use_limit?
|
148
199
|
limited? && batch_size >= @remaining
|
149
200
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/cursor/builder/op_get_more'
|
16
|
+
require 'mongo/cursor/builder/op_kill_cursors'
|
17
|
+
require 'mongo/cursor/builder/get_more_command'
|
18
|
+
require 'mongo/cursor/builder/kill_cursors_command'
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Generates a specification for a get more command.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class GetMoreCommand
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :batch_size, :collection_name, :database, :view
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# GetMoreCommand.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# get_more_command.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The spec.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ selector: get_more_command, db_name: database.name }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def get_more_command
|
57
|
+
command = { :getMore => cursor.id, :collection => collection_name }
|
58
|
+
command[:batchSize] = batch_size if batch_size
|
59
|
+
# If the max_await_time_ms option is set, then we set maxTimeMS on
|
60
|
+
# the get more command.
|
61
|
+
if view.respond_to?(:max_await_time_ms)
|
62
|
+
if view.max_await_time_ms && view.options[:await_data]
|
63
|
+
command[:maxTimeMS] = view.max_await_time_ms
|
64
|
+
end
|
65
|
+
end
|
66
|
+
command
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Generates a specification for a kill cursors command.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class KillCursorsCommand
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# KillCursorsCommand.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# kill_cursors_command.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The spec.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ selector: kill_cursors_command, db_name: database.name }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def kill_cursors_command
|
57
|
+
{ :killCursors => collection_name, :cursors => [ cursor.id ] }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Encapsulates behaviour around generating an OP_GET_MORE specification.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class OpGetMore
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database, :to_return
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# OpGetMore.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# op_get_more.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The specification.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{
|
52
|
+
:to_return => to_return,
|
53
|
+
:cursor_id => cursor.id,
|
54
|
+
:db_name => database.name,
|
55
|
+
:coll_name => collection_name
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Encapsulates behaviour around generating an OP_KILL_CURSORS specification.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class OpKillCursors
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# OpKillCursors.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# op_kill_cursors.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The specification.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ :coll_name => collection_name, :db_name => database.name, :cursor_ids => [ cursor.id ] }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|