mongo 2.5.1 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +3 -2
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +1 -1
  5. data/lib/mongo/auth/user/view.rb +4 -4
  6. data/lib/mongo/bulk_write.rb +14 -19
  7. data/lib/mongo/cluster.rb +4 -2
  8. data/lib/mongo/cluster/app_metadata.rb +1 -1
  9. data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
  10. data/lib/mongo/collection.rb +13 -13
  11. data/lib/mongo/collection/view.rb +2 -1
  12. data/lib/mongo/collection/view/aggregation.rb +1 -1
  13. data/lib/mongo/collection/view/change_stream.rb +1 -1
  14. data/lib/mongo/collection/view/iterable.rb +4 -4
  15. data/lib/mongo/collection/view/map_reduce.rb +3 -3
  16. data/lib/mongo/collection/view/readable.rb +26 -20
  17. data/lib/mongo/collection/view/writable.rb +12 -12
  18. data/lib/mongo/cursor.rb +4 -7
  19. data/lib/mongo/database.rb +2 -2
  20. data/lib/mongo/database/view.rb +1 -1
  21. data/lib/mongo/grid/stream/write.rb +1 -1
  22. data/lib/mongo/index/view.rb +3 -3
  23. data/lib/mongo/operation.rb +38 -24
  24. data/lib/mongo/operation/aggregate.rb +53 -0
  25. data/lib/mongo/operation/aggregate/command.rb +59 -0
  26. data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
  27. data/lib/mongo/operation/aggregate/result.rb +87 -0
  28. data/lib/mongo/operation/collections_info.rb +62 -0
  29. data/lib/mongo/operation/collections_info/result.rb +39 -0
  30. data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
  31. data/lib/mongo/operation/command/command.rb +38 -0
  32. data/lib/mongo/operation/command/op_msg.rb +53 -0
  33. data/lib/mongo/operation/count.rb +48 -0
  34. data/lib/mongo/operation/count/command.rb +38 -0
  35. data/lib/mongo/operation/count/op_msg.rb +38 -0
  36. data/lib/mongo/operation/create.rb +48 -0
  37. data/lib/mongo/operation/create/command.rb +38 -0
  38. data/lib/mongo/operation/create/op_msg.rb +37 -0
  39. data/lib/mongo/operation/create_index.rb +48 -0
  40. data/lib/mongo/operation/create_index/command.rb +42 -0
  41. data/lib/mongo/operation/create_index/op_msg.rb +41 -0
  42. data/lib/mongo/operation/create_user.rb +48 -0
  43. data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
  44. data/lib/mongo/operation/create_user/op_msg.rb +41 -0
  45. data/lib/mongo/operation/delete.rb +38 -0
  46. data/lib/mongo/operation/delete/bulk_result.rb +46 -0
  47. data/lib/mongo/operation/delete/command.rb +59 -0
  48. data/lib/mongo/operation/delete/legacy.rb +69 -0
  49. data/lib/mongo/operation/delete/op_msg.rb +60 -0
  50. data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
  51. data/lib/mongo/operation/distinct.rb +48 -0
  52. data/lib/mongo/operation/distinct/command.rb +38 -0
  53. data/lib/mongo/operation/distinct/op_msg.rb +38 -0
  54. data/lib/mongo/operation/drop.rb +48 -0
  55. data/lib/mongo/operation/drop/command.rb +38 -0
  56. data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
  57. data/lib/mongo/operation/drop_database.rb +48 -0
  58. data/lib/mongo/operation/drop_database/command.rb +38 -0
  59. data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
  60. data/lib/mongo/operation/drop_index.rb +48 -0
  61. data/lib/mongo/operation/drop_index/command.rb +42 -0
  62. data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
  63. data/lib/mongo/operation/explain.rb +52 -0
  64. data/lib/mongo/operation/explain/command.rb +54 -0
  65. data/lib/mongo/operation/explain/legacy.rb +53 -0
  66. data/lib/mongo/operation/explain/op_msg.rb +54 -0
  67. data/lib/mongo/operation/explain/result.rb +50 -0
  68. data/lib/mongo/operation/find.rb +52 -0
  69. data/lib/mongo/operation/find/command.rb +54 -0
  70. data/lib/mongo/operation/find/legacy.rb +55 -0
  71. data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
  72. data/lib/mongo/operation/find/op_msg.rb +59 -0
  73. data/lib/mongo/operation/find/result.rb +60 -0
  74. data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
  75. data/lib/mongo/operation/get_more/command.rb +54 -0
  76. data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
  77. data/lib/mongo/operation/get_more/op_msg.rb +58 -0
  78. data/lib/mongo/operation/get_more/result.rb +60 -0
  79. data/lib/mongo/operation/indexes.rb +52 -0
  80. data/lib/mongo/operation/indexes/command.rb +54 -0
  81. data/lib/mongo/operation/indexes/legacy.rb +57 -0
  82. data/lib/mongo/operation/indexes/op_msg.rb +54 -0
  83. data/lib/mongo/operation/indexes/result.rb +97 -0
  84. data/lib/mongo/operation/insert.rb +40 -0
  85. data/lib/mongo/operation/insert/bulk_result.rb +70 -0
  86. data/lib/mongo/operation/insert/command.rb +65 -0
  87. data/lib/mongo/operation/insert/legacy.rb +72 -0
  88. data/lib/mongo/operation/insert/op_msg.rb +61 -0
  89. data/lib/mongo/operation/insert/result.rb +64 -0
  90. data/lib/mongo/operation/kill_cursors.rb +25 -14
  91. data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
  92. data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
  93. data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
  94. data/lib/mongo/operation/list_collections.rb +49 -0
  95. data/lib/mongo/operation/list_collections/command.rb +60 -0
  96. data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
  97. data/lib/mongo/operation/list_collections/result.rb +92 -0
  98. data/lib/mongo/operation/map_reduce.rb +49 -0
  99. data/lib/mongo/operation/map_reduce/command.rb +55 -0
  100. data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
  101. data/lib/mongo/operation/map_reduce/result.rb +129 -0
  102. data/lib/mongo/operation/parallel_scan.rb +49 -0
  103. data/lib/mongo/operation/parallel_scan/command.rb +67 -0
  104. data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
  105. data/lib/mongo/operation/parallel_scan/result.rb +61 -0
  106. data/lib/mongo/operation/remove_user.rb +48 -0
  107. data/lib/mongo/operation/remove_user/command.rb +42 -0
  108. data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
  109. data/lib/mongo/operation/result.rb +3 -1
  110. data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
  111. data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
  112. data/lib/mongo/operation/shared/executable.rb +45 -0
  113. data/lib/mongo/operation/shared/idable.rb +64 -0
  114. data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
  115. data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
  116. data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
  117. data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
  118. data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
  119. data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
  120. data/lib/mongo/operation/shared/write.rb +81 -0
  121. data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
  122. data/lib/mongo/operation/update.rb +38 -0
  123. data/lib/mongo/operation/update/bulk_result.rb +126 -0
  124. data/lib/mongo/operation/update/command.rb +60 -0
  125. data/lib/mongo/operation/update/legacy.rb +80 -0
  126. data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
  127. data/lib/mongo/operation/update/op_msg.rb +60 -0
  128. data/lib/mongo/operation/update/result.rb +102 -0
  129. data/lib/mongo/operation/update_user.rb +48 -0
  130. data/lib/mongo/operation/update_user/command.rb +41 -0
  131. data/lib/mongo/operation/update_user/op_msg.rb +41 -0
  132. data/lib/mongo/operation/users_info.rb +49 -0
  133. data/lib/mongo/operation/users_info/command.rb +58 -0
  134. data/lib/mongo/operation/users_info/op_msg.rb +57 -0
  135. data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
  136. data/lib/mongo/server.rb +3 -5
  137. data/lib/mongo/server/connectable.rb +3 -3
  138. data/lib/mongo/server/connection.rb +14 -0
  139. data/lib/mongo/server_selector.rb +1 -1
  140. data/lib/mongo/server_selector/selectable.rb +3 -12
  141. data/lib/mongo/session.rb +13 -1
  142. data/lib/mongo/session/session_pool.rb +1 -1
  143. data/lib/mongo/version.rb +1 -1
  144. data/spec/mongo/client_spec.rb +15 -22
  145. data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
  146. data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
  147. data/spec/mongo/cluster_spec.rb +2 -2
  148. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  149. data/spec/mongo/collection_spec.rb +105 -14
  150. data/spec/mongo/cursor_spec.rb +11 -11
  151. data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
  152. data/spec/mongo/max_staleness_spec.rb +3 -1
  153. data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
  154. data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
  155. data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
  156. data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
  157. data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
  158. data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
  159. data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
  160. data/spec/mongo/operation/delete/command_spec.rb +111 -0
  161. data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
  162. data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
  163. data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
  164. data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
  165. data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
  166. data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
  167. data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
  168. data/spec/mongo/operation/insert/command_spec.rb +110 -0
  169. data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
  170. data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
  171. data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
  172. data/spec/mongo/operation/limited_spec.rb +3 -3
  173. data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
  174. data/spec/mongo/operation/read_preference_spec.rb +2 -2
  175. data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
  176. data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
  177. data/spec/mongo/operation/update/command_spec.rb +114 -0
  178. data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
  179. data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
  180. data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
  181. data/spec/mongo/server/connection_spec.rb +0 -22
  182. data/spec/mongo/server_selector_spec.rb +55 -0
  183. data/spec/mongo/server_spec.rb +0 -42
  184. data/spec/mongo/session/session_pool_spec.rb +1 -1
  185. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  186. data/spec/mongo/uri_spec.rb +2 -2
  187. data/spec/support/gridfs_tests/delete.yml +4 -38
  188. data/spec/support/gridfs_tests/download.yml +12 -30
  189. data/spec/support/server_selection.rb +1 -1
  190. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
  191. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
  192. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
  193. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
  194. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
  195. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
  196. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
  197. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  198. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
  199. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
  200. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  201. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
  202. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
  203. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
  204. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
  205. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
  206. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
  207. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  208. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
  209. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
  210. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  211. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
  212. data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
  213. data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
  214. data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
  215. data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
  216. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
  217. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
  218. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
  219. data/spec/support/shared/session.rb +46 -5
  220. metadata +174 -116
  221. metadata.gz.sig +1 -2
  222. data/lib/mongo/operation/commands.rb +0 -31
  223. data/lib/mongo/operation/commands/aggregate.rb +0 -63
  224. data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
  225. data/lib/mongo/operation/commands/collections_info.rb +0 -71
  226. data/lib/mongo/operation/commands/create.rb +0 -49
  227. data/lib/mongo/operation/commands/drop.rb +0 -49
  228. data/lib/mongo/operation/commands/drop_database.rb +0 -49
  229. data/lib/mongo/operation/commands/explain.rb +0 -27
  230. data/lib/mongo/operation/commands/explain/result.rb +0 -52
  231. data/lib/mongo/operation/commands/find/result.rb +0 -62
  232. data/lib/mongo/operation/commands/get_more.rb +0 -27
  233. data/lib/mongo/operation/commands/get_more/result.rb +0 -62
  234. data/lib/mongo/operation/commands/indexes.rb +0 -73
  235. data/lib/mongo/operation/commands/list_collections.rb +0 -48
  236. data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
  237. data/lib/mongo/operation/commands/list_indexes.rb +0 -48
  238. data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
  239. data/lib/mongo/operation/commands/map_reduce.rb +0 -65
  240. data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
  241. data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
  242. data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
  243. data/lib/mongo/operation/commands/users_info.rb +0 -52
  244. data/lib/mongo/operation/read.rb +0 -16
  245. data/lib/mongo/operation/read/get_more.rb +0 -52
  246. data/lib/mongo/operation/read/query.rb +0 -55
  247. data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
  248. data/lib/mongo/operation/write.rb +0 -22
  249. data/lib/mongo/operation/write/bulk.rb +0 -20
  250. data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
  251. data/lib/mongo/operation/write/bulk/delete.rb +0 -71
  252. data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
  253. data/lib/mongo/operation/write/bulk/insert.rb +0 -96
  254. data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
  255. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
  256. data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
  257. data/lib/mongo/operation/write/bulk/update.rb +0 -81
  258. data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
  259. data/lib/mongo/operation/write/command.rb +0 -23
  260. data/lib/mongo/operation/write/command/create_index.rb +0 -79
  261. data/lib/mongo/operation/write/command/create_user.rb +0 -61
  262. data/lib/mongo/operation/write/command/delete.rb +0 -79
  263. data/lib/mongo/operation/write/command/drop_index.rb +0 -80
  264. data/lib/mongo/operation/write/command/insert.rb +0 -69
  265. data/lib/mongo/operation/write/command/remove_user.rb +0 -60
  266. data/lib/mongo/operation/write/command/update.rb +0 -77
  267. data/lib/mongo/operation/write/command/update_user.rb +0 -61
  268. data/lib/mongo/operation/write/command/writable.rb +0 -70
  269. data/lib/mongo/operation/write/delete.rb +0 -75
  270. data/lib/mongo/operation/write/gle.rb +0 -49
  271. data/lib/mongo/operation/write/idable.rb +0 -63
  272. data/lib/mongo/operation/write/insert.rb +0 -74
  273. data/lib/mongo/operation/write/insert/result.rb +0 -62
  274. data/lib/mongo/operation/write/update.rb +0 -91
  275. data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -1,129 +0,0 @@
1
- # Copyright (C) 2014-2017 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Mongo
16
- module Operation
17
- module Write
18
- module Bulk
19
- class Insert
20
-
21
- # Defines custom behaviour of results when inserting.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
- include Mergable
26
-
27
- # Get the ids of the inserted documents.
28
- #
29
- # @since 2.0.0
30
- attr_reader :inserted_ids
31
-
32
- # Initialize a new result.
33
- #
34
- # @example Instantiate the result.
35
- # Result.new(replies, inserted_ids)
36
- #
37
- # @param [ Protocol::Message ] replies The wire protocol replies.
38
- # @param [ Array<Object> ] ids The ids of the inserted documents.
39
- #
40
- # @since 2.0.0
41
- def initialize(replies, ids)
42
- @replies = [ *replies ] if replies
43
- @inserted_ids = ids
44
- end
45
-
46
- # Gets the number of documents inserted.
47
- #
48
- # @example Get the number of documents inserted.
49
- # result.n_inserted
50
- #
51
- # @return [ Integer ] The number of documents inserted.
52
- #
53
- # @since 2.0.0
54
- def n_inserted
55
- written_count
56
- end
57
-
58
- # Gets the id of the document inserted.
59
- #
60
- # @example Get id of the document inserted.
61
- # result.inserted_id
62
- #
63
- # @return [ Object ] The id of the document inserted.
64
- #
65
- # @since 2.0.0
66
- def inserted_id
67
- inserted_ids.first
68
- end
69
- end
70
-
71
- # Defines custom behaviour of results when inserting.
72
- # For server versions < 2.5.5 (that don't use write commands).
73
- #
74
- # @since 2.0.0
75
- class LegacyResult < Operation::Result
76
- include LegacyMergable
77
-
78
- # Get the ids of the inserted documents.
79
- #
80
- # @since 2.0.0
81
- attr_reader :inserted_ids
82
-
83
- # Initialize a new result.
84
- #
85
- # @example Instantiate the result.
86
- # Result.new(replies, inserted_ids)
87
- #
88
- # @param [ Protocol::Message ] replies The wire protocol replies.
89
- # @param [ Array<Object> ] ids The ids of the inserted documents.
90
- #
91
- # @since 2.0.0
92
- def initialize(replies, ids)
93
- @replies = [ *replies ] if replies
94
- @inserted_ids = ids
95
- end
96
-
97
- # Gets the number of documents inserted.
98
- #
99
- # @example Get the number of documents inserted.
100
- # result.n_inserted
101
- #
102
- # @return [ Integer ] The number of documents inserted.
103
- #
104
- # @since 2.0.0
105
- def n_inserted
106
- return 0 unless acknowledged?
107
- @replies.reduce(0) do |n, reply|
108
- n += 1 unless reply_write_errors?(reply)
109
- n
110
- end
111
- end
112
-
113
- # Gets the id of the document inserted.
114
- #
115
- # @example Get id of the document inserted.
116
- # result.inserted_id
117
- #
118
- # @return [ Object ] The id of the document inserted.
119
- #
120
- # @since 2.0.0
121
- def inserted_id
122
- inserted_ids.first
123
- end
124
- end
125
- end
126
- end
127
- end
128
- end
129
- end
@@ -1,87 +0,0 @@
1
- # Copyright (C) 2014-2017 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Mongo
16
- module Operation
17
- module Write
18
- module Bulk
19
-
20
- # This module contains common functionality for merging results from
21
- # writes during a bulk operation. Used for server versions < 2.6.
22
- #
23
- # @since 2.0.0
24
- module LegacyMergable
25
-
26
- # Aggregate the write errors returned from this result.
27
- #
28
- # @example Aggregate the write errors.
29
- # result.aggregate_write_errors(0)
30
- #
31
- # @param [ Integer ] count The number of documents already executed.
32
- #
33
- # @return [ Array ] The aggregate write errors.
34
- #
35
- # @since 2.0.0
36
- def aggregate_write_errors(count)
37
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
38
- if reply_write_errors?(reply)
39
- errors ||= []
40
- errors << { 'errmsg' => reply.documents.first[Error::ERROR],
41
- 'index' => count + i,
42
- 'code' => reply.documents.first[Error::CODE] }
43
- end
44
- errors
45
- end if @replies
46
- end
47
-
48
- # Aggregate the write concern errors returned from this result.
49
- #
50
- # @example Aggregate the write concern errors.
51
- # result.aggregate_write_concern_errors(4)
52
- #
53
- # @param [ Integer ] count The number of documents already executed.
54
- #
55
- # @return [ Array ] The aggregate write concern errors.
56
- #
57
- # @since 2.0.0
58
- def aggregate_write_concern_errors(count)
59
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
60
- if error = reply_write_errors?(reply)
61
- errors ||= []
62
- if note = reply.documents.first['wnote'] || reply.documents.first['jnote']
63
- code = reply.documents.first['code'] || Error::BAD_VALUE
64
- error_string = "#{code}: #{note}"
65
- elsif error == 'timeout'
66
- code = reply.documents.first['code'] || Error::UNKNOWN_ERROR
67
- error_string = "#{code}: #{error}"
68
- end
69
- errors << { 'errmsg' => error_string,
70
- 'index' => count + i,
71
- 'code' => code } if error_string
72
- end
73
- errors
74
- end if @replies
75
- end
76
-
77
- private
78
-
79
- def reply_write_errors?(reply)
80
- reply.documents.first[Error::ERROR] ||
81
- reply.documents.first[Error::ERRMSG]
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,73 +0,0 @@
1
- # Copyright (C) 2014-2017 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Mongo
16
- module Operation
17
- module Write
18
- module Bulk
19
-
20
- # This module contains common functionality for merging results from
21
- # write commands during a bulk operation. Used for server versions >= 2.6.
22
- #
23
- # @since 2.0.0
24
- module Mergable
25
-
26
- # Aggregate the write errors returned from this result.
27
- #
28
- # @example Aggregate the write errors.
29
- # result.aggregate_write_errors(0)
30
- #
31
- # @param [ Integer ] count The number of documents already executed.
32
- #
33
- # @return [ Array ] The aggregate write errors.
34
- #
35
- # @since 2.0.0
36
- def aggregate_write_errors(count)
37
- return unless @replies
38
- @replies.reduce(nil) do |errors, reply|
39
- if write_errors = reply.documents.first[Error::WRITE_ERRORS]
40
- wes = write_errors.collect do |we|
41
- we.merge!('index' => count + we['index'])
42
- end
43
- (errors || []) << wes if wes
44
- end
45
- end
46
- end
47
-
48
- # Aggregate the write concern errors returned from this result.
49
- #
50
- # @example Aggregate the write concern errors.
51
- # result.aggregate_write_concern_errors(100)
52
- #
53
- # @param [ Integer ] count The number of documents already executed.
54
- #
55
- # @return [ Array ] The aggregate write concern errors.
56
- #
57
- # @since 2.0.0
58
- def aggregate_write_concern_errors(count)
59
- return unless @replies
60
- @replies.each_with_index.reduce(nil) do |errors, (reply, _)|
61
- if write_concern_errors = reply.documents.first[Error::WRITE_CONCERN_ERRORS]
62
- (errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
63
- wce.merge!('index' => count + wce['index'])
64
- (errs || []) << write_concern_error
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,81 +0,0 @@
1
- # Copyright (C) 2014-2017 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'mongo/operation/write/bulk/update/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
- module Bulk
21
-
22
- # A MongoDB bulk update operation.
23
- #
24
- # @note If the server version is >= 2.5.5, a write command operation
25
- # will be created and sent instead.
26
- #
27
- # @example Create the update operation.
28
- # Write::BulkUpdate.new({
29
- # :updates => [
30
- # {
31
- # :q => { :foo => 1 },
32
- # :u => { :$set => { :bar => 1 }},
33
- # :multi => true,
34
- # :upsert => false
35
- # }
36
- # ],
37
- # :db_name => 'test',
38
- # :coll_name => 'test_coll',
39
- # :write_concern => write_concern,
40
- # :ordered => false
41
- # })
42
- #
43
- # Initialization:
44
- # param [ Hash ] spec The specifications for the update.
45
- #
46
- # option spec :updates [ Array ] The update documents.
47
- # option spec :db_name [ String ] The name of the database on which
48
- # the query should be run.
49
- # option spec :coll_name [ String ] The name of the collection on which
50
- # the query should be run.
51
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern.
52
- # option spec :ordered [ true, false ] Whether the operations should be
53
- # executed in order.
54
- # option spec :options [ Hash ] Options for the command, if it ends up being a
55
- # write command.
56
- #
57
- # @since 2.0.0
58
- class Update
59
- include Bulkable
60
- include Specifiable
61
-
62
- private
63
-
64
- def execute_write_command(server)
65
- Result.new(Command::Update.new(spec).execute(server))
66
- end
67
-
68
-
69
- def messages
70
- updates.collect do |u|
71
- opts = { :flags => [] }
72
- opts[:flags] << :multi_update if !!u[Operation::MULTI]
73
- opts[:flags] << :upsert if !!u[Operation::UPSERT]
74
- Protocol::Update.new(db_name, coll_name, u[Operation::Q], u[Operation::U], opts)
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -1,196 +0,0 @@
1
- # Copyright (C) 2014-2017 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Mongo
16
- module Operation
17
- module Write
18
- module Bulk
19
- class Update
20
-
21
- # Defines custom behaviour of results when updating.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
- include Mergable
26
-
27
- # The number of modified docs field in the result.
28
- #
29
- # @since 2.0.0
30
- MODIFIED = 'nModified'.freeze
31
-
32
- # The upserted docs field in the result.
33
- #
34
- # @since 2.0.0
35
- UPSERTED = 'upserted'.freeze
36
-
37
- # Gets the number of documents upserted.
38
- #
39
- # @example Get the upserted count.
40
- # result.n_upserted
41
- #
42
- # @return [ Integer ] The number of documents upserted.
43
- #
44
- # @since 2.0.0
45
- def n_upserted
46
- return 0 unless acknowledged?
47
- @replies.reduce(0) do |n, reply|
48
- if upsert?(reply)
49
- n += reply.documents.first[UPSERTED].size
50
- else
51
- n
52
- end
53
- end
54
- end
55
-
56
- # Gets the number of documents matched.
57
- #
58
- # @example Get the matched count.
59
- # result.n_matched
60
- #
61
- # @return [ Integer ] The number of documents matched.
62
- #
63
- # @since 2.0.0
64
- def n_matched
65
- return 0 unless acknowledged?
66
- @replies.reduce(0) do |n, reply|
67
- if upsert?(reply)
68
- reply.documents.first[N] - n_upserted
69
- else
70
- if reply.documents.first[N]
71
- n += reply.documents.first[N]
72
- else
73
- n
74
- end
75
- end
76
- end
77
- end
78
-
79
- # Gets the number of documents modified.
80
- # Not that in a mixed sharded cluster a call to
81
- # update could return nModified (>= 2.6) or not (<= 2.4).
82
- # If any call does not return nModified we can't report
83
- # a valid final count so set the field to nil.
84
- #
85
- # @example Get the modified count.
86
- # result.n_modified
87
- #
88
- # @return [ Integer ] The number of documents modified.
89
- #
90
- # @since 2.0.0
91
- def n_modified
92
- return 0 unless acknowledged?
93
- @replies.reduce(0) do |n, reply|
94
- if n && reply.documents.first[MODIFIED]
95
- n += reply.documents.first[MODIFIED]
96
- else
97
- nil
98
- end
99
- end
100
- end
101
-
102
- # Get the upserted documents.
103
- #
104
- # @example Get upserted documents.
105
- # result.upserted
106
- #
107
- # @return [ Array<BSON::Document> ] The upserted document info
108
- #
109
- # @since 2.1.0
110
- def upserted
111
- reply.documents.first[UPSERTED] || []
112
- end
113
-
114
- private
115
-
116
- def upsert?(reply)
117
- upserted.any?
118
- end
119
- end
120
-
121
- # Defines custom behaviour of results when updating.
122
- # For server versions < 2.5.5 (that don't use write commands).
123
- #
124
- # @since 2.0.0
125
- class LegacyResult < Operation::Result
126
- include LegacyMergable
127
-
128
- # The updated existing field in the result.
129
- #
130
- # @since 2.0.0
131
- UPDATED_EXISTING = 'updatedExisting'.freeze
132
-
133
- # Gets the number of documents upserted.
134
- #
135
- # @example Get the upserted count.
136
- # result.n_upserted
137
- #
138
- # @return [ Integer ] The number of documents upserted.
139
- #
140
- # @since 2.0.0
141
- def n_upserted
142
- return 0 unless acknowledged?
143
- @replies.reduce(0) do |n, reply|
144
- if upsert?(reply)
145
- n += reply.documents.first[N]
146
- else
147
- n
148
- end
149
- end
150
- end
151
-
152
- # Gets the number of documents matched.
153
- #
154
- # @example Get the matched count.
155
- # result.n_matched
156
- #
157
- # @return [ Integer ] The number of documents matched.
158
- #
159
- # @since 2.0.0
160
- def n_matched
161
- return 0 unless acknowledged?
162
- @replies.reduce(0) do |n, reply|
163
- if upsert?(reply)
164
- n
165
- else
166
- n += reply.documents.first[N]
167
- end
168
- end
169
- end
170
-
171
- # Gets the number of documents modified.
172
- #
173
- # @example Get the modified count.
174
- # result.n_modified
175
- #
176
- # @return [ Integer ] The number of documents modified.
177
- #
178
- # @since 2.2.3
179
- def n_modified; end
180
-
181
- private
182
-
183
- def upsert?(reply)
184
- reply.documents.first[BulkWrite::Result::UPSERTED] ||
185
- (!updated_existing?(reply) && reply.documents.first[N] == 1)
186
- end
187
-
188
- def updated_existing?(reply)
189
- reply.documents.first[UPDATED_EXISTING]
190
- end
191
- end
192
- end
193
- end
194
- end
195
- end
196
- end