mongo 2.1.0.beta → 2.1.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/Rakefile +2 -2
- data/lib/mongo.rb +2 -3
- data/lib/mongo/address.rb +7 -5
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/auth/ldap/conversation.rb +6 -2
- data/lib/mongo/auth/scram/conversation.rb +8 -2
- data/lib/mongo/auth/user/view.rb +21 -0
- data/lib/mongo/bulk_write.rb +155 -23
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +117 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/client.rb +7 -3
- data/lib/mongo/cluster.rb +3 -3
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/collection.rb +75 -4
- data/lib/mongo/collection/view.rb +1 -2
- data/lib/mongo/collection/view/aggregation.rb +13 -8
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +13 -4
- data/lib/mongo/collection/view/map_reduce.rb +22 -17
- data/lib/mongo/collection/view/readable.rb +121 -70
- data/lib/mongo/cursor.rb +5 -1
- data/lib/mongo/database.rb +3 -3
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error.rb +7 -0
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/fs_bucket.rb +441 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
- data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/operation.rb +3 -6
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
- data/lib/mongo/operation/commands/collections_info.rb +66 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
- data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
- data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands/users_info/result.rb +36 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query.rb +2 -21
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/specifiable.rb +24 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +5 -28
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +4 -32
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/protocol/delete.rb +68 -3
- data/lib/mongo/protocol/get_more.rb +54 -2
- data/lib/mongo/protocol/insert.rb +59 -1
- data/lib/mongo/protocol/kill_cursors.rb +53 -4
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +139 -65
- data/lib/mongo/protocol/reply.rb +69 -1
- data/lib/mongo/protocol/update.rb +70 -1
- data/lib/mongo/server/connection.rb +11 -3
- data/lib/mongo/server/description.rb +29 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/monitor.rb +2 -2
- data/lib/mongo/server_selector.rb +14 -10
- data/lib/mongo/server_selector/selectable.rb +24 -22
- data/lib/mongo/socket.rb +6 -3
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/uri.rb +243 -139
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +332 -166
- data/spec/mongo/client_spec.rb +25 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
- data/spec/mongo/collection/view/readable_spec.rb +17 -30
- data/spec/mongo/collection/view_spec.rb +233 -7
- data/spec/mongo/collection_spec.rb +360 -18
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +137 -0
- data/spec/mongo/database_spec.rb +27 -11
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +21 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
- data/spec/mongo/server_selection_spec.rb +3 -3
- data/spec/mongo/server_selector/nearest_spec.rb +34 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
- data/spec/mongo/server_selector/primary_spec.rb +14 -13
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
- data/spec/mongo/server_selector/secondary_spec.rb +23 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +251 -39
- data/spec/spec_helper.rb +11 -4
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud.rb +3 -1
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/server_selector.rb +21 -12
- metadata +147 -57
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
@@ -17,35 +17,30 @@ module Mongo
|
|
17
17
|
module Write
|
18
18
|
module Command
|
19
19
|
|
20
|
-
# Provides common behavior for
|
20
|
+
# Provides common behavior for write commands.
|
21
|
+
# Assigns an operation id when executed.
|
21
22
|
#
|
22
23
|
# @since 2.0.0
|
23
24
|
module Writable
|
24
25
|
include Limited
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
#
|
27
|
+
# Execute the operation.
|
28
|
+
# The context gets a connection on which the operation
|
29
|
+
# is sent in the block.
|
29
30
|
#
|
30
|
-
# @
|
31
|
-
def secondary_ok?
|
32
|
-
false
|
33
|
-
end
|
34
|
-
|
35
|
-
# Whether the batch writes should be applied in the same order the
|
36
|
-
# items appear, ie. sequentially.
|
37
|
-
# If ordered is false, the server applies the batch items in no particular
|
38
|
-
# order, and possibly in parallel. Execution halts after the first error.
|
39
|
-
# The default value is true, which means the batch items are applied
|
40
|
-
# sequentially.
|
31
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
41
32
|
#
|
42
|
-
# @return [
|
33
|
+
# @return [ Result ] The operation response, if there is one.
|
43
34
|
#
|
44
35
|
# @since 2.0.0
|
45
|
-
def
|
46
|
-
|
36
|
+
def execute(context)
|
37
|
+
context.with_connection do |connection|
|
38
|
+
connection.dispatch([ message ], operation_id)
|
39
|
+
end
|
47
40
|
end
|
48
41
|
|
42
|
+
private
|
43
|
+
|
49
44
|
# The wire protocol message for this write operation.
|
50
45
|
#
|
51
46
|
# @return [ Mongo::Protocol::Query ] Wire protocol message.
|
@@ -42,37 +42,14 @@ module Mongo
|
|
42
42
|
#
|
43
43
|
# @since 2.0.0
|
44
44
|
class CreateIndex
|
45
|
-
include
|
45
|
+
include GLE
|
46
|
+
include WriteCommandEnabled
|
46
47
|
include Specifiable
|
47
48
|
|
48
|
-
# Execute the ensure index operation.
|
49
|
-
#
|
50
|
-
# @example Execute the operation.
|
51
|
-
# operation.execute(context)
|
52
|
-
#
|
53
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
54
|
-
#
|
55
|
-
# @return [ Result ] The result of the operation.
|
56
|
-
#
|
57
|
-
# @since 2.0.0
|
58
|
-
def execute(context)
|
59
|
-
if context.features.write_command_enabled?
|
60
|
-
execute_write_command(context)
|
61
|
-
else
|
62
|
-
execute_message(context)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
49
|
private
|
67
50
|
|
68
|
-
def
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def execute_message(context)
|
73
|
-
context.with_connection do |connection|
|
74
|
-
Result.new(connection.dispatch([ message, gle ].compact)).validate!
|
75
|
-
end
|
51
|
+
def write_command_op
|
52
|
+
Command::CreateIndex.new(spec)
|
76
53
|
end
|
77
54
|
|
78
55
|
def index_documents
|
@@ -30,40 +30,14 @@ module Mongo
|
|
30
30
|
#
|
31
31
|
# @since 2.0.0
|
32
32
|
class CreateUser
|
33
|
-
include
|
33
|
+
include GLE
|
34
|
+
include WriteCommandEnabled
|
34
35
|
include Specifiable
|
35
36
|
|
36
|
-
# Execute the operation.
|
37
|
-
#
|
38
|
-
# @note Creating users behaves different on 2.7+, 2.6.x, and
|
39
|
-
# 2.4- so we need to break this out into separate operations.
|
40
|
-
#
|
41
|
-
# @example Execute the operation.
|
42
|
-
# operation.execute(context)
|
43
|
-
#
|
44
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
45
|
-
#
|
46
|
-
# @return [ Result ] The operation result.
|
47
|
-
#
|
48
|
-
# @since 2.0.0
|
49
|
-
def execute(context)
|
50
|
-
if context.features.write_command_enabled?
|
51
|
-
execute_write_command(context)
|
52
|
-
else
|
53
|
-
execute_message(context)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
37
|
private
|
58
38
|
|
59
|
-
def
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
def execute_message(context)
|
64
|
-
context.with_connection do |connection|
|
65
|
-
Result.new(connection.dispatch([ message, gle ].compact)).validate!
|
66
|
-
end
|
39
|
+
def write_command_op
|
40
|
+
Command::CreateUser.new(spec)
|
67
41
|
end
|
68
42
|
|
69
43
|
def message
|
@@ -48,44 +48,21 @@ module Mongo
|
|
48
48
|
#
|
49
49
|
# @since 2.0.0
|
50
50
|
class Delete
|
51
|
-
include
|
51
|
+
include GLE
|
52
|
+
include WriteCommandEnabled
|
52
53
|
include Specifiable
|
53
54
|
|
54
|
-
# Execute the delete operation.
|
55
|
-
#
|
56
|
-
# @example Execute the operation.
|
57
|
-
# operation.execute(context)
|
58
|
-
#
|
59
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
60
|
-
#
|
61
|
-
# @return [ Result ] The result.
|
62
|
-
#
|
63
|
-
# @since 2.0.0
|
64
|
-
def execute(context)
|
65
|
-
if context.features.write_command_enabled?
|
66
|
-
execute_write_command(context)
|
67
|
-
else
|
68
|
-
execute_message(context)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
55
|
private
|
73
56
|
|
74
|
-
def
|
57
|
+
def write_command_op
|
75
58
|
s = spec.merge(:deletes => [ delete ])
|
76
59
|
s.delete(:delete)
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
def execute_message(context)
|
81
|
-
context.with_connection do |connection|
|
82
|
-
Result.new(connection.dispatch([ message, gle ].compact)).validate!
|
83
|
-
end
|
60
|
+
Command::Delete.new(s)
|
84
61
|
end
|
85
62
|
|
86
63
|
def message
|
87
64
|
selector = delete[:q]
|
88
|
-
opts = (
|
65
|
+
opts = (delete[:limit] || 0) <= 0 ? {} : { :flags => [ :single_remove ] }
|
89
66
|
Protocol::Delete.new(db_name, coll_name, selector, opts)
|
90
67
|
end
|
91
68
|
end
|
@@ -35,7 +35,7 @@ module Mongo
|
|
35
35
|
#
|
36
36
|
# @since 2.0.0
|
37
37
|
class DropIndex
|
38
|
-
include
|
38
|
+
include WriteCommandEnabled
|
39
39
|
include Specifiable
|
40
40
|
|
41
41
|
# Execute the drop index operation.
|
@@ -54,8 +54,8 @@ module Mongo
|
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
|
-
def
|
58
|
-
|
57
|
+
def write_command_op
|
58
|
+
Command::DropIndex.new(spec)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (C) 2014-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
|
+
module Operation
|
17
|
+
module Write
|
18
|
+
|
19
|
+
# This module contains common functionality for operations that need to
|
20
|
+
# be followed by a GLE message.
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
module GLE
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def execute_message(context)
|
28
|
+
context.with_connection do |connection|
|
29
|
+
result_class = defined?(self.class::LegacyResult) ? self.class::LegacyResult :
|
30
|
+
defined?(self.class::Result) ? self.class::Result : Result
|
31
|
+
result_class.new(connection.dispatch([ message, gle ].compact)).validate!
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def gle
|
36
|
+
if gle_message = write_concern.get_last_error
|
37
|
+
Protocol::Query.new(
|
38
|
+
db_name,
|
39
|
+
Database::COMMAND,
|
40
|
+
gle_message,
|
41
|
+
options.merge(limit: -1)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -15,6 +15,11 @@
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
17
|
module Write
|
18
|
+
|
19
|
+
# This module provides functionality to ensure that documents contain
|
20
|
+
# an id field. Used by insert operations (Bulk, legacy, write command inserts).
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
18
23
|
module Idable
|
19
24
|
|
20
25
|
private
|
@@ -43,28 +43,11 @@ module Mongo
|
|
43
43
|
#
|
44
44
|
# @since 2.0.0
|
45
45
|
class Insert
|
46
|
-
include
|
46
|
+
include GLE
|
47
|
+
include WriteCommandEnabled
|
47
48
|
include Specifiable
|
48
49
|
include Idable
|
49
50
|
|
50
|
-
# Execute the insert operation.
|
51
|
-
#
|
52
|
-
# @example Execute the operation.
|
53
|
-
# operation.execute(context)
|
54
|
-
#
|
55
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
56
|
-
#
|
57
|
-
# @return [ Result ] The operation result.
|
58
|
-
#
|
59
|
-
# @since 2.0.0
|
60
|
-
def execute(context)
|
61
|
-
if context.features.write_command_enabled?
|
62
|
-
execute_write_command(context)
|
63
|
-
else
|
64
|
-
execute_message(context)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
51
|
private
|
69
52
|
|
70
53
|
def execute_write_command(context)
|
@@ -78,11 +61,6 @@ module Mongo
|
|
78
61
|
end
|
79
62
|
end
|
80
63
|
|
81
|
-
def initialize_copy(original)
|
82
|
-
@spec = original.spec.dup
|
83
|
-
@spec[:documents] = original.spec[:documents].dup
|
84
|
-
end
|
85
|
-
|
86
64
|
def message
|
87
65
|
opts = !!options[:continue_on_error] ? { :flags => [:continue_on_error] } : {}
|
88
66
|
Protocol::Insert.new(db_name, coll_name, ensure_ids(documents), opts)
|
@@ -29,37 +29,14 @@ module Mongo
|
|
29
29
|
#
|
30
30
|
# @since 2.0.0
|
31
31
|
class RemoveUser
|
32
|
-
include
|
32
|
+
include GLE
|
33
|
+
include WriteCommandEnabled
|
33
34
|
include Specifiable
|
34
35
|
|
35
|
-
# Execute the remove user operation.
|
36
|
-
#
|
37
|
-
# @example Execute the operation.
|
38
|
-
# operation.execute(context)
|
39
|
-
#
|
40
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
41
|
-
#
|
42
|
-
# @return [ Result ] The operation result.
|
43
|
-
#
|
44
|
-
# @since 2.0.0
|
45
|
-
def execute(context)
|
46
|
-
if context.features.write_command_enabled?
|
47
|
-
execute_write_command(context)
|
48
|
-
else
|
49
|
-
execute_message(context)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
36
|
private
|
54
37
|
|
55
|
-
def
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
def execute_message(context)
|
60
|
-
context.with_connection do |connection|
|
61
|
-
Result.new(connection.dispatch([ message, gle ].compact)).validate!
|
62
|
-
end
|
38
|
+
def write_command_op
|
39
|
+
Command::RemoveUser.new(spec)
|
63
40
|
end
|
64
41
|
|
65
42
|
def message
|
@@ -51,44 +51,16 @@ module Mongo
|
|
51
51
|
#
|
52
52
|
# @since 2.0.0
|
53
53
|
class Update
|
54
|
-
include
|
54
|
+
include GLE
|
55
|
+
include WriteCommandEnabled
|
55
56
|
include Specifiable
|
56
57
|
|
57
|
-
# Execute the update operation.
|
58
|
-
#
|
59
|
-
# @example Execute the operation.
|
60
|
-
# operation.execute(context)
|
61
|
-
#
|
62
|
-
# @param [ Mongo::Server::Context ] context The context for this operation.
|
63
|
-
#
|
64
|
-
# @return [ Result ] The operation result.
|
65
|
-
#
|
66
|
-
# @since 2.0.0
|
67
|
-
def execute(context)
|
68
|
-
if context.features.write_command_enabled?
|
69
|
-
execute_write_command(context)
|
70
|
-
else
|
71
|
-
execute_message(context)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
58
|
private
|
76
59
|
|
77
|
-
def
|
60
|
+
def write_command_op
|
78
61
|
s = spec.merge(:updates => [ update ])
|
79
62
|
s.delete(:update)
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
def execute_message(context)
|
84
|
-
context.with_connection do |connection|
|
85
|
-
LegacyResult.new(connection.dispatch([ message, gle ].compact)).validate!
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def initialize_copy(original)
|
90
|
-
@spec = original.spec.dup
|
91
|
-
@spec[:updates] = original.spec[:updates].dup
|
63
|
+
Command::Update.new(s)
|
92
64
|
end
|
93
65
|
|
94
66
|
def message
|