mongo 2.0.0.beta → 2.0.0.rc
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +14 -1
- data/lib/mongo.rb +2 -1
- data/lib/mongo/auth.rb +2 -2
- data/lib/mongo/bulk_write.rb +52 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
- data/lib/mongo/bulk_write/deletable.rb +60 -0
- data/lib/mongo/bulk_write/insertable.rb +52 -0
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
- data/lib/mongo/bulk_write/replacable.rb +57 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
- data/lib/mongo/bulk_write/updatable.rb +68 -0
- data/lib/mongo/client.rb +15 -2
- data/lib/mongo/cluster/topology/replica_set.rb +1 -1
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/standalone.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +1 -1
- data/lib/mongo/collection.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +1 -1
- data/lib/mongo/collection/view/writable.rb +5 -5
- data/lib/mongo/cursor.rb +0 -2
- data/lib/mongo/error.rb +4 -3
- data/lib/mongo/error/{bulk_write_failure.rb → bulk_write_error.rb} +2 -2
- data/lib/mongo/error/invalid_bulk_operation.rb +2 -2
- data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
- data/lib/mongo/error/{empty_batch.rb → multi_index_drop.rb} +5 -10
- data/lib/mongo/grid/file/metadata.rb +1 -8
- data/lib/mongo/grid/fs.rb +5 -5
- data/lib/mongo/index/view.rb +90 -34
- data/lib/mongo/operation.rb +0 -1
- data/lib/mongo/operation/aggregate.rb +2 -2
- data/lib/mongo/operation/aggregate/result.rb +4 -0
- data/lib/mongo/operation/bulk_delete/result.rb +2 -127
- data/lib/mongo/operation/bulk_insert/result.rb +2 -132
- data/lib/mongo/operation/bulk_update/result.rb +2 -142
- data/lib/mongo/operation/command.rb +1 -1
- data/lib/mongo/operation/executable.rb +3 -3
- data/lib/mongo/operation/list_collections/result.rb +0 -2
- data/lib/mongo/operation/map_reduce.rb +1 -1
- data/lib/mongo/operation/read/collections_info.rb +1 -1
- data/lib/mongo/operation/read/get_more.rb +1 -1
- data/lib/mongo/operation/read/indexes.rb +1 -1
- data/lib/mongo/operation/read/list_collections.rb +1 -1
- data/lib/mongo/operation/read/list_indexes.rb +1 -1
- data/lib/mongo/operation/read/query.rb +1 -1
- data/lib/mongo/operation/specifiable.rb +18 -1
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation/write/bulk_delete.rb +5 -19
- data/lib/mongo/operation/write/bulk_insert.rb +9 -40
- data/lib/mongo/operation/write/bulk_mergable.rb +67 -0
- data/lib/mongo/operation/write/bulk_update.rb +5 -19
- data/lib/mongo/operation/write/command.rb +1 -1
- data/lib/mongo/operation/write/command/{ensure_index.rb → create_index.rb} +4 -9
- data/lib/mongo/operation/write/command/delete.rb +4 -4
- data/lib/mongo/operation/write/command/drop_index.rb +1 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -4
- data/lib/mongo/operation/write/command/update.rb +4 -4
- data/lib/mongo/operation/write/create_index.rb +12 -7
- data/lib/mongo/operation/write/create_user.rb +1 -1
- data/lib/mongo/operation/write/delete.rb +1 -1
- data/lib/mongo/operation/write/drop_index.rb +1 -1
- data/lib/mongo/operation/write/insert.rb +1 -1
- data/lib/mongo/operation/write/legacy_bulk_mergable.rb +83 -0
- data/lib/mongo/operation/write/remove_user.rb +1 -1
- data/lib/mongo/operation/write/update.rb +1 -1
- data/lib/mongo/{bulk.rb → options.rb} +2 -2
- data/lib/mongo/options/mapper.rb +78 -0
- data/lib/mongo/server.rb +2 -2
- data/lib/mongo/server/connection_pool/queue.rb +1 -1
- data/lib/mongo/server/description.rb +1 -1
- data/lib/mongo/server/description/inspector.rb +1 -1
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/socket/unix.rb +2 -4
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +15 -1
- data/lib/mongo/write_concern/normalizable.rb +0 -22
- data/lib/mongo/write_concern/unacknowledged.rb +12 -0
- data/spec/mongo/bulk/bulk_write_spec.rb +178 -91
- data/spec/mongo/collection/view/aggregation_spec.rb +14 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +2 -2
- data/spec/mongo/collection/view/writable_spec.rb +7 -7
- data/spec/mongo/collection/view_spec.rb +14 -5
- data/spec/mongo/collection_spec.rb +5 -5
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/database_spec.rb +4 -8
- data/spec/mongo/grid/fs_spec.rb +8 -8
- data/spec/mongo/index/view_spec.rb +139 -35
- data/spec/mongo/operation/aggregate_spec.rb +14 -22
- data/spec/mongo/operation/command_spec.rb +8 -16
- data/spec/mongo/operation/map_reduce_spec.rb +1 -1
- data/spec/mongo/operation/read/indexes_spec.rb +2 -2
- data/spec/mongo/operation/write/bulk_delete_spec.rb +1 -239
- data/spec/mongo/operation/write/bulk_insert_spec.rb +3 -234
- data/spec/mongo/operation/write/bulk_update_spec.rb +1 -289
- data/spec/mongo/operation/write/command/delete_spec.rb +0 -13
- data/spec/mongo/operation/write/command/insert_spec.rb +0 -14
- data/spec/mongo/operation/write/command/update_spec.rb +0 -14
- data/spec/mongo/operation/write/{ensure_index_spec.rb → create_index_spec.rb} +8 -26
- data/spec/mongo/operation/write/delete_spec.rb +1 -1
- data/spec/mongo/operation/write/drop_index_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +3 -3
- data/spec/mongo/operation/write/update_spec.rb +1 -1
- data/spec/mongo/server_selection_spec.rb +2 -2
- data/spec/support/authorization.rb +4 -2
- data/spec/support/server_selection.rb +25 -8
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +4 -10
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +6 -12
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +4 -6
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +4 -10
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +6 -12
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +4 -10
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +4 -10
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +6 -12
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +6 -12
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +9 -17
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +9 -17
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +6 -10
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +11 -21
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +11 -18
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +4 -10
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +2 -6
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -2
- data/spec/support/shared/bulk_write.rb +109 -72
- metadata +29 -10
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk/bulk_write.rb +0 -307
- data/lib/mongo/operation/batchable.rb +0 -103
@@ -0,0 +1,67 @@
|
|
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
|
+
module BulkMergable
|
20
|
+
|
21
|
+
# Aggregate the write errors returned from this result.
|
22
|
+
#
|
23
|
+
# @example Aggregate the write errors.
|
24
|
+
# result.aggregate_write_errors([0, 1, 2, 3])
|
25
|
+
#
|
26
|
+
# @param [ Array ] indexes The indexes of each operation as they
|
27
|
+
# were listed in the Bulk API.
|
28
|
+
#
|
29
|
+
# @return [ Array ] The aggregate write errors.
|
30
|
+
#
|
31
|
+
# @since 2.0.0
|
32
|
+
def aggregate_write_errors(indexes)
|
33
|
+
@replies.reduce(nil) do |errors, reply|
|
34
|
+
if reply.documents.first['writeErrors']
|
35
|
+
write_errors = reply.documents.first['writeErrors'].collect do |we|
|
36
|
+
we.merge!('index' => indexes[we['index']])
|
37
|
+
end
|
38
|
+
(errors || []) << write_errors if write_errors
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Aggregate the write concern errors returned from this result.
|
44
|
+
#
|
45
|
+
# @example Aggregate the write concern errors.
|
46
|
+
# result.aggregate_write_concern_errors([0, 1, 2, 3])
|
47
|
+
#
|
48
|
+
# @param [ Array ] indexes The indexes of each operation as they
|
49
|
+
# were listed in the Bulk API.
|
50
|
+
#
|
51
|
+
# @return [ Array ] The aggregate write concern errors.
|
52
|
+
#
|
53
|
+
# @since 2.0.0
|
54
|
+
def aggregate_write_concern_errors(indexes)
|
55
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
56
|
+
if write_concern_errors = reply.documents.first['writeConcernErrors']
|
57
|
+
(errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
|
58
|
+
wce.merge!('index' => indexes[wce['index']])
|
59
|
+
(errs || []) << write_concern_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -56,14 +56,13 @@ module Mongo
|
|
56
56
|
class BulkUpdate
|
57
57
|
include Executable
|
58
58
|
include Specifiable
|
59
|
-
include Batchable
|
60
59
|
|
61
60
|
# Execute the update operation.
|
62
61
|
#
|
63
62
|
# @example Execute the operation.
|
64
63
|
# operation.execute(context)
|
65
64
|
#
|
66
|
-
# @
|
65
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
67
66
|
#
|
68
67
|
# @return [ Result ] The operation result.
|
69
68
|
#
|
@@ -81,7 +80,7 @@ module Mongo
|
|
81
80
|
# @example Set a write concern.
|
82
81
|
# new_op = operation.write_concern(:w => 2)
|
83
82
|
#
|
84
|
-
# @
|
83
|
+
# @param [ Hash ] wc The write concern.
|
85
84
|
#
|
86
85
|
# @since 2.0.0
|
87
86
|
def write_concern(wc = nil)
|
@@ -92,19 +91,10 @@ module Mongo
|
|
92
91
|
end
|
93
92
|
end
|
94
93
|
|
95
|
-
# The index of each update as it was added onto the bulk object.
|
96
|
-
#
|
97
|
-
# @params [ Integer ] The index of each update.
|
98
|
-
#
|
99
|
-
# @since 2.0.0
|
100
|
-
def indexes
|
101
|
-
@spec[:indexes] || []
|
102
|
-
end
|
103
|
-
|
104
94
|
private
|
105
95
|
|
106
96
|
def execute_write_command(context)
|
107
|
-
Result.new(Command::Update.new(spec).execute(context))
|
97
|
+
Result.new(Command::Update.new(spec).execute(context))
|
108
98
|
end
|
109
99
|
|
110
100
|
def execute_message(context)
|
@@ -112,13 +102,13 @@ module Mongo
|
|
112
102
|
context.with_connection do |connection|
|
113
103
|
result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
|
114
104
|
if stop_sending?(result)
|
115
|
-
return result
|
105
|
+
return result
|
116
106
|
else
|
117
107
|
result.reply
|
118
108
|
end
|
119
109
|
end
|
120
110
|
end
|
121
|
-
LegacyResult.new(replies.compact.empty? ? nil : replies)
|
111
|
+
LegacyResult.new(replies.compact.empty? ? nil : replies)
|
122
112
|
end
|
123
113
|
|
124
114
|
def stop_sending?(result)
|
@@ -144,10 +134,6 @@ module Mongo
|
|
144
134
|
end
|
145
135
|
end
|
146
136
|
|
147
|
-
def batch_key
|
148
|
-
UPDATES
|
149
|
-
end
|
150
|
-
|
151
137
|
def initialize_copy(original)
|
152
138
|
@spec = original.spec.dup
|
153
139
|
@spec[UPDATES] = original.spec[UPDATES].dup
|
@@ -17,6 +17,6 @@ require 'mongo/operation/write/command/delete'
|
|
17
17
|
require 'mongo/operation/write/command/insert'
|
18
18
|
require 'mongo/operation/write/command/update'
|
19
19
|
require 'mongo/operation/write/command/drop_index'
|
20
|
-
require 'mongo/operation/write/command/
|
20
|
+
require 'mongo/operation/write/command/create_index'
|
21
21
|
require 'mongo/operation/write/command/create_user'
|
22
22
|
require 'mongo/operation/write/command/remove_user'
|
@@ -20,12 +20,10 @@ module Mongo
|
|
20
20
|
# A MongoDB ensure index write command operation.
|
21
21
|
#
|
22
22
|
# @example Create an ensure index command operation.
|
23
|
-
# Write::Command::
|
24
|
-
# :
|
23
|
+
# Write::Command::CreateIndex.new({
|
24
|
+
# :indexes => [{ :key => { :foo => 1 }, :name => 'foo_1', :unique => true }],
|
25
25
|
# :db_name => 'test',
|
26
|
-
# :coll_name => 'test_coll'
|
27
|
-
# :index_name => 'foo_1'
|
28
|
-
# :options => { :unique => true }
|
26
|
+
# :coll_name => 'test_coll'
|
29
27
|
# })
|
30
28
|
#
|
31
29
|
# @since 2.0.0
|
@@ -42,10 +40,7 @@ module Mongo
|
|
42
40
|
#
|
43
41
|
# @since 2.0.0
|
44
42
|
def selector
|
45
|
-
{
|
46
|
-
:createIndexes => coll_name,
|
47
|
-
:indexes => [ options.merge(key: index, name: index_name) ],
|
48
|
-
}
|
43
|
+
{ :createIndexes => coll_name, :indexes => indexes }
|
49
44
|
end
|
50
45
|
end
|
51
46
|
end
|
@@ -42,10 +42,10 @@ module Mongo
|
|
42
42
|
#
|
43
43
|
# @since 2.0.0
|
44
44
|
def selector
|
45
|
-
{ :
|
46
|
-
:
|
47
|
-
:
|
48
|
-
:
|
45
|
+
{ delete: coll_name,
|
46
|
+
deletes: deletes,
|
47
|
+
writeConcern: write_concern.options,
|
48
|
+
ordered: ordered?
|
49
49
|
}
|
50
50
|
end
|
51
51
|
end
|
@@ -41,10 +41,10 @@ module Mongo
|
|
41
41
|
#
|
42
42
|
# @since 2.0.0
|
43
43
|
def selector
|
44
|
-
{ :
|
45
|
-
:
|
46
|
-
:
|
47
|
-
:
|
44
|
+
{ insert: coll_name,
|
45
|
+
documents: documents,
|
46
|
+
writeConcern: write_concern.options,
|
47
|
+
ordered: ordered?
|
48
48
|
}
|
49
49
|
end
|
50
50
|
end
|
@@ -46,10 +46,10 @@ module Mongo
|
|
46
46
|
#
|
47
47
|
# @return [ Hash ] The selector describing this update operation.
|
48
48
|
def selector
|
49
|
-
{ :
|
50
|
-
:
|
51
|
-
:
|
52
|
-
:
|
49
|
+
{ update: coll_name,
|
50
|
+
updates: updates,
|
51
|
+
writeConcern: write_concern.options,
|
52
|
+
ordered: ordered?
|
53
53
|
}
|
54
54
|
end
|
55
55
|
end
|
@@ -17,13 +17,13 @@ module Mongo
|
|
17
17
|
module Operation
|
18
18
|
module Write
|
19
19
|
|
20
|
-
# A MongoDB
|
20
|
+
# A MongoDB create index operation.
|
21
21
|
#
|
22
22
|
# @note If a server with version >= 2.5.5 is being used, a write command
|
23
23
|
# operation will be created and sent instead.
|
24
24
|
#
|
25
|
-
# @example Create the
|
26
|
-
# Write::
|
25
|
+
# @example Create the create index operation.
|
26
|
+
# Write::CreateIndex.new({
|
27
27
|
# :index => { :name => 1, :age => -1 },
|
28
28
|
# :db_name => 'test',
|
29
29
|
# :coll_name => 'test_coll',
|
@@ -40,7 +40,7 @@ module Mongo
|
|
40
40
|
# write command.
|
41
41
|
#
|
42
42
|
# @since 2.0.0
|
43
|
-
class
|
43
|
+
class CreateIndex
|
44
44
|
include Executable
|
45
45
|
include Specifiable
|
46
46
|
|
@@ -49,7 +49,7 @@ module Mongo
|
|
49
49
|
# @example Execute the operation.
|
50
50
|
# operation.execute(context)
|
51
51
|
#
|
52
|
-
# @
|
52
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
53
53
|
#
|
54
54
|
# @return [ Result ] The result of the operation.
|
55
55
|
#
|
@@ -74,9 +74,14 @@ module Mongo
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
def index_documents
|
78
|
+
indexes.dup.each do |index|
|
79
|
+
index[:ns] = namespace
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
77
83
|
def message
|
78
|
-
|
79
|
-
Protocol::Insert.new(db_name, Index::COLLECTION, [ document ])
|
84
|
+
Protocol::Insert.new(db_name, Index::COLLECTION, index_documents)
|
80
85
|
end
|
81
86
|
end
|
82
87
|
end
|
@@ -40,7 +40,7 @@ module Mongo
|
|
40
40
|
# @example Execute the operation.
|
41
41
|
# operation.execute(context)
|
42
42
|
#
|
43
|
-
# @param [ Mongo::Server::Context ] The context for this operation.
|
43
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
44
44
|
#
|
45
45
|
# @return [ Result ] The operation result.
|
46
46
|
#
|
@@ -53,7 +53,7 @@ module Mongo
|
|
53
53
|
# @example Execute the operation.
|
54
54
|
# operation.execute(context)
|
55
55
|
#
|
56
|
-
# @
|
56
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
57
57
|
#
|
58
58
|
# @return [ Result ] The result.
|
59
59
|
#
|
@@ -42,7 +42,7 @@ module Mongo
|
|
42
42
|
# @example Execute the operation.
|
43
43
|
# operation.execute(context)
|
44
44
|
#
|
45
|
-
# @
|
45
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
46
46
|
#
|
47
47
|
# @return [ Result ] The result of the operation.
|
48
48
|
#
|
@@ -48,7 +48,7 @@ module Mongo
|
|
48
48
|
# @example Execute the operation.
|
49
49
|
# operation.execute(context)
|
50
50
|
#
|
51
|
-
# @
|
51
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
52
52
|
#
|
53
53
|
# @return [ Result ] The operation result.
|
54
54
|
#
|
@@ -0,0 +1,83 @@
|
|
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
|
+
module LegacyBulkMergable
|
20
|
+
|
21
|
+
# Aggregate the write errors returned from this result.
|
22
|
+
#
|
23
|
+
# @example Aggregate the write errors.
|
24
|
+
# result.aggregate_write_errors([0, 1, 2, 3])
|
25
|
+
#
|
26
|
+
# @param [ Array ] indexes The indexes of each operation as they
|
27
|
+
# were listed in the Bulk API.
|
28
|
+
#
|
29
|
+
# @return [ Array ] The aggregate write errors.
|
30
|
+
#
|
31
|
+
# @since 2.0.0
|
32
|
+
def aggregate_write_errors(indexes)
|
33
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
34
|
+
if reply_write_errors?(reply)
|
35
|
+
errors ||= []
|
36
|
+
errors << { 'errmsg' => reply.documents.first[Error::ERROR],
|
37
|
+
'index' => indexes[i],
|
38
|
+
'code' => reply.documents.first[Error::CODE] }
|
39
|
+
end
|
40
|
+
errors
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Aggregate the write concern errors returned from this result.
|
45
|
+
#
|
46
|
+
# @example Aggregate the write concern errors.
|
47
|
+
# result.aggregate_write_concern_errors([0, 1, 2, 3])
|
48
|
+
#
|
49
|
+
# @param [ Array ] indexes The indexes of each operation as they
|
50
|
+
# were listed in the Bulk API.
|
51
|
+
#
|
52
|
+
# @return [ Array ] The aggregate write concern errors.
|
53
|
+
#
|
54
|
+
# @since 2.0.0
|
55
|
+
def aggregate_write_concern_errors(indexes)
|
56
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
57
|
+
if error = reply_write_errors?(reply)
|
58
|
+
errors ||= []
|
59
|
+
if note = reply.documents.first['wnote'] || reply.documents.first['jnote']
|
60
|
+
code = reply.documents.first['code'] || Error::BAD_VALUE
|
61
|
+
error_string = "#{code}: #{note}"
|
62
|
+
elsif error == 'timeout'
|
63
|
+
code = reply.documents.first['code'] || Error::UNKNOWN_ERROR
|
64
|
+
error_string = "#{code}: #{error}"
|
65
|
+
end
|
66
|
+
errors << { 'errmsg' => error_string,
|
67
|
+
'index' => indexes[i],
|
68
|
+
'code' => code } if error_string
|
69
|
+
end
|
70
|
+
errors
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def reply_write_errors?(reply)
|
77
|
+
reply.documents.first[Error::ERROR] ||
|
78
|
+
reply.documents.first[Error::ERRMSG]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -36,7 +36,7 @@ module Mongo
|
|
36
36
|
# @example Execute the operation.
|
37
37
|
# operation.execute(context)
|
38
38
|
#
|
39
|
-
# @
|
39
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
40
40
|
#
|
41
41
|
# @return [ Result ] The operation result.
|
42
42
|
#
|
@@ -56,7 +56,7 @@ module Mongo
|
|
56
56
|
# @example Execute the operation.
|
57
57
|
# operation.execute(context)
|
58
58
|
#
|
59
|
-
# @
|
59
|
+
# @param [ Mongo::Server::Context ] context The context for this operation.
|
60
60
|
#
|
61
61
|
# @return [ Result ] The operation result.
|
62
62
|
#
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C)
|
1
|
+
# Copyright (C) 2015 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.
|
@@ -12,4 +12,4 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require 'mongo/
|
15
|
+
require 'mongo/options/mapper'
|
@@ -0,0 +1,78 @@
|
|
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
|
+
module Options
|
17
|
+
|
18
|
+
# Utility class for various options mapping behaviour.
|
19
|
+
#
|
20
|
+
# @since 2.0.0
|
21
|
+
module Mapper
|
22
|
+
extend self
|
23
|
+
|
24
|
+
# Transforms the provided options to a new set of options given the
|
25
|
+
# provided mapping.
|
26
|
+
#
|
27
|
+
# @example Transform the options.
|
28
|
+
# Mapper.transform({ name: 1 }, { :name => :nombre })
|
29
|
+
#
|
30
|
+
# @param [ Hash ] options The options to transform
|
31
|
+
# @param [ Hash ] mappings The key mappings.
|
32
|
+
#
|
33
|
+
# @return [ Hash ] The transformed options.
|
34
|
+
#
|
35
|
+
# @since 2.0.0
|
36
|
+
def transform(options, mappings)
|
37
|
+
options.reduce({}) do |transformed, (key, value)|
|
38
|
+
transformed[mappings[key] || key] = value
|
39
|
+
transformed
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Coverts all the keys of the options to strings.
|
44
|
+
#
|
45
|
+
# @example Convert all option keys to strings.
|
46
|
+
# Mapper.transform({ :name => 1 })
|
47
|
+
#
|
48
|
+
# @param [ Hash ] options The options to transform.
|
49
|
+
#
|
50
|
+
# @return [ Hash ] The transformed options.
|
51
|
+
#
|
52
|
+
# @since 2.0.0
|
53
|
+
def transform_keys_to_strings(options)
|
54
|
+
options.reduce({}) do |transformed, (key, value)|
|
55
|
+
transformed[key.to_s] = value
|
56
|
+
transformed
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Coverts all the symbol values to strings.
|
61
|
+
#
|
62
|
+
# @example Convert all option symbol values to strings.
|
63
|
+
# Mapper.transform({ :name => 1 })
|
64
|
+
#
|
65
|
+
# @param [ Hash ] options The options to transform.
|
66
|
+
#
|
67
|
+
# @return [ Hash ] The transformed options.
|
68
|
+
#
|
69
|
+
# @since 2.0.0
|
70
|
+
def transform_values_to_strings(options)
|
71
|
+
options.reduce({}) do |transformed, (key, value)|
|
72
|
+
transformed[key] = value.is_a?(Symbol) ? value.to_s : value
|
73
|
+
transformed
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|