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
@@ -1,78 +0,0 @@
|
|
1
|
-
# Copyright (C) 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
|
-
# A command that uses OP_MSG, with the document as payload type 0.
|
19
|
-
#
|
20
|
-
# @since 2.5.0
|
21
|
-
module UsesCommandOpMsg
|
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 apply_cluster_time!(selector, server)
|
32
|
-
if !server.standalone?
|
33
|
-
cluster_time = [ server.cluster_time, (session && session.cluster_time) ].max_by do |doc|
|
34
|
-
(doc && doc[Cluster::CLUSTER_TIME]) || ZERO_TIMESTAMP
|
35
|
-
end
|
36
|
-
|
37
|
-
if cluster_time && (cluster_time[Cluster::CLUSTER_TIME] > ZERO_TIMESTAMP)
|
38
|
-
selector[CLUSTER_TIME] = cluster_time
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def apply_session_id!(selector)
|
44
|
-
session.add_id!(selector) if session && !unacknowledged_write?
|
45
|
-
end
|
46
|
-
|
47
|
-
def unacknowledged_write?
|
48
|
-
write_concern && write_concern.get_last_error.nil?
|
49
|
-
end
|
50
|
-
|
51
|
-
def update_selector_for_session!(selector, server)
|
52
|
-
# the driver MUST ignore any implicit session if at the point it is sending a command
|
53
|
-
# to a specific server it turns out that that particular server doesn't support sessions after all
|
54
|
-
if server.features.sessions_enabled?
|
55
|
-
apply_cluster_time!(selector, server)
|
56
|
-
selector[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
57
|
-
if session
|
58
|
-
apply_session_id!(selector)
|
59
|
-
apply_causal_consistency!(selector, server)
|
60
|
-
end
|
61
|
-
elsif session && !session.implicit?
|
62
|
-
apply_cluster_time!(selector, server)
|
63
|
-
apply_session_id!(selector)
|
64
|
-
apply_causal_consistency!(selector, server)
|
65
|
-
selector[:txnNumber] = BSON::Int64.new(txn_num) if txn_num
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def command_op_msg(server, selector, options)
|
70
|
-
update_selector_for_session!(selector, server)
|
71
|
-
selector[Protocol::Msg::DATABASE_IDENTIFIER] = db_name
|
72
|
-
selector[READ_PREFERENCE] = read.to_doc if read
|
73
|
-
flags = unacknowledged_write? ? [:more_to_come] : [:none]
|
74
|
-
Protocol::Msg.new(flags, options, selector)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
require 'mongo/operation/write/write_command_enabled'
|
16
|
-
require 'mongo/operation/write/idable'
|
17
|
-
require 'mongo/operation/write/gle'
|
18
|
-
require 'mongo/operation/write/bulk'
|
19
|
-
require 'mongo/operation/write/delete'
|
20
|
-
require 'mongo/operation/write/insert'
|
21
|
-
require 'mongo/operation/write/update'
|
22
|
-
require 'mongo/operation/write/command'
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
require 'mongo/operation/write/bulk/mergable'
|
16
|
-
require 'mongo/operation/write/bulk/legacy_mergable'
|
17
|
-
require 'mongo/operation/write/bulk/bulkable'
|
18
|
-
require 'mongo/operation/write/bulk/delete'
|
19
|
-
require 'mongo/operation/write/bulk/insert'
|
20
|
-
require 'mongo/operation/write/bulk/update'
|
@@ -1,82 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module Write
|
18
|
-
module Bulk
|
19
|
-
|
20
|
-
# Provides common behavior for bulk write operations.
|
21
|
-
# Note that #validate! is not called on operation results because they are merged
|
22
|
-
# at a higher level.
|
23
|
-
#
|
24
|
-
# @since 2.1.0
|
25
|
-
module Bulkable
|
26
|
-
|
27
|
-
# Execute the bulk operation.
|
28
|
-
#
|
29
|
-
# @example Execute the operation.
|
30
|
-
# operation.execute(server)
|
31
|
-
#
|
32
|
-
# @param [ Mongo::Server ] server The server to send this operation to.
|
33
|
-
#
|
34
|
-
# @return [ Result ] The operation result.
|
35
|
-
#
|
36
|
-
# @since 2.0.0
|
37
|
-
def execute(server)
|
38
|
-
result = execute_write_command(server)
|
39
|
-
server.update_cluster_time(result)
|
40
|
-
session.process(result) if session
|
41
|
-
result
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def execute_message(server)
|
47
|
-
replies = messages.map do |m|
|
48
|
-
server.with_connection do |connection|
|
49
|
-
result = self.class::LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
|
50
|
-
if stop_sending?(result)
|
51
|
-
return result
|
52
|
-
else
|
53
|
-
result.reply
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
self.class::LegacyResult.new(replies.compact.empty? ? nil : replies)
|
58
|
-
end
|
59
|
-
|
60
|
-
def stop_sending?(result)
|
61
|
-
ordered? && !result.successful?
|
62
|
-
end
|
63
|
-
|
64
|
-
def gle
|
65
|
-
wc = write_concern || WriteConcern.get(WriteConcern::DEFAULT)
|
66
|
-
gle_message = ( ordered? && wc.get_last_error.nil? ) ?
|
67
|
-
WriteConcern.get(WriteConcern::DEFAULT).get_last_error :
|
68
|
-
wc.get_last_error
|
69
|
-
if gle_message
|
70
|
-
Protocol::Query.new(
|
71
|
-
db_name,
|
72
|
-
Database::COMMAND,
|
73
|
-
gle_message,
|
74
|
-
options.merge(limit: -1)
|
75
|
-
)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
require 'mongo/operation/write/bulk/delete/result'
|
16
|
-
|
17
|
-
module Mongo
|
18
|
-
module Operation
|
19
|
-
module Write
|
20
|
-
module Bulk
|
21
|
-
|
22
|
-
# A MongoDB bulk delete operation.
|
23
|
-
#
|
24
|
-
# @note If a server with version >= 2.5.5 is selected, a write command
|
25
|
-
# operation will be created and sent instead.
|
26
|
-
#
|
27
|
-
# @example Create the delete operation.
|
28
|
-
# Write::Bulk::Delete.new({
|
29
|
-
# :deletes => [{ :q => { :foo => 1 }, :limit => 1 }],
|
30
|
-
# :db_name => 'test',
|
31
|
-
# :coll_name => 'test_coll',
|
32
|
-
# :write_concern => write_concern
|
33
|
-
# })
|
34
|
-
#
|
35
|
-
# Initialization:
|
36
|
-
# param [ Hash ] spec The specifications for the delete.
|
37
|
-
#
|
38
|
-
# option spec :deletes [ Array ] The delete documents.
|
39
|
-
# option spec :db_name [ String ] The name of the database on which
|
40
|
-
# the delete should be executed.
|
41
|
-
# option spec :coll_name [ String ] The name of the collection on which
|
42
|
-
# the delete should be executed.
|
43
|
-
# option spec :write_concern [ Mongo::WriteConcern ] The write concern
|
44
|
-
# for this operation.
|
45
|
-
# option spec :ordered [ true, false ] Whether the operations should be
|
46
|
-
# executed in order.
|
47
|
-
# option spec :options [Hash] Options for the command, if it ends up being a
|
48
|
-
# write command.
|
49
|
-
#
|
50
|
-
# @since 2.0.0
|
51
|
-
class Delete
|
52
|
-
include Bulkable
|
53
|
-
include Specifiable
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def execute_write_command(server)
|
58
|
-
Result.new(Command::Delete.new(spec).execute(server))
|
59
|
-
end
|
60
|
-
|
61
|
-
def messages
|
62
|
-
deletes.collect do |del|
|
63
|
-
opts = ( del[Operation::LIMIT] || 0 ) <= 0 ? {} : { :flags => [ :single_remove ] }
|
64
|
-
Protocol::Delete.new(db_name, coll_name, del[Operation::Q], opts)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module Write
|
18
|
-
module Bulk
|
19
|
-
class Delete
|
20
|
-
|
21
|
-
# Defines common r_removed aggreation behaviour.
|
22
|
-
#
|
23
|
-
# @since 2.2.0
|
24
|
-
module Aggregatable
|
25
|
-
|
26
|
-
# Gets the number of documents deleted.
|
27
|
-
#
|
28
|
-
# @example Get the deleted count.
|
29
|
-
# result.n_removed
|
30
|
-
#
|
31
|
-
# @return [ Integer ] The number of documents deleted.
|
32
|
-
#
|
33
|
-
# @since 2.0.0
|
34
|
-
def n_removed
|
35
|
-
return 0 unless acknowledged?
|
36
|
-
@replies.reduce(0) do |n, reply|
|
37
|
-
if reply.documents.first[Result::N]
|
38
|
-
n += reply.documents.first[Result::N]
|
39
|
-
else
|
40
|
-
n
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Defines custom behaviour of results when deleting.
|
47
|
-
#
|
48
|
-
# @since 2.0.0
|
49
|
-
class Result < Operation::Result
|
50
|
-
include Mergable
|
51
|
-
include Aggregatable
|
52
|
-
|
53
|
-
# The aggregate number of deleted docs reported in the replies.
|
54
|
-
#
|
55
|
-
# @since 2.0.0
|
56
|
-
REMOVED = 'nRemoved'.freeze
|
57
|
-
end
|
58
|
-
|
59
|
-
# Defines custom behaviour of results when deleting.
|
60
|
-
# For server versions < 2.5.5 (that don't use write commands).
|
61
|
-
#
|
62
|
-
# @since 2.0.0
|
63
|
-
class LegacyResult < Operation::Result
|
64
|
-
include LegacyMergable
|
65
|
-
include Aggregatable
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
require 'mongo/operation/write/bulk/insert/result'
|
16
|
-
|
17
|
-
module Mongo
|
18
|
-
module Operation
|
19
|
-
module Write
|
20
|
-
module Bulk
|
21
|
-
|
22
|
-
# A MongoDB bulk insert operation.
|
23
|
-
# This class should only be used by the Bulk API.
|
24
|
-
#
|
25
|
-
# @note If a server with version >= 2.5.5 is being used, a write command
|
26
|
-
# operation will be created and sent instead.
|
27
|
-
#
|
28
|
-
# @example Create the new insert operation.
|
29
|
-
# Write::BulkInsert.new({
|
30
|
-
# :documents => [{ :foo => 1 }],
|
31
|
-
# :db_name => 'test',
|
32
|
-
# :coll_name => 'test_coll',
|
33
|
-
# :write_concern => write_concern,
|
34
|
-
# :ordered => false
|
35
|
-
# })
|
36
|
-
#
|
37
|
-
# Initialization:
|
38
|
-
# param [ Hash ] spec The specifications for the insert.
|
39
|
-
#
|
40
|
-
# option spec :documents [ Array ] The documents to insert.
|
41
|
-
# option spec :db_name [ String ] The name of the database.
|
42
|
-
# option spec :coll_name [ String ] The name of the collection.
|
43
|
-
# option spec :write_concern [ Mongo::WriteConcern ] The write concern.
|
44
|
-
# option spec :ordered [ true, false ] Whether the operations should be
|
45
|
-
# executed in order.
|
46
|
-
# option spec :options [ Hash ] Options for the command, if it ends up being a
|
47
|
-
# write command.
|
48
|
-
#
|
49
|
-
# @since 2.0.0
|
50
|
-
class Insert
|
51
|
-
include Bulkable
|
52
|
-
include Specifiable
|
53
|
-
include Idable
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def execute_write_command(server)
|
58
|
-
command_spec = spec.merge(:documents => ensure_ids(documents))
|
59
|
-
Result.new(Command::Insert.new(command_spec).execute(server), @ids)
|
60
|
-
end
|
61
|
-
|
62
|
-
def execute_message(server)
|
63
|
-
replies = []
|
64
|
-
messages.map do |m|
|
65
|
-
server.with_connection do |connection|
|
66
|
-
result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id), @ids)
|
67
|
-
replies << result.reply
|
68
|
-
if stop_sending?(result)
|
69
|
-
return LegacyResult.new(replies, @ids)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
LegacyResult.new(replies.compact.empty? ? nil : replies, @ids)
|
74
|
-
end
|
75
|
-
|
76
|
-
def messages
|
77
|
-
if ordered? || gle
|
78
|
-
documents.collect do |doc|
|
79
|
-
Protocol::Insert.new(db_name, coll_name, ensure_ids([ doc ]), spec)
|
80
|
-
end
|
81
|
-
else
|
82
|
-
[
|
83
|
-
Protocol::Insert.new(
|
84
|
-
db_name,
|
85
|
-
coll_name,
|
86
|
-
ensure_ids(documents),
|
87
|
-
spec.merge({ :flags => [:continue_on_error] })
|
88
|
-
)
|
89
|
-
]
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|