mongo 2.1.0.beta → 2.1.0.rc0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +2 -2
  5. data/lib/mongo.rb +2 -3
  6. data/lib/mongo/address.rb +7 -5
  7. data/lib/mongo/address/unix.rb +2 -2
  8. data/lib/mongo/auth/ldap/conversation.rb +6 -2
  9. data/lib/mongo/auth/scram/conversation.rb +8 -2
  10. data/lib/mongo/auth/user/view.rb +21 -0
  11. data/lib/mongo/bulk_write.rb +155 -23
  12. data/lib/mongo/bulk_write/combineable.rb +51 -0
  13. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  14. data/lib/mongo/bulk_write/result.rb +61 -8
  15. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  16. data/lib/mongo/bulk_write/transformable.rb +117 -0
  17. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  18. data/lib/mongo/bulk_write/validatable.rb +62 -0
  19. data/lib/mongo/client.rb +7 -3
  20. data/lib/mongo/cluster.rb +3 -3
  21. data/lib/mongo/cluster/topology/replica_set.rb +8 -6
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/collection.rb +75 -4
  24. data/lib/mongo/collection/view.rb +1 -2
  25. data/lib/mongo/collection/view/aggregation.rb +13 -8
  26. data/lib/mongo/collection/view/immutable.rb +6 -6
  27. data/lib/mongo/collection/view/iterable.rb +13 -4
  28. data/lib/mongo/collection/view/map_reduce.rb +22 -17
  29. data/lib/mongo/collection/view/readable.rb +121 -70
  30. data/lib/mongo/cursor.rb +5 -1
  31. data/lib/mongo/database.rb +3 -3
  32. data/lib/mongo/database/view.rb +1 -1
  33. data/lib/mongo/error.rb +7 -0
  34. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
  35. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
  36. data/lib/mongo/error/file_not_found.rb +37 -0
  37. data/lib/mongo/error/invalid_file.rb +2 -2
  38. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  39. data/lib/mongo/error/invalid_uri.rb +5 -4
  40. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  41. data/lib/mongo/error/operation_failure.rb +1 -1
  42. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  43. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  44. data/lib/mongo/grid.rb +2 -1
  45. data/lib/mongo/grid/file.rb +12 -9
  46. data/lib/mongo/grid/file/chunk.rb +6 -6
  47. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  48. data/lib/mongo/grid/fs_bucket.rb +441 -0
  49. data/lib/mongo/grid/stream.rb +64 -0
  50. data/lib/mongo/grid/stream/read.rb +208 -0
  51. data/lib/mongo/grid/stream/write.rb +187 -0
  52. data/lib/mongo/index/view.rb +1 -1
  53. data/lib/mongo/loggable.rb +34 -57
  54. data/lib/mongo/logger.rb +16 -78
  55. data/lib/mongo/monitoring.rb +1 -5
  56. data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
  57. data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
  58. data/lib/mongo/monitoring/publishable.rb +22 -12
  59. data/lib/mongo/operation.rb +3 -6
  60. data/lib/mongo/operation/commands.rb +24 -0
  61. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  62. data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
  63. data/lib/mongo/operation/commands/collections_info.rb +66 -0
  64. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  65. data/lib/mongo/operation/commands/indexes.rb +70 -0
  66. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  67. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  68. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  69. data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
  70. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  71. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
  72. data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
  73. data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
  74. data/lib/mongo/operation/commands/user_query.rb +69 -0
  75. data/lib/mongo/operation/commands/users_info.rb +53 -0
  76. data/lib/mongo/operation/commands/users_info/result.rb +36 -0
  77. data/lib/mongo/operation/executable.rb +4 -68
  78. data/lib/mongo/operation/kill_cursors.rb +3 -3
  79. data/lib/mongo/operation/read.rb +0 -4
  80. data/lib/mongo/operation/read/get_more.rb +2 -22
  81. data/lib/mongo/operation/read/query.rb +2 -21
  82. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  83. data/lib/mongo/operation/specifiable.rb +24 -0
  84. data/lib/mongo/operation/write.rb +2 -0
  85. data/lib/mongo/operation/write/bulk.rb +6 -3
  86. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  87. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  88. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  89. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  90. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  91. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  92. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  93. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  94. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  95. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  96. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  97. data/lib/mongo/operation/write/command/delete.rb +0 -1
  98. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  99. data/lib/mongo/operation/write/command/insert.rb +0 -1
  100. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  101. data/lib/mongo/operation/write/command/update.rb +0 -1
  102. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  103. data/lib/mongo/operation/write/command/writable.rb +13 -18
  104. data/lib/mongo/operation/write/create_index.rb +4 -27
  105. data/lib/mongo/operation/write/create_user.rb +4 -30
  106. data/lib/mongo/operation/write/delete.rb +5 -28
  107. data/lib/mongo/operation/write/drop_index.rb +3 -3
  108. data/lib/mongo/operation/write/gle.rb +48 -0
  109. data/lib/mongo/operation/write/idable.rb +5 -0
  110. data/lib/mongo/operation/write/insert.rb +2 -24
  111. data/lib/mongo/operation/write/remove_user.rb +4 -27
  112. data/lib/mongo/operation/write/update.rb +4 -32
  113. data/lib/mongo/operation/write/update_user.rb +4 -30
  114. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  115. data/lib/mongo/options/mapper.rb +4 -2
  116. data/lib/mongo/protocol/delete.rb +68 -3
  117. data/lib/mongo/protocol/get_more.rb +54 -2
  118. data/lib/mongo/protocol/insert.rb +59 -1
  119. data/lib/mongo/protocol/kill_cursors.rb +53 -4
  120. data/lib/mongo/protocol/message.rb +12 -12
  121. data/lib/mongo/protocol/query.rb +139 -65
  122. data/lib/mongo/protocol/reply.rb +69 -1
  123. data/lib/mongo/protocol/update.rb +70 -1
  124. data/lib/mongo/server/connection.rb +11 -3
  125. data/lib/mongo/server/description.rb +29 -0
  126. data/lib/mongo/server/description/features.rb +2 -1
  127. data/lib/mongo/server/monitor.rb +2 -2
  128. data/lib/mongo/server_selector.rb +14 -10
  129. data/lib/mongo/server_selector/selectable.rb +24 -22
  130. data/lib/mongo/socket.rb +6 -3
  131. data/lib/mongo/socket/tcp.rb +2 -2
  132. data/lib/mongo/socket/unix.rb +5 -8
  133. data/lib/mongo/uri.rb +243 -139
  134. data/lib/mongo/version.rb +1 -1
  135. data/spec/mongo/address/unix_spec.rb +1 -1
  136. data/spec/mongo/address_spec.rb +25 -0
  137. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  138. data/spec/mongo/auth/user/view_spec.rb +26 -1
  139. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  140. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  141. data/spec/mongo/bulk_write_spec.rb +332 -166
  142. data/spec/mongo/client_spec.rb +25 -0
  143. data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
  144. data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
  145. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  146. data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
  147. data/spec/mongo/collection/view/readable_spec.rb +17 -30
  148. data/spec/mongo/collection/view_spec.rb +233 -7
  149. data/spec/mongo/collection_spec.rb +360 -18
  150. data/spec/mongo/command_monitoring_spec.rb +51 -0
  151. data/spec/mongo/connection_string_spec.rb +137 -0
  152. data/spec/mongo/database_spec.rb +27 -11
  153. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  154. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  155. data/spec/mongo/grid/file_spec.rb +8 -8
  156. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  157. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  158. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  159. data/spec/mongo/grid/stream_spec.rb +48 -0
  160. data/spec/mongo/gridfs_spec.rb +50 -0
  161. data/spec/mongo/logger_spec.rb +0 -40
  162. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  163. data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
  164. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  165. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
  166. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  167. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
  168. data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
  169. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  170. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
  171. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
  172. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
  173. data/spec/mongo/operation/write/insert_spec.rb +0 -11
  174. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  175. data/spec/mongo/server/description_spec.rb +42 -0
  176. data/spec/mongo/server/monitor_spec.rb +21 -0
  177. data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
  178. data/spec/mongo/server_selection_spec.rb +3 -3
  179. data/spec/mongo/server_selector/nearest_spec.rb +34 -27
  180. data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
  181. data/spec/mongo/server_selector/primary_spec.rb +14 -13
  182. data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
  183. data/spec/mongo/server_selector/secondary_spec.rb +23 -22
  184. data/spec/mongo/server_selector_spec.rb +87 -24
  185. data/spec/mongo/socket/unix_spec.rb +52 -0
  186. data/spec/mongo/uri_spec.rb +251 -39
  187. data/spec/spec_helper.rb +11 -4
  188. data/spec/support/authorization.rb +4 -5
  189. data/spec/support/command_monitoring.rb +365 -0
  190. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  191. data/spec/support/command_monitoring/command.yml +42 -0
  192. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  193. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  194. data/spec/support/command_monitoring/find.yml +219 -0
  195. data/spec/support/command_monitoring/insertMany.yml +81 -0
  196. data/spec/support/command_monitoring/insertOne.yml +51 -0
  197. data/spec/support/command_monitoring/updateMany.yml +67 -0
  198. data/spec/support/command_monitoring/updateOne.yml +95 -0
  199. data/spec/support/connection_string.rb +228 -0
  200. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  201. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  202. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  203. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  204. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  205. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  206. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  207. data/spec/support/crud.rb +3 -1
  208. data/spec/support/crud/read.rb +14 -10
  209. data/spec/support/crud/write.rb +36 -9
  210. data/spec/support/gridfs.rb +637 -0
  211. data/spec/support/gridfs_tests/delete.yml +157 -0
  212. data/spec/support/gridfs_tests/download.yml +210 -0
  213. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  214. data/spec/support/gridfs_tests/upload.yml +158 -0
  215. data/spec/support/sdam/rs/equal_electionids.yml +1 -2
  216. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
  217. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  218. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  219. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  220. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  221. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  222. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  223. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  224. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  225. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  226. data/spec/support/server_discovery_and_monitoring.rb +3 -1
  227. data/spec/support/server_selection.rb +3 -1
  228. data/spec/support/shared/bulk_write.rb +192 -0
  229. data/spec/support/shared/server_selector.rb +21 -12
  230. metadata +147 -57
  231. metadata.gz.sig +0 -0
  232. data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
  233. data/lib/mongo/bulk_write/deletable.rb +0 -57
  234. data/lib/mongo/bulk_write/insertable.rb +0 -49
  235. data/lib/mongo/bulk_write/replacable.rb +0 -58
  236. data/lib/mongo/bulk_write/updatable.rb +0 -69
  237. data/lib/mongo/grid/fs.rb +0 -146
  238. data/lib/mongo/operation/list_collections/result.rb +0 -114
  239. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  240. data/lib/mongo/operation/read/collections_info.rb +0 -68
  241. data/lib/mongo/operation/read/indexes.rb +0 -69
  242. data/lib/mongo/operation/read/list_collections.rb +0 -76
  243. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  244. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  245. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  246. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  247. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  248. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  249. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  250. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
  251. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  252. data/spec/mongo/grid/fs_spec.rb +0 -160
  253. data/spec/mongo/loggable_spec.rb +0 -63
@@ -1,69 +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 Read
18
-
19
- # A MongoDB get indexes operation.
20
- #
21
- # Initialize the get indexes operation.
22
- #
23
- # @example Instantiate the operation.
24
- # Read::Indexes.new(:db_name => 'test', :coll_name => 'test_coll')
25
- #
26
- # Initialization:
27
- # param [ Hash ] spec The specifications for the insert.
28
- #
29
- # option spec :db_name [ String ] The name of the database.
30
- # option spec :coll_name [ String ] The name of the collection.
31
- #
32
- # @since 2.0.0
33
- class Indexes
34
- include Executable
35
- include Specifiable
36
- include ReadPreferrable
37
-
38
- # Execute the operation.
39
- # The context gets a connection on which the operation
40
- # is sent in the block.
41
- #
42
- # @param [ Mongo::Server::Context ] context The context for this operation.
43
- #
44
- # @return [ Result ] The indexes operation response.
45
- #
46
- # @since 2.0.0
47
- def execute(context)
48
- if context.features.list_indexes_enabled?
49
- ListIndexes.new(spec).execute(context)
50
- else
51
- context.with_connection do |connection|
52
- Result.new(connection.dispatch([ message(context) ]))
53
- end
54
- end
55
- end
56
-
57
- private
58
-
59
- def selector
60
- { ns: namespace }
61
- end
62
-
63
- def query_coll
64
- Index::COLLECTION
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,76 +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/list_collections/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Read
20
-
21
- # A MongoDB listCollections command operation.
22
- #
23
- # @example Create the listCollections command operation.
24
- # Mongo::Operation::Read::ListCollections.new(db_name: 'test')
25
- #
26
- # @note A command is actually a query on the virtual '$cmd' collection.
27
- #
28
- # Initialization:
29
- # param [ Hash ] spec The specifications for the command.
30
- #
31
- # option spec :db_name [ String ] The name of the database whose list of
32
- # collection names is requested.
33
- # option spec :options [ Hash ] Options for the command.
34
- #
35
- # @since 2.0.0
36
- class ListCollections
37
- include Executable
38
- include Specifiable
39
- include Limited
40
- include ReadPreferrable
41
-
42
- # Execute the listCollections command operation.
43
- #
44
- # @example Execute the operation.
45
- # operation.execute(context)
46
- #
47
- # @param [ Mongo::Server::Context ] context The context for this operation.
48
- #
49
- # @return [ Result ] The operation result.
50
- #
51
- # @since 2.0.0
52
- def execute(context)
53
- execute_message(context)
54
- end
55
-
56
- private
57
-
58
- def execute_message(context)
59
- context.with_connection do |connection|
60
- Result.new(connection.dispatch([ message(context) ])).validate!
61
- end
62
- end
63
-
64
- def query_coll
65
- Database::COMMAND
66
- end
67
-
68
- def selector
69
- (spec[SELECTOR] || {}).merge(
70
- listCollections: 1, filter: { name: { '$not' => /system\.|\$/ }}
71
- )
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,78 +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/list_indexes/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Read
20
-
21
- # A MongoDB listIndexes command operation.
22
- #
23
- # @example Create the listIndexes command operation.
24
- # Mongo::Operation::Read::ListIndexes.new({ db_name: 'test', coll_name: 'example' })
25
- #
26
- # @note A command is actually a query on the virtual '$cmd' collection.
27
- #
28
- # Initialization:
29
- # param [ Hash ] spec The specifications for the command.
30
- #
31
- # option spec :coll_name [ Hash ] The name of the collection whose index
32
- # info is requested.
33
- # option spec :db_name [ String ] The name of the database on which
34
- # the command should be executed.
35
- # option spec :options [ Hash ] Options for the command.
36
- #
37
- # @since 2.0.0
38
- class ListIndexes
39
- include Executable
40
- include Specifiable
41
- include Limited
42
- include ReadPreferrable
43
-
44
- # Execute the listIndexes command operation.
45
- #
46
- # @example Execute the operation.
47
- # operation.execute(context)
48
- #
49
- # @param [ Mongo::Server::Context ] context The context for this operation.
50
- #
51
- # @return [ Result ] The operation result.
52
- #
53
- # @since 2.0.0
54
- def execute(context)
55
- execute_message(context)
56
- end
57
-
58
- private
59
-
60
- def execute_message(context)
61
- context.with_connection do |connection|
62
- Result.new(connection.dispatch([ message(context) ])).validate!
63
- end
64
- end
65
-
66
- def query_coll
67
- Database::COMMAND
68
- end
69
-
70
- def selector
71
- (spec[SELECTOR] || {}).merge(listIndexes: coll_name)
72
- end
73
- end
74
- end
75
- end
76
- end
77
-
78
-
@@ -1,145 +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_delete/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
-
21
- # A MongoDB bulk delete operation.
22
- #
23
- # @note If a server with version >= 2.5.5 is selected, a write command
24
- # operation will be created and sent instead.
25
- #
26
- # @example Create the delete operation.
27
- # Write::BulkDelete.new({
28
- # :deletes => [{ :q => { :foo => 1 }, :limit => 1 }],
29
- # :db_name => 'test',
30
- # :coll_name => 'test_coll',
31
- # :write_concern => write_concern
32
- # })
33
- #
34
- # Initialization:
35
- # param [ Hash ] spec The specifications for the delete.
36
- #
37
- # option spec :deletes [ Array ] The delete documents.
38
- # option spec :db_name [ String ] The name of the database on which
39
- # the delete should be executed.
40
- # option spec :coll_name [ String ] The name of the collection on which
41
- # the delete should be executed.
42
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern
43
- # for this operation.
44
- # option spec :ordered [ true, false ] Whether the operations should be
45
- # executed in order.
46
- # option spec :options [Hash] Options for the command, if it ends up being a
47
- # write command.
48
- #
49
- # @since 2.0.0
50
- class BulkDelete
51
- include Executable
52
- include Specifiable
53
-
54
- # Execute the delete operation.
55
- #
56
- # @example Execute the operation.
57
- # operation.execute(context)
58
- #
59
- # @param [ Mongo::Server::Context ] context The context for this operation.
60
- #
61
- # @return [ Result ] The result.
62
- #
63
- # @since 2.0.0
64
- def execute(context)
65
- if context.features.write_command_enabled?
66
- execute_write_command(context)
67
- else
68
- execute_message(context)
69
- end
70
- end
71
-
72
- # Set the write concern on this operation.
73
- #
74
- # @example Set a write concern.
75
- # new_op = operation.write_concern(:w => 2)
76
- #
77
- # @param [ Hash ] wc The write concern.
78
- #
79
- # @since 2.0.0
80
- def write_concern(wc = nil)
81
- if wc
82
- self.class.new(spec.merge(write_concern: WriteConcern.get(wc)))
83
- else
84
- spec[WRITE_CONCERN]
85
- end
86
- end
87
-
88
- private
89
-
90
- def execute_write_command(context)
91
- Result.new(Command::Delete.new(spec).execute(context))
92
- end
93
-
94
- def execute_message(context)
95
- replies = messages.map do |m|
96
- context.with_connection do |connection|
97
- result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
98
- if stop_sending?(result)
99
- return result
100
- else
101
- result.reply
102
- end
103
- end
104
- end
105
- LegacyResult.new(replies.compact.empty? ? nil : replies)
106
- end
107
-
108
- def stop_sending?(result)
109
- ordered? && !result.successful?
110
- end
111
-
112
- # @todo put this somewhere else
113
- def ordered?
114
- @spec.fetch(:ordered, true)
115
- end
116
-
117
- def gle
118
- gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
119
- Mongo::WriteConcern.get(:w => 1).get_last_error :
120
- write_concern.get_last_error
121
- if gle_message
122
- Protocol::Query.new(
123
- db_name,
124
- Database::COMMAND,
125
- gle_message,
126
- options.merge(limit: -1)
127
- )
128
- end
129
- end
130
-
131
- def initialize_copy(original)
132
- @spec = original.spec.dup
133
- @spec[DELETES] = original.spec[DELETES].clone
134
- end
135
-
136
- def messages
137
- deletes.collect do |del|
138
- opts = ( del[:limit] || 0 ) <= 0 ? {} : { :flags => [ :single_remove ] }
139
- Protocol::Delete.new(db_name, coll_name, del[:q], opts)
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end
@@ -1,75 +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 BulkDelete
22
-
23
- # Defines custom behaviour of results when deleting.
24
- #
25
- # @since 2.0.0
26
- class Result < Operation::Result
27
- include BulkMergable
28
-
29
- # The aggregate number of deleted docs reported in the replies.
30
- #
31
- # @since 2.0.0
32
- REMOVED = 'nRemoved'.freeze
33
-
34
- # Gets the number of documents deleted.
35
- #
36
- # @example Get the deleted count.
37
- # result.n_removed
38
- #
39
- # @return [ Integer ] The number of documents deleted.
40
- #
41
- # @since 2.0.0
42
- def n_removed
43
- return 0 unless acknowledged?
44
- @replies.reduce(0) do |n, reply|
45
- n += reply.documents.first[N]
46
- end
47
- end
48
- end
49
-
50
- # Defines custom behaviour of results when deleting.
51
- # For server versions < 2.5.5 (that don't use write commands).
52
- #
53
- # @since 2.0.0
54
- class LegacyResult < Operation::Result
55
- include LegacyBulkMergable
56
-
57
- # Gets the number of documents deleted.
58
- #
59
- # @example Get the deleted count.
60
- # result.n_removed
61
- #
62
- # @return [ Integer ] The number of documents deleted.
63
- #
64
- # @since 2.0.0
65
- def n_removed
66
- return 0 unless acknowledged?
67
- @replies.reduce(0) do |n, reply|
68
- n += reply.documents.first[N]
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end