mongo 2.1.0.beta → 2.2.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +32 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +164 -23
- data/lib/mongo/client.rb +75 -18
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +85 -5
- data/lib/mongo/collection/view/aggregation.rb +19 -45
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +4 -11
- data/lib/mongo/collection/view/iterable.rb +40 -5
- data/lib/mongo/collection/view/map_reduce.rb +67 -37
- data/lib/mongo/collection/view/readable.rb +114 -100
- data/lib/mongo/collection/view/writable.rb +46 -22
- data/lib/mongo/collection/view.rb +25 -22
- data/lib/mongo/collection.rb +130 -12
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor.rb +76 -21
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +16 -6
- data/lib/mongo/dbref.rb +9 -9
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/invalid_write_concern.rb +35 -0
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +33 -2
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +8 -0
- data/lib/mongo/grid/file/chunk.rb +9 -9
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +7 -4
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +38 -14
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
- data/lib/mongo/operation/commands/aggregate.rb +64 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
- data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
- data/lib/mongo/operation/commands/command.rb +47 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
- data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
- data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
- data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
- data/lib/mongo/operation/commands/map_reduce.rb +49 -0
- data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
- data/lib/mongo/operation/commands/user_query.rb +71 -0
- data/lib/mongo/operation/commands/users_info/result.rb +38 -0
- data/lib/mongo/operation/commands/users_info.rb +48 -0
- data/lib/mongo/operation/commands.rb +26 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query/result.rb +40 -0
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +43 -1
- data/lib/mongo/operation/specifiable.rb +59 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +67 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +3 -3
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -3
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +6 -4
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +49 -0
- data/lib/mongo/operation/write/idable.rb +24 -2
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +33 -5
- data/lib/mongo/options/mapper.rb +26 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/bit_vector.rb +11 -9
- data/lib/mongo/protocol/delete.rb +78 -3
- data/lib/mongo/protocol/get_more.rb +59 -2
- data/lib/mongo/protocol/insert.rb +73 -1
- data/lib/mongo/protocol/kill_cursors.rb +66 -4
- data/lib/mongo/protocol/message.rb +44 -20
- data/lib/mongo/protocol/query.rb +153 -65
- data/lib/mongo/protocol/reply.rb +92 -1
- data/lib/mongo/protocol/serializers.rb +49 -40
- data/lib/mongo/protocol/update.rb +93 -1
- data/lib/mongo/retryable.rb +101 -0
- data/lib/mongo/server/connectable.rb +28 -8
- data/lib/mongo/server/connection.rb +52 -10
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -15
- data/lib/mongo/server/description/features.rb +4 -2
- data/lib/mongo/server/description.rb +39 -3
- data/lib/mongo/server/monitor/connection.rb +49 -28
- data/lib/mongo/server/monitor.rb +3 -14
- data/lib/mongo/server.rb +31 -4
- data/lib/mongo/server_selector/selectable.rb +58 -32
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +4 -1
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +245 -139
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/lib/mongo.rb +4 -4
- data/mongo.gemspec +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +385 -161
- data/spec/mongo/client_spec.rb +193 -23
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +54 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
- data/spec/mongo/collection/view/readable_spec.rb +109 -112
- data/spec/mongo/collection/view_spec.rb +119 -487
- data/spec/mongo/collection_spec.rb +1002 -33
- data/spec/mongo/command_monitoring_spec.rb +64 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +81 -12
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +6 -6
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/index/view_spec.rb +41 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +1 -19
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/result_spec.rb +19 -0
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
- data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
- data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
- data/spec/mongo/operation/write/command/update_spec.rb +18 -9
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
- data/spec/mongo/protocol/query_spec.rb +21 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/retryable_spec.rb +221 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +42 -6
- data/spec/mongo/server/connection_spec.rb +86 -1
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +44 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +5 -3
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +78 -15
- data/spec/mongo/socket/ssl_spec.rb +101 -57
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +271 -59
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +29 -23
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +268 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +373 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +2 -2
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/shared/server_selector.rb +78 -13
- data/spec/support/travis.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +211 -72
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/aggregate/result.rb +0 -103
- data/lib/mongo/operation/aggregate.rb +0 -108
- data/lib/mongo/operation/command.rb +0 -61
- data/lib/mongo/operation/map_reduce/result.rb +0 -122
- data/lib/mongo/operation/map_reduce.rb +0 -95
- data/lib/mongo/operation/parallel_scan/result.rb +0 -72
- data/lib/mongo/operation/parallel_scan.rb +0 -76
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
@@ -0,0 +1,80 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Collection
|
17
|
+
class View
|
18
|
+
module Builder
|
19
|
+
|
20
|
+
# Provides behaviour for mapping modifiers.
|
21
|
+
#
|
22
|
+
# @since 2.2.0
|
23
|
+
module Modifiers
|
24
|
+
extend self
|
25
|
+
|
26
|
+
# Mappings from driver options to legacy server values.
|
27
|
+
#
|
28
|
+
# @since 2.2.0
|
29
|
+
DRIVER_MAPPINGS = BSON::Document.new(
|
30
|
+
sort: '$orderby',
|
31
|
+
hint: '$hint',
|
32
|
+
comment: '$comment',
|
33
|
+
snapshot: '$snapshot',
|
34
|
+
max_scan: '$maxScan',
|
35
|
+
max_value: '$max',
|
36
|
+
min_value: '$min',
|
37
|
+
max_time_ms: '$maxTimeMS',
|
38
|
+
return_key: '$returnKey',
|
39
|
+
show_disk_loc: '$showDiskLoc',
|
40
|
+
explain: '$explain'
|
41
|
+
).freeze
|
42
|
+
|
43
|
+
# Mappings from server values to driver options.
|
44
|
+
#
|
45
|
+
# @since 2.2.0
|
46
|
+
SERVER_MAPPINGS = BSON::Document.new(DRIVER_MAPPINGS.invert).freeze
|
47
|
+
|
48
|
+
# Transform the provided server modifiers to driver options.
|
49
|
+
#
|
50
|
+
# @example Transform to driver options.
|
51
|
+
# Modifiers.map_driver_options(modifiers)
|
52
|
+
#
|
53
|
+
# @param [ Hash ] modifiers The modifiers.
|
54
|
+
#
|
55
|
+
# @return [ BSON::Document ] The driver options.
|
56
|
+
#
|
57
|
+
# @since 2.2.0
|
58
|
+
def self.map_driver_options(modifiers)
|
59
|
+
Options::Mapper.transform_documents(modifiers, SERVER_MAPPINGS)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Transform the provided options into a document of only server
|
63
|
+
# modifiers.
|
64
|
+
#
|
65
|
+
# @example Map the server modifiers.
|
66
|
+
# Modifiers.map_server_modifiers(options)
|
67
|
+
#
|
68
|
+
# @param [ Hash, BSON::Document ] options The options.
|
69
|
+
#
|
70
|
+
# @return [ BSON::Document ] The modifiers.
|
71
|
+
#
|
72
|
+
# @since 2.2.0
|
73
|
+
def self.map_server_modifiers(options)
|
74
|
+
Options::Mapper.transform_documents(options, DRIVER_MAPPINGS)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Collection
|
17
|
+
class View
|
18
|
+
module Builder
|
19
|
+
|
20
|
+
# Builds a legacy OP_QUERY specification from options.
|
21
|
+
#
|
22
|
+
# @since 2.2.0
|
23
|
+
class OpQuery
|
24
|
+
extend Forwardable
|
25
|
+
|
26
|
+
def_delegators :@view, :cluster, :collection, :database, :filter, :options, :read
|
27
|
+
|
28
|
+
# @return [ BSON::Document ] modifiers The server modifiers.
|
29
|
+
attr_reader :modifiers
|
30
|
+
|
31
|
+
# Create the new legacy query builder.
|
32
|
+
#
|
33
|
+
# @example Create the query builder.
|
34
|
+
# QueryBuilder.new(view)
|
35
|
+
#
|
36
|
+
# @param [ Collection::View ] view The collection view.
|
37
|
+
#
|
38
|
+
# @since 2.2.2
|
39
|
+
def initialize(view)
|
40
|
+
@view = view
|
41
|
+
@modifiers = Modifiers.map_server_modifiers(options)
|
42
|
+
end
|
43
|
+
|
44
|
+
def specification
|
45
|
+
{
|
46
|
+
:selector => requires_special_filter? ? special_filter : filter,
|
47
|
+
:read => read,
|
48
|
+
:options => query_options,
|
49
|
+
:db_name => database.name,
|
50
|
+
:coll_name => collection.name
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def query_options
|
57
|
+
BSON::Document.new(
|
58
|
+
project: options[:projection],
|
59
|
+
skip: options[:skip],
|
60
|
+
limit: options[:limit],
|
61
|
+
flags: Flags.map_flags(options),
|
62
|
+
batch_size: options[:batch_size]
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
def requires_special_filter?
|
67
|
+
!modifiers.empty? || cluster.sharded?
|
68
|
+
end
|
69
|
+
|
70
|
+
def read_pref_formatted
|
71
|
+
@read_formatted ||= read.to_mongos
|
72
|
+
end
|
73
|
+
|
74
|
+
def special_filter
|
75
|
+
sel = BSON::Document.new(:$query => filter).merge!(modifiers)
|
76
|
+
sel[:$readPreference] = read_pref_formatted unless read_pref_formatted.nil?
|
77
|
+
sel
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/collection/view/builder/aggregation'
|
16
|
+
require 'mongo/collection/view/builder/map_reduce'
|
17
|
+
require 'mongo/collection/view/builder/op_query'
|
18
|
+
require 'mongo/collection/view/builder/find_command'
|
19
|
+
require 'mongo/collection/view/builder/flags'
|
20
|
+
require 'mongo/collection/view/builder/modifiers'
|
@@ -21,6 +21,21 @@ module Mongo
|
|
21
21
|
# @since 2.0.0
|
22
22
|
module Explainable
|
23
23
|
|
24
|
+
# The query planner verbosity constant.
|
25
|
+
#
|
26
|
+
# @since 2.2.0
|
27
|
+
QUERY_PLANNER = 'queryPlanner'.freeze
|
28
|
+
|
29
|
+
# The execution stats verbosity constant.
|
30
|
+
#
|
31
|
+
# @since 2.2.0
|
32
|
+
EXECUTION_STATS = 'executionStats'.freeze
|
33
|
+
|
34
|
+
# The all plans execution verbosity constant.
|
35
|
+
#
|
36
|
+
# @since 2.2.0
|
37
|
+
ALL_PLANS_EXECUTION = 'allPlansExecution'.freeze
|
38
|
+
|
24
39
|
# Get the explain plan for the query.
|
25
40
|
#
|
26
41
|
# @example Get the explain plan for the query.
|
@@ -15,6 +15,10 @@
|
|
15
15
|
module Mongo
|
16
16
|
class Collection
|
17
17
|
class View
|
18
|
+
|
19
|
+
# Defines behaviour around views being configurable and immutable.
|
20
|
+
#
|
21
|
+
# @since 2.0.0
|
18
22
|
module Immutable
|
19
23
|
|
20
24
|
# @return [ Hash ] options The additional query options.
|
@@ -22,21 +26,10 @@ module Mongo
|
|
22
26
|
|
23
27
|
private
|
24
28
|
|
25
|
-
# @api private
|
26
|
-
#
|
27
|
-
# @note In the including class, the method #immutable needs to be
|
28
|
-
# implemented in order to define how a new class of that type needs to
|
29
|
-
# be instantiated.
|
30
29
|
def configure(field, value)
|
31
30
|
return options[field] if value.nil?
|
32
31
|
new(options.merge(field => value))
|
33
32
|
end
|
34
|
-
|
35
|
-
def configure_flag(flag)
|
36
|
-
new(options.dup).tap do |view|
|
37
|
-
view.send(:flags).push(flag)
|
38
|
-
end
|
39
|
-
end
|
40
33
|
end
|
41
34
|
end
|
42
35
|
end
|
@@ -35,13 +35,48 @@ module Mongo
|
|
35
35
|
#
|
36
36
|
# @yieldparam [ Hash ] Each matching document.
|
37
37
|
def each
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
@cursor = nil
|
39
|
+
read_with_retry do
|
40
|
+
server = read.select_server(cluster, false)
|
41
|
+
result = send_initial_query(server)
|
42
|
+
@cursor = Cursor.new(view, result, server)
|
43
|
+
end
|
44
|
+
@cursor.each do |doc|
|
42
45
|
yield doc
|
43
46
|
end if block_given?
|
44
|
-
cursor
|
47
|
+
@cursor.to_enum
|
48
|
+
end
|
49
|
+
|
50
|
+
# Stop the iteration by sending a KillCursors command to the server.
|
51
|
+
#
|
52
|
+
# @example Stop the iteration.
|
53
|
+
# view.close_query
|
54
|
+
#
|
55
|
+
# @since 2.1.0
|
56
|
+
def close_query
|
57
|
+
@cursor.send(:kill_cursors) if @cursor && !@cursor.closed?
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def initial_query_op(server)
|
63
|
+
if server.features.find_command_enabled?
|
64
|
+
initial_command_op
|
65
|
+
else
|
66
|
+
Operation::Read::Query.new(Builder::OpQuery.new(self).specification)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def initial_command_op
|
71
|
+
if explained?
|
72
|
+
Operation::Commands::Command.new(Builder::FindCommand.new(self).explain_specification)
|
73
|
+
else
|
74
|
+
Operation::Commands::Find.new(Builder::FindCommand.new(self).specification)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def send_initial_query(server)
|
79
|
+
initial_query_op(server).execute(server.context)
|
45
80
|
end
|
46
81
|
end
|
47
82
|
end
|
@@ -24,7 +24,18 @@ module Mongo
|
|
24
24
|
extend Forwardable
|
25
25
|
include Enumerable
|
26
26
|
include Immutable
|
27
|
-
include
|
27
|
+
include Loggable
|
28
|
+
include Retryable
|
29
|
+
|
30
|
+
# The inline option.
|
31
|
+
#
|
32
|
+
# @since 2.1.0
|
33
|
+
INLINE = 'inline'.freeze
|
34
|
+
|
35
|
+
# Reroute message.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
REROUTE = 'Rerouting the MapReduce operation to the primary server.'.freeze
|
28
39
|
|
29
40
|
# @return [ View ] view The collection view.
|
30
41
|
attr_reader :view
|
@@ -41,6 +52,31 @@ module Mongo
|
|
41
52
|
# Delegate necessary operations to the collection.
|
42
53
|
def_delegators :collection, :database
|
43
54
|
|
55
|
+
# Iterate through documents returned by the map/reduce.
|
56
|
+
#
|
57
|
+
# @example Iterate through the result of the map/reduce.
|
58
|
+
# map_reduce.each do |document|
|
59
|
+
# p document
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# @return [ Enumerator ] The enumerator.
|
63
|
+
#
|
64
|
+
# @since 2.0.0
|
65
|
+
#
|
66
|
+
# @yieldparam [ Hash ] Each matching document.
|
67
|
+
def each
|
68
|
+
@cursor = nil
|
69
|
+
write_with_retry do
|
70
|
+
server = read.select_server(cluster, false)
|
71
|
+
result = send_initial_query(server)
|
72
|
+
@cursor = Cursor.new(view, result, server)
|
73
|
+
end
|
74
|
+
@cursor.each do |doc|
|
75
|
+
yield doc
|
76
|
+
end if block_given?
|
77
|
+
@cursor.to_enum
|
78
|
+
end
|
79
|
+
|
44
80
|
# Set or get the finalize function for the operation.
|
45
81
|
#
|
46
82
|
# @example Set the finalize function.
|
@@ -71,7 +107,7 @@ module Mongo
|
|
71
107
|
@view = view
|
72
108
|
@map = map.freeze
|
73
109
|
@reduce = reduce.freeze
|
74
|
-
@options = options.
|
110
|
+
@options = options.freeze
|
75
111
|
end
|
76
112
|
|
77
113
|
# Set or get the jsMode flag for the operation.
|
@@ -86,7 +122,7 @@ module Mongo
|
|
86
122
|
#
|
87
123
|
# @since 2.0.0
|
88
124
|
def js_mode(value = nil)
|
89
|
-
configure(:
|
125
|
+
configure(:js_mode, value)
|
90
126
|
end
|
91
127
|
|
92
128
|
# Set or get the output location for the operation.
|
@@ -147,21 +183,11 @@ module Mongo
|
|
147
183
|
private
|
148
184
|
|
149
185
|
def inline?
|
150
|
-
out.nil? || out == { inline: 1 } || out == {
|
186
|
+
out.nil? || out == { inline: 1 } || out == { INLINE => 1 }
|
151
187
|
end
|
152
188
|
|
153
189
|
def map_reduce_spec
|
154
|
-
|
155
|
-
:db_name => database.name,
|
156
|
-
:read => read,
|
157
|
-
:selector => {
|
158
|
-
:mapreduce => collection.name,
|
159
|
-
:map => map,
|
160
|
-
:reduce => reduce,
|
161
|
-
:query => view.selector[:$query] || view.selector,
|
162
|
-
:out => { inline: 1 }
|
163
|
-
}.merge(options).merge(view.options)
|
164
|
-
}
|
190
|
+
Builder::MapReduce.new(map, reduce, view, options).specification
|
165
191
|
end
|
166
192
|
|
167
193
|
def new(options)
|
@@ -169,40 +195,44 @@ module Mongo
|
|
169
195
|
end
|
170
196
|
|
171
197
|
def initial_query_op
|
172
|
-
Operation::MapReduce.new(map_reduce_spec)
|
198
|
+
Operation::Commands::MapReduce.new(map_reduce_spec)
|
199
|
+
end
|
200
|
+
|
201
|
+
def valid_server?(server)
|
202
|
+
server.standalone? || server.mongos? || server.primary? || secondary_ok?
|
203
|
+
end
|
204
|
+
|
205
|
+
def secondary_ok?
|
206
|
+
out.respond_to?(:keys) && out.keys.first.to_s.downcase == INLINE
|
173
207
|
end
|
174
208
|
|
175
209
|
def send_initial_query(server)
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
rescue Mongo::Error::NeedPrimaryServer
|
180
|
-
log_warn([
|
181
|
-
'Rerouting the MapReduce operation to the primary server.'
|
182
|
-
])
|
183
|
-
server = ServerSelector.get(mode: :primary).select_server(cluster)
|
184
|
-
initial_query_op.execute(server.context)
|
185
|
-
end
|
186
|
-
if inline?
|
187
|
-
result
|
188
|
-
else
|
189
|
-
send_fetch_query(server)
|
210
|
+
unless valid_server?(server)
|
211
|
+
log_warn(REROUTE)
|
212
|
+
server = cluster.next_primary(false)
|
190
213
|
end
|
214
|
+
result = initial_query_op.execute(server.context)
|
215
|
+
inline? ? result : send_fetch_query(server)
|
191
216
|
end
|
192
217
|
|
193
218
|
def fetch_query_spec
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
219
|
+
Builder::MapReduce.new(map, reduce, view, options).query_specification
|
220
|
+
end
|
221
|
+
|
222
|
+
def find_command_spec
|
223
|
+
Builder::MapReduce.new(map, reduce, view, options).command_specification
|
198
224
|
end
|
199
225
|
|
200
|
-
def fetch_query_op
|
201
|
-
|
226
|
+
def fetch_query_op(server)
|
227
|
+
if server.features.find_command_enabled?
|
228
|
+
Operation::Commands::Find.new(find_command_spec)
|
229
|
+
else
|
230
|
+
Operation::Read::Query.new(fetch_query_spec)
|
231
|
+
end
|
202
232
|
end
|
203
233
|
|
204
234
|
def send_fetch_query(server)
|
205
|
-
fetch_query_op.execute(server.context)
|
235
|
+
fetch_query_op(server).execute(server.context)
|
206
236
|
end
|
207
237
|
end
|
208
238
|
end
|