mongo 2.0.6 → 2.1.0

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 (317) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +5 -2
  3. data/lib/mongo/address/ipv4.rb +6 -1
  4. data/lib/mongo/address/unix.rb +2 -2
  5. data/lib/mongo/address.rb +18 -10
  6. data/lib/mongo/auth/cr/conversation.rb +1 -1
  7. data/lib/mongo/auth/ldap/conversation.rb +7 -3
  8. data/lib/mongo/auth/scram/conversation.rb +9 -3
  9. data/lib/mongo/auth/user/view.rb +23 -2
  10. data/lib/mongo/auth/x509/conversation.rb +1 -1
  11. data/lib/mongo/bulk_write/combineable.rb +51 -0
  12. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  13. data/lib/mongo/bulk_write/result.rb +191 -0
  14. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  15. data/lib/mongo/bulk_write/transformable.rb +132 -0
  16. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  17. data/lib/mongo/bulk_write/validatable.rb +62 -0
  18. data/lib/mongo/bulk_write.rb +159 -23
  19. data/lib/mongo/client.rb +52 -16
  20. data/lib/mongo/cluster/topology/replica_set.rb +27 -9
  21. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/cluster.rb +42 -7
  24. data/lib/mongo/collection/view/aggregation.rb +48 -9
  25. data/lib/mongo/collection/view/immutable.rb +6 -6
  26. data/lib/mongo/collection/view/iterable.rb +18 -4
  27. data/lib/mongo/collection/view/map_reduce.rb +58 -17
  28. data/lib/mongo/collection/view/readable.rb +173 -42
  29. data/lib/mongo/collection/view/writable.rb +37 -23
  30. data/lib/mongo/collection/view.rb +2 -2
  31. data/lib/mongo/collection.rb +370 -33
  32. data/lib/mongo/cursor.rb +15 -3
  33. data/lib/mongo/database/view.rb +5 -4
  34. data/lib/mongo/database.rb +14 -4
  35. data/lib/mongo/dbref.rb +113 -0
  36. data/lib/mongo/error/closed_stream.rb +34 -0
  37. data/lib/mongo/error/extra_file_chunk.rb +34 -0
  38. data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
  39. data/lib/mongo/error/invalid_file.rb +2 -2
  40. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  41. data/lib/mongo/error/invalid_uri.rb +5 -4
  42. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  43. data/lib/mongo/error/operation_failure.rb +1 -1
  44. data/lib/mongo/error/parser.rb +1 -1
  45. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  46. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  47. data/lib/mongo/error.rb +13 -2
  48. data/lib/mongo/event/description_changed.rb +1 -1
  49. data/lib/mongo/grid/file/chunk.rb +6 -6
  50. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  51. data/lib/mongo/grid/file.rb +13 -10
  52. data/lib/mongo/grid/fs_bucket.rb +448 -0
  53. data/lib/mongo/grid/stream/read.rb +208 -0
  54. data/lib/mongo/grid/stream/write.rb +187 -0
  55. data/lib/mongo/grid/stream.rb +64 -0
  56. data/lib/mongo/grid.rb +2 -1
  57. data/lib/mongo/index/view.rb +3 -3
  58. data/lib/mongo/index.rb +5 -0
  59. data/lib/mongo/loggable.rb +34 -57
  60. data/lib/mongo/logger.rb +16 -78
  61. data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
  62. data/lib/mongo/monitoring/event/command_failed.rb +96 -0
  63. data/lib/mongo/monitoring/event/command_started.rb +89 -0
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
  65. data/lib/mongo/monitoring/event/secure.rb +58 -0
  66. data/lib/mongo/monitoring/event.rb +18 -0
  67. data/lib/mongo/monitoring/publishable.rb +106 -0
  68. data/lib/mongo/monitoring.rb +195 -0
  69. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  70. data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
  71. data/lib/mongo/operation/commands/collections_info.rb +68 -0
  72. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  73. data/lib/mongo/operation/commands/indexes.rb +70 -0
  74. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  75. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  76. data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
  77. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  78. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
  79. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  80. data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
  81. data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
  82. data/lib/mongo/operation/commands/user_query.rb +69 -0
  83. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
  84. data/lib/mongo/operation/commands/users_info.rb +53 -0
  85. data/lib/mongo/operation/commands.rb +24 -0
  86. data/lib/mongo/operation/executable.rb +4 -68
  87. data/lib/mongo/operation/kill_cursors.rb +3 -3
  88. data/lib/mongo/operation/read/get_more.rb +2 -22
  89. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
  90. data/lib/mongo/operation/read/query.rb +4 -21
  91. data/lib/mongo/operation/read.rb +0 -4
  92. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  93. data/lib/mongo/operation/result.rb +13 -1
  94. data/lib/mongo/operation/specifiable.rb +42 -0
  95. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  96. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  97. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  98. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  99. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  100. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  101. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  102. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  103. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  104. data/lib/mongo/operation/write/bulk.rb +6 -3
  105. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  106. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  107. data/lib/mongo/operation/write/command/delete.rb +0 -1
  108. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  109. data/lib/mongo/operation/write/command/insert.rb +0 -1
  110. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  111. data/lib/mongo/operation/write/command/update.rb +0 -1
  112. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  113. data/lib/mongo/operation/write/command/writable.rb +13 -18
  114. data/lib/mongo/operation/write/create_index.rb +4 -27
  115. data/lib/mongo/operation/write/create_user.rb +4 -30
  116. data/lib/mongo/operation/write/delete.rb +6 -29
  117. data/lib/mongo/operation/write/drop_index.rb +3 -3
  118. data/lib/mongo/operation/write/gle.rb +48 -0
  119. data/lib/mongo/operation/write/idable.rb +5 -0
  120. data/lib/mongo/operation/write/insert.rb +2 -24
  121. data/lib/mongo/operation/write/remove_user.rb +4 -27
  122. data/lib/mongo/operation/write/update.rb +13 -36
  123. data/lib/mongo/operation/write/update_user.rb +4 -30
  124. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  125. data/lib/mongo/operation/write.rb +2 -0
  126. data/lib/mongo/operation.rb +32 -4
  127. data/lib/mongo/options/mapper.rb +4 -2
  128. data/lib/mongo/options/redacted.rb +156 -0
  129. data/lib/mongo/options.rb +1 -0
  130. data/lib/mongo/protocol/delete.rb +75 -15
  131. data/lib/mongo/protocol/get_more.rb +65 -13
  132. data/lib/mongo/protocol/insert.rb +85 -13
  133. data/lib/mongo/protocol/kill_cursors.rb +59 -14
  134. data/lib/mongo/protocol/message.rb +12 -12
  135. data/lib/mongo/protocol/query.rb +163 -37
  136. data/lib/mongo/protocol/reply.rb +103 -0
  137. data/lib/mongo/protocol/serializers.rb +1 -1
  138. data/lib/mongo/protocol/update.rb +82 -14
  139. data/lib/mongo/retryable.rb +83 -0
  140. data/lib/mongo/server/connectable.rb +21 -25
  141. data/lib/mongo/server/connection.rb +75 -4
  142. data/lib/mongo/server/connection_pool/queue.rb +15 -0
  143. data/lib/mongo/server/connection_pool.rb +12 -0
  144. data/lib/mongo/server/description/features.rb +2 -1
  145. data/lib/mongo/server/description.rb +52 -1
  146. data/lib/mongo/server/monitor/connection.rb +26 -2
  147. data/lib/mongo/server/monitor.rb +19 -3
  148. data/lib/mongo/server.rb +39 -5
  149. data/lib/mongo/server_selector/selectable.rb +40 -31
  150. data/lib/mongo/server_selector.rb +19 -10
  151. data/lib/mongo/socket/ssl.rb +28 -16
  152. data/lib/mongo/socket/tcp.rb +3 -3
  153. data/lib/mongo/socket/unix.rb +5 -8
  154. data/lib/mongo/socket.rb +11 -4
  155. data/lib/mongo/uri.rb +248 -137
  156. data/lib/mongo/version.rb +1 -1
  157. data/lib/mongo.rb +5 -3
  158. data/spec/mongo/address/unix_spec.rb +1 -1
  159. data/spec/mongo/address_spec.rb +25 -0
  160. data/spec/mongo/auth/cr_spec.rb +9 -1
  161. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  162. data/spec/mongo/auth/ldap_spec.rb +9 -1
  163. data/spec/mongo/auth/scram_spec.rb +9 -1
  164. data/spec/mongo/auth/user/view_spec.rb +26 -1
  165. data/spec/mongo/auth/x509_spec.rb +9 -1
  166. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  167. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  168. data/spec/mongo/bulk_write_spec.rb +428 -0
  169. data/spec/mongo/client_spec.rb +167 -17
  170. data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
  171. data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
  172. data/spec/mongo/cluster/topology/single_spec.rb +12 -4
  173. data/spec/mongo/cluster_spec.rb +55 -10
  174. data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
  175. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  176. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  177. data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
  178. data/spec/mongo/collection/view/readable_spec.rb +238 -6
  179. data/spec/mongo/collection/view/writable_spec.rb +4 -4
  180. data/spec/mongo/collection/view_spec.rb +459 -71
  181. data/spec/mongo/collection_spec.rb +1291 -9
  182. data/spec/mongo/command_monitoring_spec.rb +51 -0
  183. data/spec/mongo/connection_string_spec.rb +115 -0
  184. data/spec/mongo/crud_spec.rb +2 -2
  185. data/spec/mongo/cursor_spec.rb +3 -3
  186. data/spec/mongo/database_spec.rb +47 -11
  187. data/spec/mongo/dbref_spec.rb +149 -0
  188. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  189. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  190. data/spec/mongo/grid/file_spec.rb +8 -8
  191. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  192. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  193. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  194. data/spec/mongo/grid/stream_spec.rb +48 -0
  195. data/spec/mongo/gridfs_spec.rb +50 -0
  196. data/spec/mongo/logger_spec.rb +0 -40
  197. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  198. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
  199. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
  200. data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
  201. data/spec/mongo/monitoring_spec.rb +168 -0
  202. data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
  203. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  204. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
  205. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  206. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
  207. data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
  208. data/spec/mongo/operation/read/get_more_spec.rb +0 -16
  209. data/spec/mongo/operation/read/query_spec.rb +19 -16
  210. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  211. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
  212. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
  213. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
  214. data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
  215. data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
  216. data/spec/mongo/operation/write/command/update_spec.rb +0 -16
  217. data/spec/mongo/operation/write/delete_spec.rb +4 -4
  218. data/spec/mongo/operation/write/insert_spec.rb +2 -13
  219. data/spec/mongo/operation/write/update_spec.rb +7 -7
  220. data/spec/mongo/options/redacted_spec.rb +350 -0
  221. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  222. data/spec/mongo/protocol/query_spec.rb +15 -30
  223. data/spec/mongo/retryable_spec.rb +147 -0
  224. data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
  225. data/spec/mongo/server/connection_pool_spec.rb +50 -6
  226. data/spec/mongo/server/connection_spec.rb +49 -4
  227. data/spec/mongo/server/description_spec.rb +49 -3
  228. data/spec/mongo/server/monitor_spec.rb +51 -0
  229. data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
  230. data/spec/mongo/server_selection_rtt_spec.rb +37 -57
  231. data/spec/mongo/server_selection_spec.rb +19 -9
  232. data/spec/mongo/server_selector/nearest_spec.rb +35 -27
  233. data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
  234. data/spec/mongo/server_selector/primary_spec.rb +21 -14
  235. data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
  236. data/spec/mongo/server_selector/secondary_spec.rb +24 -22
  237. data/spec/mongo/server_selector_spec.rb +87 -24
  238. data/spec/mongo/server_spec.rb +94 -8
  239. data/spec/mongo/socket/ssl_spec.rb +123 -13
  240. data/spec/mongo/socket/unix_spec.rb +52 -0
  241. data/spec/mongo/uri_spec.rb +295 -67
  242. data/spec/spec_helper.rb +40 -24
  243. data/spec/support/authorization.rb +23 -9
  244. data/spec/support/certificates/client.pem +4 -4
  245. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  246. data/spec/support/command_monitoring/command.yml +42 -0
  247. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  248. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  249. data/spec/support/command_monitoring/find.yml +219 -0
  250. data/spec/support/command_monitoring/insertMany.yml +81 -0
  251. data/spec/support/command_monitoring/insertOne.yml +51 -0
  252. data/spec/support/command_monitoring/updateMany.yml +67 -0
  253. data/spec/support/command_monitoring/updateOne.yml +95 -0
  254. data/spec/support/command_monitoring.rb +365 -0
  255. data/spec/support/connection_string.rb +228 -0
  256. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  257. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  258. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  259. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  260. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  261. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  262. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  263. data/spec/support/crud/read.rb +22 -19
  264. data/spec/support/crud/write.rb +58 -27
  265. data/spec/support/crud.rb +10 -2
  266. data/spec/support/gridfs.rb +637 -0
  267. data/spec/support/gridfs_tests/delete.yml +157 -0
  268. data/spec/support/gridfs_tests/download.yml +210 -0
  269. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  270. data/spec/support/gridfs_tests/upload.yml +158 -0
  271. data/spec/support/matchers.rb +1 -1
  272. data/spec/support/sdam/rs/equal_electionids.yml +44 -0
  273. data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
  274. data/spec/support/sdam/rs/null_election_id.yml +144 -0
  275. data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
  276. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  277. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  278. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  279. data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
  280. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  281. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  282. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  283. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  284. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  285. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  286. data/spec/support/server_discovery_and_monitoring.rb +22 -3
  287. data/spec/support/server_selection.rb +3 -1
  288. data/spec/support/shared/bulk_write.rb +218 -22
  289. data/spec/support/shared/server_selector.rb +80 -14
  290. data.tar.gz.sig +0 -0
  291. metadata +188 -59
  292. metadata.gz.sig +0 -0
  293. data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
  294. data/lib/mongo/bulk_write/deletable.rb +0 -56
  295. data/lib/mongo/bulk_write/insertable.rb +0 -48
  296. data/lib/mongo/bulk_write/replacable.rb +0 -57
  297. data/lib/mongo/bulk_write/updatable.rb +0 -68
  298. data/lib/mongo/grid/fs.rb +0 -149
  299. data/lib/mongo/operation/list_collections/result.rb +0 -114
  300. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  301. data/lib/mongo/operation/read/collections_info.rb +0 -68
  302. data/lib/mongo/operation/read/indexes.rb +0 -69
  303. data/lib/mongo/operation/read/list_collections.rb +0 -76
  304. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  305. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  306. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  307. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  308. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  309. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  310. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
  311. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  312. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  313. data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
  314. data/spec/mongo/grid/fs_spec.rb +0 -160
  315. data/spec/mongo/loggable_spec.rb +0 -63
  316. data/spec/mongo/operation/aggregate_spec.rb +0 -127
  317. /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -1,130 +0,0 @@
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
- require 'mongo/operation/write/bulk/bulk_mergable'
16
- require 'mongo/operation/write/bulk/legacy_bulk_mergable'
17
-
18
- module Mongo
19
- module Operation
20
- module Write
21
- class BulkInsert
22
-
23
- # Defines custom behaviour of results when inserting.
24
- #
25
- # @since 2.0.0
26
- class Result < Operation::Result
27
- include BulkMergable
28
-
29
- # Get the ids of the inserted documents.
30
- #
31
- # @since 2.0.0
32
- attr_reader :inserted_ids
33
-
34
- # Initialize a new result.
35
- #
36
- # @example Instantiate the result.
37
- # Result.new(replies, inserted_ids)
38
- #
39
- # @param [ Protocol::Reply ] replies The wire protocol replies.
40
- # @param [ Array<Object> ] ids The ids of the inserted documents.
41
- #
42
- # @since 2.0.0
43
- def initialize(replies, ids)
44
- @replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
45
- @inserted_ids = ids
46
- end
47
-
48
- # Gets the number of documents inserted.
49
- #
50
- # @example Get the number of documents inserted.
51
- # result.n_inserted
52
- #
53
- # @return [ Integer ] The number of documents inserted.
54
- #
55
- # @since 2.0.0
56
- def n_inserted
57
- written_count
58
- end
59
-
60
- # Gets the id of the document inserted.
61
- #
62
- # @example Get id of the document inserted.
63
- # result.inserted_id
64
- #
65
- # @return [ Object ] The id of the document inserted.
66
- #
67
- # @since 2.0.0
68
- def inserted_id
69
- inserted_ids.first
70
- end
71
- end
72
-
73
- # Defines custom behaviour of results when inserting.
74
- # For server versions < 2.5.5 (that don't use write commands).
75
- #
76
- # @since 2.0.0
77
- class LegacyResult < Operation::Result
78
- include LegacyBulkMergable
79
-
80
- # Get the ids of the inserted documents.
81
- #
82
- # @since 2.0.0
83
- attr_reader :inserted_ids
84
-
85
- # Initialize a new result.
86
- #
87
- # @example Instantiate the result.
88
- # Result.new(replies, inserted_ids)
89
- #
90
- # @param [ Protocol::Reply ] replies The wire protocol replies.
91
- # @param [ Array<Object> ] ids The ids of the inserted documents.
92
- #
93
- # @since 2.0.0
94
- def initialize(replies, ids)
95
- @replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
96
- @inserted_ids = ids
97
- end
98
-
99
- # Gets the number of documents inserted.
100
- #
101
- # @example Get the number of documents inserted.
102
- # result.n_inserted
103
- #
104
- # @return [ Integer ] The number of documents inserted.
105
- #
106
- # @since 2.0.0
107
- def n_inserted
108
- return 0 unless acknowledged?
109
- @replies.reduce(0) do |n, reply|
110
- n += 1 unless reply_write_errors?(reply)
111
- n
112
- end
113
- end
114
-
115
- # Gets the id of the document inserted.
116
- #
117
- # @example Get id of the document inserted.
118
- # result.inserted_id
119
- #
120
- # @return [ Object ] The id of the document inserted.
121
- #
122
- # @since 2.0.0
123
- def inserted_id
124
- inserted_ids.first
125
- end
126
- end
127
- end
128
- end
129
- end
130
- end
@@ -1,132 +0,0 @@
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
- require 'mongo/operation/write/bulk/bulk_insert/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
-
21
- # A MongoDB bulk insert operation.
22
- # This class should only be used by the Bulk API.
23
- #
24
- # @note If a server with version >= 2.5.5 is being used, a write command
25
- # operation will be created and sent instead.
26
- #
27
- # @example Create the new insert operation.
28
- # Write::BulkInsert.new({
29
- # :documents => [{ :foo => 1 }],
30
- # :db_name => 'test',
31
- # :coll_name => 'test_coll',
32
- # :write_concern => write_concern,
33
- # :ordered => false
34
- # })
35
- #
36
- # Initialization:
37
- # param [ Hash ] spec The specifications for the insert.
38
- #
39
- # option spec :documents [ Array ] The documents to insert.
40
- # option spec :db_name [ String ] The name of the database.
41
- # option spec :coll_name [ String ] The name of the collection.
42
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern.
43
- # option spec :ordered [ true, false ] Whether the operations should be
44
- # executed in order.
45
- # option spec :options [ Hash ] Options for the command, if it ends up being a
46
- # write command.
47
- #
48
- # @since 2.0.0
49
- class BulkInsert
50
- include Specifiable
51
- include Idable
52
-
53
- # Execute the bulk insert operation.
54
- #
55
- # @example Execute the operation.
56
- # operation.execute(context)
57
- #
58
- # @param [ Mongo::Server::Context ] context The context for this operation.
59
- #
60
- # @return [ Result ] The operation result.
61
- #
62
- # @since 2.0.0
63
- def execute(context)
64
- if context.features.write_command_enabled?
65
- execute_write_command(context)
66
- else
67
- execute_message(context)
68
- end
69
- end
70
-
71
- private
72
-
73
- def execute_write_command(context)
74
- command_spec = spec.merge(:documents => ensure_ids(documents))
75
- Result.new(Command::Insert.new(command_spec).execute(context), @ids)
76
- end
77
-
78
- def execute_message(context)
79
- replies = []
80
- messages.map do |m|
81
- context.with_connection do |connection|
82
- result = LegacyResult.new(connection.dispatch([ m, gle ].compact), @ids)
83
- replies << result.reply
84
- if stop_sending?(result)
85
- return LegacyResult.new(replies, @ids)
86
- end
87
- end
88
- end
89
- LegacyResult.new(replies.compact.empty? ? nil : replies, @ids)
90
- end
91
-
92
- def stop_sending?(result)
93
- ordered? && !result.successful?
94
- end
95
-
96
- # @todo put this somewhere else
97
- def ordered?
98
- @spec.fetch(:ordered, true)
99
- end
100
-
101
- def initialize_copy(original)
102
- @spec = original.spec.dup
103
- @spec[DOCUMENTS] = original.spec[DOCUMENTS].clone
104
- end
105
-
106
- def gle
107
- gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
108
- Mongo::WriteConcern.get(:w => 1).get_last_error :
109
- write_concern.get_last_error
110
- if gle_message
111
- Protocol::Query.new(
112
- db_name,
113
- Database::COMMAND,
114
- gle_message,
115
- options.merge(limit: -1)
116
- )
117
- end
118
- end
119
-
120
- def messages
121
- if ordered? || gle
122
- documents.collect do |doc|
123
- Protocol::Insert.new(db_name, coll_name, ensure_ids([ doc ]), options)
124
- end
125
- else
126
- [ Protocol::Insert.new(db_name, coll_name, ensure_ids(documents), { :flags => [:continue_on_error] }) ]
127
- end
128
- end
129
- end
130
- end
131
- end
132
- end
@@ -1,67 +0,0 @@
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
@@ -1,162 +0,0 @@
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
- require 'mongo/operation/write/bulk/bulk_mergable'
16
- require 'mongo/operation/write/bulk/legacy_bulk_mergable'
17
-
18
- module Mongo
19
- module Operation
20
- module Write
21
- class BulkUpdate
22
-
23
- # Defines custom behaviour of results when updating.
24
- #
25
- # @since 2.0.0
26
- class Result < Operation::Result
27
- include BulkMergable
28
-
29
- # The number of modified docs field in the result.
30
- #
31
- # @since 2.0.0
32
- MODIFIED = 'nModified'.freeze
33
-
34
- # The upserted docs field in the result.
35
- #
36
- # @since 2.0.0
37
- UPSERTED = 'upserted'.freeze
38
-
39
- # Gets the number of documents upserted.
40
- #
41
- # @example Get the upserted count.
42
- # result.n_upserted
43
- #
44
- # @return [ Integer ] The number of documents upserted.
45
- #
46
- # @since 2.0.0
47
- def n_upserted
48
- return 0 unless acknowledged?
49
- @replies.reduce(0) do |n, reply|
50
- if upsert?(reply)
51
- n += 1
52
- else
53
- n += 0
54
- end
55
- end
56
- end
57
-
58
- # Gets the number of documents matched.
59
- #
60
- # @example Get the matched count.
61
- # result.n_matched
62
- #
63
- # @return [ Integer ] The number of documents matched.
64
- #
65
- # @since 2.0.0
66
- def n_matched
67
- return 0 unless acknowledged?
68
- @replies.reduce(0) do |n, reply|
69
- if upsert?(reply)
70
- n += 0
71
- else
72
- n += reply.documents.first[N]
73
- end
74
- end
75
- end
76
-
77
- # Gets the number of documents modified.
78
- #
79
- # @example Get the modified count.
80
- # result.n_modified
81
- #
82
- # @return [ Integer ] The number of documents modified.
83
- #
84
- # @since 2.0.0
85
- def n_modified
86
- return 0 unless acknowledged?
87
- @replies.reduce(0) do |n, reply|
88
- n += reply.documents.first[MODIFIED] || 0
89
- end
90
- end
91
-
92
- private
93
-
94
- def upsert?(reply)
95
- reply.documents.first[UPSERTED]
96
- end
97
- end
98
-
99
- # Defines custom behaviour of results when updating.
100
- # For server versions < 2.5.5 (that don't use write commands).
101
- #
102
- # @since 2.0.0
103
- class LegacyResult < Operation::Result
104
- include LegacyBulkMergable
105
-
106
- # The updated existing field in the result.
107
- #
108
- # @since 2.0.0
109
- UPDATED_EXISTING = 'updatedExisting'.freeze
110
-
111
- # Gets the number of documents upserted.
112
- #
113
- # @example Get the upserted count.
114
- # result.n_upserted
115
- #
116
- # @return [ Integer ] The number of documents upserted.
117
- #
118
- # @since 2.0.0
119
- def n_upserted
120
- return 0 unless acknowledged?
121
- @replies.reduce(0) do |n, reply|
122
- if upsert?(reply)
123
- n += reply.documents.first[N]
124
- else
125
- n
126
- end
127
- end
128
- end
129
-
130
- # Gets the number of documents matched.
131
- #
132
- # @example Get the matched count.
133
- # result.n_matched
134
- #
135
- # @return [ Integer ] The number of documents matched.
136
- #
137
- # @since 2.0.0
138
- def n_matched
139
- return 0 unless acknowledged?
140
- @replies.reduce(0) do |n, reply|
141
- if upsert?(reply)
142
- n
143
- else
144
- n += reply.documents.first[N]
145
- end
146
- end
147
- end
148
-
149
- private
150
-
151
- def upsert?(reply)
152
- !updated_existing?(reply) && reply.documents.first[N] == 1
153
- end
154
-
155
- def updated_existing?(reply)
156
- reply.documents.first[UPDATED_EXISTING]
157
- end
158
- end
159
- end
160
- end
161
- end
162
- end
@@ -1,154 +0,0 @@
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
- require 'mongo/operation/write/bulk/bulk_update/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
-
21
- # A MongoDB bulk update operation.
22
- #
23
- # @note If the server version is >= 2.5.5, a write command operation
24
- # will be created and sent instead.
25
- #
26
- # @example Create the update operation.
27
- # Write::BulkUpdate.new({
28
- # :updates => [
29
- # {
30
- # :q => { :foo => 1 },
31
- # :u => { :$set => { :bar => 1 }},
32
- # :multi => true,
33
- # :upsert => false
34
- # }
35
- # ],
36
- # :db_name => 'test',
37
- # :coll_name => 'test_coll',
38
- # :write_concern => write_concern,
39
- # :ordered => false
40
- # })
41
- #
42
- # Initialization:
43
- # param [ Hash ] spec The specifications for the update.
44
- #
45
- # option spec :updates [ Array ] The update documents.
46
- # option spec :db_name [ String ] The name of the database on which
47
- # the query should be run.
48
- # option spec :coll_name [ String ] The name of the collection on which
49
- # the query should be run.
50
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern.
51
- # option spec :ordered [ true, false ] Whether the operations should be
52
- # executed in order.
53
- # option spec :options [ Hash ] Options for the command, if it ends up being a
54
- # write command.
55
- #
56
- # @since 2.0.0
57
- class BulkUpdate
58
- include Executable
59
- include Specifiable
60
-
61
- # Execute the update operation.
62
- #
63
- # @example Execute the operation.
64
- # operation.execute(context)
65
- #
66
- # @param [ Mongo::Server::Context ] context The context for this operation.
67
- #
68
- # @return [ Result ] The operation result.
69
- #
70
- # @since 2.0.0
71
- def execute(context)
72
- if context.features.write_command_enabled?
73
- execute_write_command(context)
74
- else
75
- execute_message(context)
76
- end
77
- end
78
-
79
- # Set the write concern on this operation.
80
- #
81
- # @example Set a write concern.
82
- # new_op = operation.write_concern(:w => 2)
83
- #
84
- # @param [ Hash ] wc The write concern.
85
- #
86
- # @since 2.0.0
87
- def write_concern(wc = nil)
88
- if wc
89
- self.class.new(spec.merge(write_concern: WriteConcern.get(wc)))
90
- else
91
- spec[WRITE_CONCERN]
92
- end
93
- end
94
-
95
- private
96
-
97
- def execute_write_command(context)
98
- Result.new(Command::Update.new(spec).execute(context))
99
- end
100
-
101
- def execute_message(context)
102
- replies = messages.map do |m|
103
- context.with_connection do |connection|
104
- result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
105
- if stop_sending?(result)
106
- return result
107
- else
108
- result.reply
109
- end
110
- end
111
- end
112
- LegacyResult.new(replies.compact.empty? ? nil : replies)
113
- end
114
-
115
- def stop_sending?(result)
116
- ordered? && !result.successful?
117
- end
118
-
119
- # @todo put this somewhere else
120
- def ordered?
121
- @spec.fetch(:ordered, true)
122
- end
123
-
124
- def gle
125
- gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
126
- Mongo::WriteConcern.get(:w => 1).get_last_error :
127
- write_concern.get_last_error
128
- if gle_message
129
- Protocol::Query.new(
130
- db_name,
131
- Database::COMMAND,
132
- gle_message,
133
- options.merge(limit: -1)
134
- )
135
- end
136
- end
137
-
138
- def initialize_copy(original)
139
- @spec = original.spec.dup
140
- @spec[UPDATES] = original.spec[UPDATES].dup
141
- end
142
-
143
- def messages
144
- updates.collect do |u|
145
- opts = { :flags => [] }
146
- opts[:flags] << :multi_update if !!u[:multi]
147
- opts[:flags] << :upsert if !!u[:upsert]
148
- Protocol::Update.new(db_name, coll_name, u[:q], u[:u], opts)
149
- end
150
- end
151
- end
152
- end
153
- end
154
- end