mongo 2.0.0.beta → 2.0.0.rc

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.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +14 -1
  5. data/lib/mongo.rb +2 -1
  6. data/lib/mongo/auth.rb +2 -2
  7. data/lib/mongo/bulk_write.rb +52 -0
  8. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  9. data/lib/mongo/bulk_write/deletable.rb +60 -0
  10. data/lib/mongo/bulk_write/insertable.rb +52 -0
  11. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  12. data/lib/mongo/bulk_write/replacable.rb +57 -0
  13. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  14. data/lib/mongo/bulk_write/updatable.rb +68 -0
  15. data/lib/mongo/client.rb +15 -2
  16. data/lib/mongo/cluster/topology/replica_set.rb +1 -1
  17. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  18. data/lib/mongo/cluster/topology/standalone.rb +1 -1
  19. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  20. data/lib/mongo/collection.rb +1 -1
  21. data/lib/mongo/collection/view/aggregation.rb +1 -1
  22. data/lib/mongo/collection/view/readable.rb +1 -1
  23. data/lib/mongo/collection/view/writable.rb +5 -5
  24. data/lib/mongo/cursor.rb +0 -2
  25. data/lib/mongo/error.rb +4 -3
  26. data/lib/mongo/error/{bulk_write_failure.rb → bulk_write_error.rb} +2 -2
  27. data/lib/mongo/error/invalid_bulk_operation.rb +2 -2
  28. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  29. data/lib/mongo/error/{empty_batch.rb → multi_index_drop.rb} +5 -10
  30. data/lib/mongo/grid/file/metadata.rb +1 -8
  31. data/lib/mongo/grid/fs.rb +5 -5
  32. data/lib/mongo/index/view.rb +90 -34
  33. data/lib/mongo/operation.rb +0 -1
  34. data/lib/mongo/operation/aggregate.rb +2 -2
  35. data/lib/mongo/operation/aggregate/result.rb +4 -0
  36. data/lib/mongo/operation/bulk_delete/result.rb +2 -127
  37. data/lib/mongo/operation/bulk_insert/result.rb +2 -132
  38. data/lib/mongo/operation/bulk_update/result.rb +2 -142
  39. data/lib/mongo/operation/command.rb +1 -1
  40. data/lib/mongo/operation/executable.rb +3 -3
  41. data/lib/mongo/operation/list_collections/result.rb +0 -2
  42. data/lib/mongo/operation/map_reduce.rb +1 -1
  43. data/lib/mongo/operation/read/collections_info.rb +1 -1
  44. data/lib/mongo/operation/read/get_more.rb +1 -1
  45. data/lib/mongo/operation/read/indexes.rb +1 -1
  46. data/lib/mongo/operation/read/list_collections.rb +1 -1
  47. data/lib/mongo/operation/read/list_indexes.rb +1 -1
  48. data/lib/mongo/operation/read/query.rb +1 -1
  49. data/lib/mongo/operation/specifiable.rb +18 -1
  50. data/lib/mongo/operation/write.rb +2 -0
  51. data/lib/mongo/operation/write/bulk_delete.rb +5 -19
  52. data/lib/mongo/operation/write/bulk_insert.rb +9 -40
  53. data/lib/mongo/operation/write/bulk_mergable.rb +67 -0
  54. data/lib/mongo/operation/write/bulk_update.rb +5 -19
  55. data/lib/mongo/operation/write/command.rb +1 -1
  56. data/lib/mongo/operation/write/command/{ensure_index.rb → create_index.rb} +4 -9
  57. data/lib/mongo/operation/write/command/delete.rb +4 -4
  58. data/lib/mongo/operation/write/command/drop_index.rb +1 -1
  59. data/lib/mongo/operation/write/command/insert.rb +4 -4
  60. data/lib/mongo/operation/write/command/update.rb +4 -4
  61. data/lib/mongo/operation/write/create_index.rb +12 -7
  62. data/lib/mongo/operation/write/create_user.rb +1 -1
  63. data/lib/mongo/operation/write/delete.rb +1 -1
  64. data/lib/mongo/operation/write/drop_index.rb +1 -1
  65. data/lib/mongo/operation/write/insert.rb +1 -1
  66. data/lib/mongo/operation/write/legacy_bulk_mergable.rb +83 -0
  67. data/lib/mongo/operation/write/remove_user.rb +1 -1
  68. data/lib/mongo/operation/write/update.rb +1 -1
  69. data/lib/mongo/{bulk.rb → options.rb} +2 -2
  70. data/lib/mongo/options/mapper.rb +78 -0
  71. data/lib/mongo/server.rb +2 -2
  72. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  73. data/lib/mongo/server/description.rb +1 -1
  74. data/lib/mongo/server/description/inspector.rb +1 -1
  75. data/lib/mongo/server_selector.rb +1 -1
  76. data/lib/mongo/socket/unix.rb +2 -4
  77. data/lib/mongo/version.rb +1 -1
  78. data/lib/mongo/write_concern/acknowledged.rb +15 -1
  79. data/lib/mongo/write_concern/normalizable.rb +0 -22
  80. data/lib/mongo/write_concern/unacknowledged.rb +12 -0
  81. data/spec/mongo/bulk/bulk_write_spec.rb +178 -91
  82. data/spec/mongo/collection/view/aggregation_spec.rb +14 -1
  83. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  84. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -2
  85. data/spec/mongo/collection/view/readable_spec.rb +2 -2
  86. data/spec/mongo/collection/view/writable_spec.rb +7 -7
  87. data/spec/mongo/collection/view_spec.rb +14 -5
  88. data/spec/mongo/collection_spec.rb +5 -5
  89. data/spec/mongo/cursor_spec.rb +3 -3
  90. data/spec/mongo/database_spec.rb +4 -8
  91. data/spec/mongo/grid/fs_spec.rb +8 -8
  92. data/spec/mongo/index/view_spec.rb +139 -35
  93. data/spec/mongo/operation/aggregate_spec.rb +14 -22
  94. data/spec/mongo/operation/command_spec.rb +8 -16
  95. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  96. data/spec/mongo/operation/read/indexes_spec.rb +2 -2
  97. data/spec/mongo/operation/write/bulk_delete_spec.rb +1 -239
  98. data/spec/mongo/operation/write/bulk_insert_spec.rb +3 -234
  99. data/spec/mongo/operation/write/bulk_update_spec.rb +1 -289
  100. data/spec/mongo/operation/write/command/delete_spec.rb +0 -13
  101. data/spec/mongo/operation/write/command/insert_spec.rb +0 -14
  102. data/spec/mongo/operation/write/command/update_spec.rb +0 -14
  103. data/spec/mongo/operation/write/{ensure_index_spec.rb → create_index_spec.rb} +8 -26
  104. data/spec/mongo/operation/write/delete_spec.rb +1 -1
  105. data/spec/mongo/operation/write/drop_index_spec.rb +1 -1
  106. data/spec/mongo/operation/write/insert_spec.rb +3 -3
  107. data/spec/mongo/operation/write/update_spec.rb +1 -1
  108. data/spec/mongo/server_selection_spec.rb +2 -2
  109. data/spec/support/authorization.rb +4 -2
  110. data/spec/support/server_selection.rb +25 -8
  111. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +4 -10
  112. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +6 -12
  113. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +4 -6
  114. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +4 -10
  115. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +6 -12
  116. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +4 -10
  117. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +4 -10
  118. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +6 -12
  119. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +6 -12
  120. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +9 -17
  121. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +9 -17
  122. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +6 -10
  123. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +11 -21
  124. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +11 -18
  125. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  126. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  127. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  128. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  129. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +4 -10
  130. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +2 -6
  131. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -2
  132. data/spec/support/shared/bulk_write.rb +109 -72
  133. metadata +29 -10
  134. metadata.gz.sig +0 -0
  135. data/lib/mongo/bulk/bulk_write.rb +0 -307
  136. data/lib/mongo/operation/batchable.rb +0 -103
@@ -21,8 +21,7 @@ module Mongo
21
21
  #
22
22
  # @since 2.0.0
23
23
  class Result < Operation::Result
24
-
25
- attr_reader :indexes
24
+ include BulkMergable
26
25
 
27
26
  # The number of modified docs field in the result.
28
27
  #
@@ -87,65 +86,6 @@ module Mongo
87
86
  end
88
87
  end
89
88
 
90
- # Set a list of indexes of the operations creating this result.
91
- #
92
- # @example Set the list of indexes.
93
- # result.set_indexes([1,2,3])
94
- #
95
- # @return [ self ] The result.
96
- #
97
- # @since 2.0.0
98
- def set_indexes(indexes)
99
- @indexes = indexes
100
- self
101
- end
102
-
103
- # Aggregate the write errors returned from this result.
104
- #
105
- # @example Aggregate the write errors.
106
- # result.aggregate_write_errors
107
- #
108
- # @return [ Array ] The aggregate write errors.
109
- #
110
- # @since 2.0.0
111
- def aggregate_write_errors
112
- @replies.reduce(nil) do |errors, reply|
113
- if write_errors = reply.documents.first['writeErrors']
114
- errors ||= []
115
- write_errors.each do |write_error|
116
- errors << write_error.merge('index' => indexes[write_error['index']])
117
- end
118
- end
119
- errors
120
- end
121
- end
122
-
123
- # Aggregate the write concern errors returned from this result.
124
- #
125
- # @example Aggregate the write concern errors.
126
- # result.aggregate_write_concern_errors
127
- #
128
- # @return [ Array ] The aggregate write concern errors.
129
- #
130
- # @since 2.0.0
131
- def aggregate_write_concern_errors
132
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
133
- if write_concern_errors = reply.documents.first['writeConcernError']
134
- errors ||= []
135
- write_concern_errors.each do |write_concern_error|
136
- errors << write_concern_error.merge('index' =>
137
- indexes[write_concern_error['index']])
138
- end
139
- elsif reply.documents.first['errmsg']
140
- errors ||= []
141
- errors << { 'errmsg' => reply.documents.first['errmsg'],
142
- 'index' => indexes[i],
143
- 'code' => reply.documents.first['code'] }
144
- end
145
- errors
146
- end
147
- end
148
-
149
89
  private
150
90
 
151
91
  def upsert?(reply)
@@ -158,8 +98,7 @@ module Mongo
158
98
  #
159
99
  # @since 2.0.0
160
100
  class LegacyResult < Operation::Result
161
-
162
- attr_reader :indexes
101
+ include LegacyBulkMergable
163
102
 
164
103
  # The updated existing field in the result.
165
104
  #
@@ -204,87 +143,8 @@ module Mongo
204
143
  end
205
144
  end
206
145
 
207
- # Gets the number of documents modified.
208
- #
209
- # @example Get the modified count.
210
- # result.n_modified
211
- #
212
- # @return [ nil ] nil for legacy.
213
- #
214
- # @since 2.0.0
215
- def n_modified
216
- nil
217
- end
218
-
219
- # Set a list of indexes of the operations creating this result.
220
- #
221
- # @example Set the list of indexes.
222
- # result.set_indexes([1,2,3])
223
- #
224
- # @return [ self ] The result.
225
- #
226
- # @since 2.0.0
227
- def set_indexes(indexes)
228
- @indexes = indexes
229
- self
230
- end
231
-
232
- # Aggregate the write errors returned from this result.
233
- #
234
- # @example Aggregate the write errors.
235
- # result.aggregate_write_errors
236
- #
237
- # @return [ Array ] The aggregate write errors.
238
- #
239
- # @since 2.0.0
240
- def aggregate_write_errors
241
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
242
- if reply_write_errors?(reply)
243
- errors ||= []
244
- errors << { 'errmsg' => reply.documents.first[Error::ERROR],
245
- 'index' => indexes[i],
246
- 'code' => reply.documents.first[Error::CODE] }
247
- end
248
- errors
249
- end
250
- end
251
-
252
- # Aggregate the write concern errors returned from this result.
253
- #
254
- # @example Aggregate the write concern errors.
255
- # result.aggregate_write_concern_errors
256
- #
257
- # @return [ Array ] The aggregate write concern errors.
258
- #
259
- # @since 2.0.0
260
- def aggregate_write_concern_errors
261
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
262
- # @todo: only raise if error is timeout
263
- if error = reply_write_errors?(reply)
264
- errors ||= []
265
- note = reply.documents.first['wnote'] || reply.documents.first['jnote']
266
- if note
267
- code = reply.documents.first['code'] || "bad value constant"
268
- error_string = "#{code}: #{note}"
269
- else
270
- code = reply.documents.first['code'] || "unknown error constant"
271
- error_string = "#{code}: #{error}"
272
- end
273
- errors << { 'errmsg' => error_string,
274
- 'index' => indexes[i],
275
- 'code' => code }
276
- end
277
- errors
278
- end
279
- end
280
-
281
146
  private
282
147
 
283
- def reply_write_errors?(reply)
284
- reply.documents.first[Error::ERROR] ||
285
- reply.documents.first[Error::ERRMSG]
286
- end
287
-
288
148
  def upsert?(reply)
289
149
  !reply.documents.first[UPDATED_EXISTING]
290
150
  end
@@ -41,7 +41,7 @@ module Mongo
41
41
  # @example Execute the operation.
42
42
  # operation.execute(context)
43
43
  #
44
- # @params [ Mongo::Server::Context ] The context for this operation.
44
+ # @param [ Server::Context ] context The context for this operation.
45
45
  #
46
46
  # @return [ Result ] The operation result.
47
47
  #
@@ -25,7 +25,7 @@ module Mongo
25
25
  # The context gets a connection on which the operation
26
26
  # is sent in the block.
27
27
  #
28
- # @params [ Mongo::Server::Context ] The context for this operation.
28
+ # @param [ Mongo::Server::Context ] context The context for this operation.
29
29
  #
30
30
  # @return [ Result ] The operation response, if there is one.
31
31
  #
@@ -39,7 +39,7 @@ module Mongo
39
39
  # Merge this operation with another operation, returning a new one.
40
40
  # Requires that the collection and database of the two ops are the same.
41
41
  #
42
- # @params[ Object ] The other operation.
42
+ # @param[ Object ] The other operation.
43
43
  #
44
44
  # @return [ Object ] A new operation merging this one and another.
45
45
  #
@@ -67,7 +67,7 @@ module Mongo
67
67
  # If an operation including this module doesn't define #merge!, neither
68
68
  # #merge nor #merge! will be allowed.
69
69
  #
70
- # @params[ Object ] The other operation.
70
+ # @param[ Object ] The other operation.
71
71
  #
72
72
  # @raise [ Exception ] Merging is not supported for this operation.
73
73
  #
@@ -91,8 +91,6 @@ module Mongo
91
91
  # @example Validate the result.
92
92
  # result.validate!
93
93
  #
94
- # @param [ Hash ] spec The spec used to run the command.
95
- #
96
94
  # @return [ Result ] Self if successful.
97
95
  #
98
96
  # @since 2.0.0
@@ -57,7 +57,7 @@ module Mongo
57
57
  # @example Execute the operation.
58
58
  # operation.execute(context)
59
59
  #
60
- # @params [ Mongo::Server::Context ] The context for this operation.
60
+ # @param [ Server::Context ] context The context for this operation.
61
61
  #
62
62
  # @return [ Result ] The operation response, if there is one.
63
63
  #
@@ -37,7 +37,7 @@ module Mongo
37
37
  # The context gets a connection on which the operation
38
38
  # is sent in the block.
39
39
  #
40
- # @params [ Mongo::Server::Context ] The context for this operation.
40
+ # @param [ Mongo::Server::Context ] context The context for this operation.
41
41
  #
42
42
  # @return [ Result ] The operation response, if there is one.
43
43
  #
@@ -45,7 +45,7 @@ module Mongo
45
45
  # @example Execute the operation.
46
46
  # operation.execute(context)
47
47
  #
48
- # @params [ Mongo::Server::Context ] The context for this operation.
48
+ # @param [ Mongo::Server::Context ] context The context for this operation.
49
49
  #
50
50
  # @return [ Result ] The operation response, if there is one.
51
51
  #
@@ -38,7 +38,7 @@ module Mongo
38
38
  # The context gets a connection on which the operation
39
39
  # is sent in the block.
40
40
  #
41
- # @params [ Mongo::Server::Context ] The context for this operation.
41
+ # @param [ Mongo::Server::Context ] context The context for this operation.
42
42
  #
43
43
  # @return [ Result ] The indexes operation response.
44
44
  #
@@ -43,7 +43,7 @@ module Mongo
43
43
  # @example Execute the operation.
44
44
  # operation.execute(context)
45
45
  #
46
- # @params [ Mongo::Server::Context ] The context for this operation.
46
+ # @param [ Mongo::Server::Context ] context The context for this operation.
47
47
  #
48
48
  # @return [ Result ] The operation result.
49
49
  #
@@ -45,7 +45,7 @@ module Mongo
45
45
  # @example Execute the operation.
46
46
  # operation.execute(context)
47
47
  #
48
- # @params [ Mongo::Server::Context ] The context for this operation.
48
+ # @param [ Mongo::Server::Context ] context The context for this operation.
49
49
  #
50
50
  # @return [ Result ] The operation result.
51
51
  #
@@ -45,7 +45,7 @@ module Mongo
45
45
  # The context gets a connection on which the operation
46
46
  # is sent in the block.
47
47
  #
48
- # @params [ Mongo::Server::Context ] The context for this operation.
48
+ # @param [ Server::Context ] context The context for this operation.
49
49
  #
50
50
  # @return [ Result ] The operation response, if there is one.
51
51
  #
@@ -61,11 +61,16 @@ module Mongo
61
61
  # @since 2.0.0
62
62
  CURSOR_IDS = :cursor_ids.freeze
63
63
 
64
- # The field for indexes.
64
+ # The field for an index.
65
65
  #
66
66
  # @since 2.0.0
67
67
  INDEX = :index.freeze
68
68
 
69
+ # The field for multiple indexes.
70
+ #
71
+ # @since 2.0.0
72
+ INDEXES = :indexes.freeze
73
+
69
74
  # The field for index names.
70
75
  #
71
76
  # @since 2.0.0
@@ -255,6 +260,18 @@ module Mongo
255
260
  spec[INDEX_NAME]
256
261
  end
257
262
 
263
+ # Get the indexes from the specification.
264
+ #
265
+ # @example Get the index specifications.
266
+ # specifiable.indexes
267
+ #
268
+ # @return [ Hash ] The index specifications.
269
+ #
270
+ # @since 2.0.0
271
+ def indexes
272
+ spec[INDEXES]
273
+ end
274
+
258
275
  # Create the new specifiable operation.
259
276
  #
260
277
  # @example Create the new specifiable operation.
@@ -12,6 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ require 'mongo/operation/write/bulk_mergable'
16
+ require 'mongo/operation/write/legacy_bulk_mergable'
15
17
  require 'mongo/operation/write/delete'
16
18
  require 'mongo/operation/write/bulk_delete'
17
19
  require 'mongo/operation/write/insert'
@@ -49,14 +49,13 @@ module Mongo
49
49
  class BulkDelete
50
50
  include Executable
51
51
  include Specifiable
52
- include Batchable
53
52
 
54
53
  # Execute the delete operation.
55
54
  #
56
55
  # @example Execute the operation.
57
56
  # operation.execute(context)
58
57
  #
59
- # @params [ Mongo::Server::Context ] The context for this operation.
58
+ # @param [ Mongo::Server::Context ] context The context for this operation.
60
59
  #
61
60
  # @return [ Result ] The result.
62
61
  #
@@ -74,7 +73,7 @@ module Mongo
74
73
  # @example Set a write concern.
75
74
  # new_op = operation.write_concern(:w => 2)
76
75
  #
77
- # @params [ Hash ] The write concern.
76
+ # @param [ Hash ] wc The write concern.
78
77
  #
79
78
  # @since 2.0.0
80
79
  def write_concern(wc = nil)
@@ -85,19 +84,10 @@ module Mongo
85
84
  end
86
85
  end
87
86
 
88
- # The index of each delete as it was added onto the bulk object.
89
- #
90
- # @params [ Integer ] The index of each delete.
91
- #
92
- # @since 2.0.0
93
- def indexes
94
- @spec[:indexes] || []
95
- end
96
-
97
87
  private
98
88
 
99
89
  def execute_write_command(context)
100
- Result.new(Command::Delete.new(spec).execute(context)).set_indexes(indexes)
90
+ Result.new(Command::Delete.new(spec).execute(context))
101
91
  end
102
92
 
103
93
  def execute_message(context)
@@ -105,13 +95,13 @@ module Mongo
105
95
  context.with_connection do |connection|
106
96
  result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
107
97
  if stop_sending?(result)
108
- return result.set_indexes(indexes)
98
+ return result
109
99
  else
110
100
  result.reply
111
101
  end
112
102
  end
113
103
  end
114
- LegacyResult.new(replies.compact.empty? ? nil : replies).set_indexes(indexes)
104
+ LegacyResult.new(replies.compact.empty? ? nil : replies)
115
105
  end
116
106
 
117
107
  def stop_sending?(result)
@@ -137,10 +127,6 @@ module Mongo
137
127
  end
138
128
  end
139
129
 
140
- def batch_key
141
- DELETES
142
- end
143
-
144
130
  def initialize_copy(original)
145
131
  @spec = original.spec.dup
146
132
  @spec[DELETES] = original.spec[DELETES].clone
@@ -46,16 +46,14 @@ module Mongo
46
46
  #
47
47
  # @since 2.0.0
48
48
  class BulkInsert
49
- include Executable
50
49
  include Specifiable
51
- include Batchable
52
50
 
53
51
  # Execute the bulk insert operation.
54
52
  #
55
53
  # @example Execute the operation.
56
54
  # operation.execute(context)
57
55
  #
58
- # @params [ Mongo::Server::Context ] The context for this operation.
56
+ # @param [ Mongo::Server::Context ] context The context for this operation.
59
57
  #
60
58
  # @return [ Result ] The operation result.
61
59
  #
@@ -68,35 +66,10 @@ module Mongo
68
66
  end
69
67
  end
70
68
 
71
- # Set the write concern on this operation.
72
- #
73
- # @example Set a write concern.
74
- # new_op = operation.write_concern(:w => 2)
75
- #
76
- # @params [ Hash ] The write concern.
77
- #
78
- # @since 2.0.0
79
- def write_concern(wc = nil)
80
- if wc
81
- self.class.new(spec.merge(write_concern: WriteConcern.get(wc)))
82
- else
83
- spec[WRITE_CONCERN]
84
- end
85
- end
86
-
87
- # The index of each document as it was added onto the bulk object.
88
- #
89
- # @params [ Integer ] The index of each document.
90
- #
91
- # @since 2.0.0
92
- def indexes
93
- @spec[:indexes] || []
94
- end
95
-
96
69
  private
97
70
 
98
71
  def execute_write_command(context)
99
- Result.new(Command::Insert.new(spec).execute(context)).set_indexes(indexes)
72
+ Result.new(Command::Insert.new(spec).execute(context))
100
73
  end
101
74
 
102
75
  def execute_message(context)
@@ -106,11 +79,11 @@ module Mongo
106
79
  result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
107
80
  replies << result.reply
108
81
  if stop_sending?(result)
109
- return LegacyResult.new(replies).set_indexes(indexes)
82
+ return LegacyResult.new(replies)
110
83
  end
111
84
  end
112
85
  end
113
- LegacyResult.new(replies.compact.empty? ? nil : replies).set_indexes(indexes)
86
+ LegacyResult.new(replies.compact.empty? ? nil : replies)
114
87
  end
115
88
 
116
89
  def stop_sending?(result)
@@ -122,6 +95,11 @@ module Mongo
122
95
  @spec.fetch(:ordered, true)
123
96
  end
124
97
 
98
+ def initialize_copy(original)
99
+ @spec = original.spec.dup
100
+ @spec[DOCUMENTS] = original.spec[DOCUMENTS].clone
101
+ end
102
+
125
103
  def gle
126
104
  gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
127
105
  Mongo::WriteConcern.get(:w => 1).get_last_error :
@@ -136,15 +114,6 @@ module Mongo
136
114
  end
137
115
  end
138
116
 
139
- def batch_key
140
- DOCUMENTS
141
- end
142
-
143
- def initialize_copy(original)
144
- @spec = original.spec.dup
145
- @spec[DOCUMENTS] = original.spec[DOCUMENTS].dup
146
- end
147
-
148
117
  def messages
149
118
  if ordered? || gle
150
119
  documents.collect do |doc|