mongo 2.5.1 → 2.5.2
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 +3 -2
- data.tar.gz.sig +0 -0
- data/Rakefile +1 -1
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/bulk_write.rb +14 -19
- data/lib/mongo/cluster.rb +4 -2
- data/lib/mongo/cluster/app_metadata.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/collection/view.rb +2 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +4 -4
- data/lib/mongo/collection/view/map_reduce.rb +3 -3
- data/lib/mongo/collection/view/readable.rb +26 -20
- data/lib/mongo/collection/view/writable.rb +12 -12
- data/lib/mongo/cursor.rb +4 -7
- data/lib/mongo/database.rb +2 -2
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/operation.rb +38 -24
- data/lib/mongo/operation/aggregate.rb +53 -0
- data/lib/mongo/operation/aggregate/command.rb +59 -0
- data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
- data/lib/mongo/operation/aggregate/result.rb +87 -0
- data/lib/mongo/operation/collections_info.rb +62 -0
- data/lib/mongo/operation/collections_info/result.rb +39 -0
- data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
- data/lib/mongo/operation/command/command.rb +38 -0
- data/lib/mongo/operation/command/op_msg.rb +53 -0
- data/lib/mongo/operation/count.rb +48 -0
- data/lib/mongo/operation/count/command.rb +38 -0
- data/lib/mongo/operation/count/op_msg.rb +38 -0
- data/lib/mongo/operation/create.rb +48 -0
- data/lib/mongo/operation/create/command.rb +38 -0
- data/lib/mongo/operation/create/op_msg.rb +37 -0
- data/lib/mongo/operation/create_index.rb +48 -0
- data/lib/mongo/operation/create_index/command.rb +42 -0
- data/lib/mongo/operation/create_index/op_msg.rb +41 -0
- data/lib/mongo/operation/create_user.rb +48 -0
- data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
- data/lib/mongo/operation/create_user/op_msg.rb +41 -0
- data/lib/mongo/operation/delete.rb +38 -0
- data/lib/mongo/operation/delete/bulk_result.rb +46 -0
- data/lib/mongo/operation/delete/command.rb +59 -0
- data/lib/mongo/operation/delete/legacy.rb +69 -0
- data/lib/mongo/operation/delete/op_msg.rb +60 -0
- data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
- data/lib/mongo/operation/distinct.rb +48 -0
- data/lib/mongo/operation/distinct/command.rb +38 -0
- data/lib/mongo/operation/distinct/op_msg.rb +38 -0
- data/lib/mongo/operation/drop.rb +48 -0
- data/lib/mongo/operation/drop/command.rb +38 -0
- data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
- data/lib/mongo/operation/drop_database.rb +48 -0
- data/lib/mongo/operation/drop_database/command.rb +38 -0
- data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
- data/lib/mongo/operation/drop_index.rb +48 -0
- data/lib/mongo/operation/drop_index/command.rb +42 -0
- data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
- data/lib/mongo/operation/explain.rb +52 -0
- data/lib/mongo/operation/explain/command.rb +54 -0
- data/lib/mongo/operation/explain/legacy.rb +53 -0
- data/lib/mongo/operation/explain/op_msg.rb +54 -0
- data/lib/mongo/operation/explain/result.rb +50 -0
- data/lib/mongo/operation/find.rb +52 -0
- data/lib/mongo/operation/find/command.rb +54 -0
- data/lib/mongo/operation/find/legacy.rb +55 -0
- data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
- data/lib/mongo/operation/find/op_msg.rb +59 -0
- data/lib/mongo/operation/find/result.rb +60 -0
- data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
- data/lib/mongo/operation/get_more/command.rb +54 -0
- data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
- data/lib/mongo/operation/get_more/op_msg.rb +58 -0
- data/lib/mongo/operation/get_more/result.rb +60 -0
- data/lib/mongo/operation/indexes.rb +52 -0
- data/lib/mongo/operation/indexes/command.rb +54 -0
- data/lib/mongo/operation/indexes/legacy.rb +57 -0
- data/lib/mongo/operation/indexes/op_msg.rb +54 -0
- data/lib/mongo/operation/indexes/result.rb +97 -0
- data/lib/mongo/operation/insert.rb +40 -0
- data/lib/mongo/operation/insert/bulk_result.rb +70 -0
- data/lib/mongo/operation/insert/command.rb +65 -0
- data/lib/mongo/operation/insert/legacy.rb +72 -0
- data/lib/mongo/operation/insert/op_msg.rb +61 -0
- data/lib/mongo/operation/insert/result.rb +64 -0
- data/lib/mongo/operation/kill_cursors.rb +25 -14
- data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
- data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
- data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
- data/lib/mongo/operation/list_collections.rb +49 -0
- data/lib/mongo/operation/list_collections/command.rb +60 -0
- data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
- data/lib/mongo/operation/list_collections/result.rb +92 -0
- data/lib/mongo/operation/map_reduce.rb +49 -0
- data/lib/mongo/operation/map_reduce/command.rb +55 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
- data/lib/mongo/operation/map_reduce/result.rb +129 -0
- data/lib/mongo/operation/parallel_scan.rb +49 -0
- data/lib/mongo/operation/parallel_scan/command.rb +67 -0
- data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
- data/lib/mongo/operation/parallel_scan/result.rb +61 -0
- data/lib/mongo/operation/remove_user.rb +48 -0
- data/lib/mongo/operation/remove_user/command.rb +42 -0
- data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
- data/lib/mongo/operation/result.rb +3 -1
- data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
- data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
- data/lib/mongo/operation/shared/executable.rb +45 -0
- data/lib/mongo/operation/shared/idable.rb +64 -0
- data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
- data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
- data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
- data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
- data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
- data/lib/mongo/operation/shared/write.rb +81 -0
- data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
- data/lib/mongo/operation/update.rb +38 -0
- data/lib/mongo/operation/update/bulk_result.rb +126 -0
- data/lib/mongo/operation/update/command.rb +60 -0
- data/lib/mongo/operation/update/legacy.rb +80 -0
- data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
- data/lib/mongo/operation/update/op_msg.rb +60 -0
- data/lib/mongo/operation/update/result.rb +102 -0
- data/lib/mongo/operation/update_user.rb +48 -0
- data/lib/mongo/operation/update_user/command.rb +41 -0
- data/lib/mongo/operation/update_user/op_msg.rb +41 -0
- data/lib/mongo/operation/users_info.rb +49 -0
- data/lib/mongo/operation/users_info/command.rb +58 -0
- data/lib/mongo/operation/users_info/op_msg.rb +57 -0
- data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
- data/lib/mongo/server.rb +3 -5
- data/lib/mongo/server/connectable.rb +3 -3
- data/lib/mongo/server/connection.rb +14 -0
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +3 -12
- data/lib/mongo/session.rb +13 -1
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/client_spec.rb +15 -22
- data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
- data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
- data/spec/mongo/cluster_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection_spec.rb +105 -14
- data/spec/mongo/cursor_spec.rb +11 -11
- data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
- data/spec/mongo/max_staleness_spec.rb +3 -1
- data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
- data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
- data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
- data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
- data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/delete/command_spec.rb +111 -0
- data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
- data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
- data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
- data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
- data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
- data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
- data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
- data/spec/mongo/operation/insert/command_spec.rb +110 -0
- data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
- data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
- data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
- data/spec/mongo/operation/limited_spec.rb +3 -3
- data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
- data/spec/mongo/operation/read_preference_spec.rb +2 -2
- data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/update/command_spec.rb +114 -0
- data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
- data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
- data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
- data/spec/mongo/server/connection_spec.rb +0 -22
- data/spec/mongo/server_selector_spec.rb +55 -0
- data/spec/mongo/server_spec.rb +0 -42
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
- data/spec/mongo/uri_spec.rb +2 -2
- data/spec/support/gridfs_tests/delete.yml +4 -38
- data/spec/support/gridfs_tests/download.yml +12 -30
- data/spec/support/server_selection.rb +1 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
- data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
- data/spec/support/shared/session.rb +46 -5
- metadata +174 -116
- metadata.gz.sig +1 -2
- data/lib/mongo/operation/commands.rb +0 -31
- data/lib/mongo/operation/commands/aggregate.rb +0 -63
- data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
- data/lib/mongo/operation/commands/collections_info.rb +0 -71
- data/lib/mongo/operation/commands/create.rb +0 -49
- data/lib/mongo/operation/commands/drop.rb +0 -49
- data/lib/mongo/operation/commands/drop_database.rb +0 -49
- data/lib/mongo/operation/commands/explain.rb +0 -27
- data/lib/mongo/operation/commands/explain/result.rb +0 -52
- data/lib/mongo/operation/commands/find/result.rb +0 -62
- data/lib/mongo/operation/commands/get_more.rb +0 -27
- data/lib/mongo/operation/commands/get_more/result.rb +0 -62
- data/lib/mongo/operation/commands/indexes.rb +0 -73
- data/lib/mongo/operation/commands/list_collections.rb +0 -48
- data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
- data/lib/mongo/operation/commands/list_indexes.rb +0 -48
- data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
- data/lib/mongo/operation/commands/map_reduce.rb +0 -65
- data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
- data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
- data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
- data/lib/mongo/operation/commands/users_info.rb +0 -52
- data/lib/mongo/operation/read.rb +0 -16
- data/lib/mongo/operation/read/get_more.rb +0 -52
- data/lib/mongo/operation/read/query.rb +0 -55
- data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
- data/lib/mongo/operation/write.rb +0 -22
- data/lib/mongo/operation/write/bulk.rb +0 -20
- data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
- data/lib/mongo/operation/write/bulk/delete.rb +0 -71
- data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
- data/lib/mongo/operation/write/bulk/insert.rb +0 -96
- data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
- data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
- data/lib/mongo/operation/write/bulk/update.rb +0 -81
- data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
- data/lib/mongo/operation/write/command.rb +0 -23
- data/lib/mongo/operation/write/command/create_index.rb +0 -79
- data/lib/mongo/operation/write/command/create_user.rb +0 -61
- data/lib/mongo/operation/write/command/delete.rb +0 -79
- data/lib/mongo/operation/write/command/drop_index.rb +0 -80
- data/lib/mongo/operation/write/command/insert.rb +0 -69
- data/lib/mongo/operation/write/command/remove_user.rb +0 -60
- data/lib/mongo/operation/write/command/update.rb +0 -77
- data/lib/mongo/operation/write/command/update_user.rb +0 -61
- data/lib/mongo/operation/write/command/writable.rb +0 -70
- data/lib/mongo/operation/write/delete.rb +0 -75
- data/lib/mongo/operation/write/gle.rb +0 -49
- data/lib/mongo/operation/write/idable.rb +0 -63
- data/lib/mongo/operation/write/insert.rb +0 -74
- data/lib/mongo/operation/write/insert/result.rb +0 -62
- data/lib/mongo/operation/write/update.rb +0 -91
- data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (C) 2018 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
|
+
module Operation
|
17
|
+
|
18
|
+
# Shared behavior of operations that require its documents to each have an id.
|
19
|
+
#
|
20
|
+
# @since 2.5.2
|
21
|
+
module Idable
|
22
|
+
|
23
|
+
def documents
|
24
|
+
@documents ||= ensure_ids(super)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# The option for a custom id generator.
|
30
|
+
#
|
31
|
+
# @since 2.2.0
|
32
|
+
ID_GENERATOR = :id_generator.freeze
|
33
|
+
|
34
|
+
# Get the id generator.
|
35
|
+
#
|
36
|
+
# @example Get the id generator.
|
37
|
+
# idable.id_generator
|
38
|
+
#
|
39
|
+
# @return [ IdGenerator ] The default or custom id generator.
|
40
|
+
#
|
41
|
+
# @since 2.2.0
|
42
|
+
def id_generator
|
43
|
+
@id_generator ||= (spec[ID_GENERATOR] || Operation::ObjectIdGenerator.new)
|
44
|
+
end
|
45
|
+
|
46
|
+
def id(doc)
|
47
|
+
doc.respond_to?(:id) ? doc.id : (doc['_id'] || doc[:_id])
|
48
|
+
end
|
49
|
+
|
50
|
+
def has_id?(doc)
|
51
|
+
!!id(doc)
|
52
|
+
end
|
53
|
+
|
54
|
+
def ensure_ids(documents)
|
55
|
+
@ids = []
|
56
|
+
documents.collect do |doc|
|
57
|
+
doc_with_id = has_id?(doc) ? doc : doc.merge(_id: id_generator.generate)
|
58
|
+
@ids << id(doc_with_id)
|
59
|
+
doc_with_id
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C)
|
1
|
+
# Copyright (C) 2015-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,13 +14,16 @@
|
|
14
14
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
|
-
module Commands
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
# Shared behavior of operations that require its documents to each have an id.
|
19
|
+
#
|
20
|
+
# @since 2.5.2
|
21
|
+
module Limited
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def options(server = nil)
|
26
|
+
super.merge(limit: -1)
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2015 MongoDB, Inc.
|
1
|
+
# Copyright (C) 2015-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -20,7 +20,7 @@ module Mongo
|
|
20
20
|
# @since 2.2.0
|
21
21
|
class ObjectIdGenerator
|
22
22
|
|
23
|
-
# Generate a
|
23
|
+
# Generate a new id.
|
24
24
|
#
|
25
25
|
# @example Generate the id.
|
26
26
|
# object_id_generator.generate
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C)
|
1
|
+
# Copyright (C) 2015-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -15,35 +15,30 @@
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
17
|
|
18
|
-
#
|
19
|
-
# that need to take read preference into account.
|
18
|
+
# Shared behavior of operations that support read preference.
|
20
19
|
#
|
21
|
-
# @since 2.
|
22
|
-
module
|
23
|
-
|
20
|
+
# @since 2.5.2
|
21
|
+
module ReadPreferenceSupported
|
22
|
+
|
23
|
+
private
|
24
24
|
|
25
|
-
# The constant for slave ok flags.
|
26
|
-
#
|
27
|
-
# @since 2.0.6
|
28
25
|
SLAVE_OK = :slave_ok
|
29
26
|
|
30
|
-
|
27
|
+
def options(server)
|
28
|
+
update_options_for_slave_ok(super, server)
|
29
|
+
end
|
31
30
|
|
32
31
|
def update_selector_for_read_pref(sel, server)
|
33
32
|
if read && server.mongos? && read_pref = read.to_mongos
|
34
|
-
sel = sel[:$query] ? sel : {
|
33
|
+
sel = sel[:$query] ? sel : {:$query => sel}
|
35
34
|
sel.merge(:$readPreference => read_pref)
|
36
35
|
else
|
37
36
|
sel
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
41
|
-
def slave_ok?(server)
|
42
|
-
(server.cluster.single? && !server.mongos?) || (read && read.slave_ok?)
|
43
|
-
end
|
44
|
-
|
45
40
|
def update_options_for_slave_ok(opts, server)
|
46
|
-
if
|
41
|
+
if (server.cluster.single? && !server.mongos?) || (read && read.slave_ok?)
|
47
42
|
opts.dup.tap do |o|
|
48
43
|
(o[:flags] ||= []) << SLAVE_OK
|
49
44
|
end
|
@@ -52,14 +47,9 @@ module Mongo
|
|
52
47
|
end
|
53
48
|
end
|
54
49
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
else
|
59
|
-
sel = update_selector_for_read_pref(selector, server)
|
60
|
-
opts = update_options_for_slave_ok(options, server)
|
61
|
-
Protocol::Query.new(db_name, query_coll, sel, opts)
|
62
|
-
end
|
50
|
+
def command(server)
|
51
|
+
sel = super
|
52
|
+
update_selector_for_read_pref(sel, server)
|
63
53
|
end
|
64
54
|
end
|
65
55
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Copyright (C) 2014-2018 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
|
+
module Operation
|
17
|
+
class Result
|
18
|
+
|
19
|
+
# Defines custom behaviour of bulk write results
|
20
|
+
#
|
21
|
+
# @since 2.0.0
|
22
|
+
module Aggregatable
|
23
|
+
|
24
|
+
# Aggregate the write errors returned from this result.
|
25
|
+
#
|
26
|
+
# @example Aggregate the write errors.
|
27
|
+
# result.aggregate_write_errors(0)
|
28
|
+
#
|
29
|
+
# @param [ Integer ] count The number of documents already executed.
|
30
|
+
#
|
31
|
+
# @return [ Array ] The aggregate write errors.
|
32
|
+
#
|
33
|
+
# @since 2.0.0
|
34
|
+
def aggregate_write_errors(count)
|
35
|
+
return unless @replies
|
36
|
+
@replies.reduce(nil) do |errors, reply|
|
37
|
+
if write_errors = reply.documents.first[Error::WRITE_ERRORS]
|
38
|
+
wes = write_errors.collect do |we|
|
39
|
+
we.merge!('index' => count + we['index'])
|
40
|
+
end
|
41
|
+
(errors || []) << wes if wes
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Aggregate the write concern errors returned from this result.
|
47
|
+
#
|
48
|
+
# @example Aggregate the write concern errors.
|
49
|
+
# result.aggregate_write_concern_errors(100)
|
50
|
+
#
|
51
|
+
# @param [ Integer ] count The number of documents already executed.
|
52
|
+
#
|
53
|
+
# @return [ Array ] The aggregate write concern errors.
|
54
|
+
#
|
55
|
+
# @since 2.0.0
|
56
|
+
def aggregate_write_concern_errors(count)
|
57
|
+
return unless @replies
|
58
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, _)|
|
59
|
+
if write_concern_errors = reply.documents.first[Error::WRITE_CONCERN_ERRORS]
|
60
|
+
(errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
|
61
|
+
wce.merge!('index' => count + wce['index'])
|
62
|
+
(errs || []) << write_concern_error
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Copyright (C) 2015-2017 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
|
+
module Operation
|
17
|
+
|
18
|
+
# Shared behavior of operations that support a session.
|
19
|
+
#
|
20
|
+
# @since 2.5.2
|
21
|
+
module SessionsSupported
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
ZERO_TIMESTAMP = BSON::Timestamp.new(0, 0)
|
26
|
+
|
27
|
+
READ_PREFERENCE = '$readPreference'.freeze
|
28
|
+
|
29
|
+
def apply_causal_consistency!(selector, server); end
|
30
|
+
|
31
|
+
def flags
|
32
|
+
acknowledged_write? ? [:none] : [:more_to_come]
|
33
|
+
end
|
34
|
+
|
35
|
+
def apply_cluster_time!(selector, server)
|
36
|
+
if !server.standalone?
|
37
|
+
cluster_time = [server.cluster_time, (session && session.cluster_time)].max_by do |doc|
|
38
|
+
(doc && doc[Cluster::CLUSTER_TIME]) || ZERO_TIMESTAMP
|
39
|
+
end
|
40
|
+
|
41
|
+
if cluster_time && (cluster_time[Cluster::CLUSTER_TIME] > ZERO_TIMESTAMP)
|
42
|
+
selector[CLUSTER_TIME] = cluster_time
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_write_concern!(sel)
|
48
|
+
if write_concern
|
49
|
+
sel[:writeConcern] = write_concern.options
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def apply_session_id!(selector)
|
54
|
+
session.add_id!(selector)
|
55
|
+
end
|
56
|
+
|
57
|
+
def command(server)
|
58
|
+
sel = selector(server)
|
59
|
+
sel[:writeConcern] = write_concern.options if write_concern
|
60
|
+
sel[Protocol::Msg::DATABASE_IDENTIFIER] = db_name
|
61
|
+
sel[READ_PREFERENCE] = read.to_doc if read
|
62
|
+
if server.features.sessions_enabled?
|
63
|
+
apply_cluster_time!(sel, server)
|
64
|
+
if acknowledged_write? && session
|
65
|
+
sel[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
66
|
+
apply_session_id!(sel)
|
67
|
+
apply_causal_consistency!(sel, server)
|
68
|
+
end
|
69
|
+
elsif session && session.explicit?
|
70
|
+
apply_cluster_time!(sel, server)
|
71
|
+
sel[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
72
|
+
apply_session_id!(sel)
|
73
|
+
apply_causal_consistency!(sel, server)
|
74
|
+
end
|
75
|
+
sel
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -333,7 +333,7 @@ module Mongo
|
|
333
333
|
# @return [ Hash ] The options.
|
334
334
|
#
|
335
335
|
# @since 2.0.0
|
336
|
-
def options
|
336
|
+
def options(server = nil)
|
337
337
|
spec[OPTIONS] || {}
|
338
338
|
end
|
339
339
|
|
@@ -382,7 +382,7 @@ module Mongo
|
|
382
382
|
#
|
383
383
|
# @since 2.4.0
|
384
384
|
def collation
|
385
|
-
|
385
|
+
send(self.class::IDENTIFIER).first[COLLATION]
|
386
386
|
end
|
387
387
|
|
388
388
|
# The selector for from the specification.
|
@@ -393,7 +393,7 @@ module Mongo
|
|
393
393
|
# @return [ Hash ] The selector spec.
|
394
394
|
#
|
395
395
|
# @since 2.0.0
|
396
|
-
def selector
|
396
|
+
def selector(server = nil)
|
397
397
|
spec[SELECTOR]
|
398
398
|
end
|
399
399
|
|
@@ -526,6 +526,42 @@ module Mongo
|
|
526
526
|
def txn_num
|
527
527
|
@spec[:txn_num]
|
528
528
|
end
|
529
|
+
|
530
|
+
# The command.
|
531
|
+
#
|
532
|
+
# @example Get the command.
|
533
|
+
# specifiable.command
|
534
|
+
#
|
535
|
+
# @return [ Hash ] The command.
|
536
|
+
#
|
537
|
+
# @since 2.5.2
|
538
|
+
def command(server = nil)
|
539
|
+
selector(server)
|
540
|
+
end
|
541
|
+
|
542
|
+
# The array filters.
|
543
|
+
#
|
544
|
+
# @example Get the array filters.
|
545
|
+
# specifiable.array_filters
|
546
|
+
#
|
547
|
+
# @return [ Hash ] The array filters.
|
548
|
+
#
|
549
|
+
# @since 2.5.2
|
550
|
+
def array_filters
|
551
|
+
selector[Operation::ARRAY_FILTERS] if selector
|
552
|
+
end
|
553
|
+
|
554
|
+
# Does the operation have an acknowledged write concern.
|
555
|
+
#
|
556
|
+
# @example Determine whether the operation has an acknoweldged write.
|
557
|
+
# specifiable.array_filters
|
558
|
+
#
|
559
|
+
# @return [ Hash ] The array filters.
|
560
|
+
#
|
561
|
+
# @since 2.5.2
|
562
|
+
def acknowledged_write?
|
563
|
+
write_concern.nil? || write_concern.acknowledged?
|
564
|
+
end
|
529
565
|
end
|
530
566
|
end
|
531
567
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# Copyright (C) 2018 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
|
+
module Operation
|
17
|
+
|
18
|
+
# Shared behavior of operations that write (update, insert, delete).
|
19
|
+
#
|
20
|
+
# @since 2.5.2
|
21
|
+
module Write
|
22
|
+
|
23
|
+
# Execute the operation.
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# operation.execute(server)
|
27
|
+
#
|
28
|
+
# @param [ Mongo::Server ] server The server to send the operation to.
|
29
|
+
#
|
30
|
+
# @return [ Mongo::Operation::Result ] The operation result.
|
31
|
+
#
|
32
|
+
# @since 2.5.2
|
33
|
+
def execute(server)
|
34
|
+
validate!
|
35
|
+
result = if server.features.op_msg_enabled?
|
36
|
+
self.class::OpMsg.new(spec).execute(server)
|
37
|
+
elsif !acknowledged_write?
|
38
|
+
self.class::Legacy.new(spec).execute(server)
|
39
|
+
else
|
40
|
+
self.class::Command.new(spec).execute(server)
|
41
|
+
end
|
42
|
+
result.validate!
|
43
|
+
end
|
44
|
+
|
45
|
+
# Execute the bulk write operation.
|
46
|
+
#
|
47
|
+
# @example
|
48
|
+
# operation.bulk_execute(server)
|
49
|
+
#
|
50
|
+
# @param [ Mongo::Server ] server The server to send the operation to.
|
51
|
+
#
|
52
|
+
# @return [ Mongo::Operation::Delete::BulkResult,
|
53
|
+
# Mongo::Operation::Insert::BulkResult,
|
54
|
+
# Mongo::Operation::Update::BulkResult ] The bulk result.
|
55
|
+
#
|
56
|
+
# @since 2.5.2
|
57
|
+
def bulk_execute(server)
|
58
|
+
if server.features.op_msg_enabled?
|
59
|
+
self.class::OpMsg.new(spec).execute(server).bulk_result
|
60
|
+
else
|
61
|
+
self.class::Command.new(spec).execute(server).bulk_result
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def validate!
|
68
|
+
if !acknowledged_write?
|
69
|
+
if collation
|
70
|
+
raise Error::UnsupportedCollation.new(
|
71
|
+
Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE)
|
72
|
+
end
|
73
|
+
if array_filters
|
74
|
+
raise Error::UnsupportedArrayFilters.new(
|
75
|
+
Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|