Skip to content

Commit 456d7db

Browse files
RUBY-2911 Support let option in BulkWriteOptions (#2423)
1 parent 5481557 commit 456d7db

File tree

9 files changed

+462
-5
lines changed

9 files changed

+462
-5
lines changed

lib/mongo/bulk_write.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ def base_spec(operation_id, session)
180180
:options => options,
181181
:id_generator => client.options[:id_generator],
182182
:session => session,
183-
:comment => options[:comment]
183+
:comment => options[:comment],
184+
:let => options[:let],
184185
}
185186
end
186187

lib/mongo/collection.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,8 @@ def insert_many(documents, options = {})
662662
# @option options [ true, false ] :bypass_document_validation Whether or
663663
# not to skip document level validation.
664664
# @option options [ Session ] :session The session to use for the set of operations.
665+
# @option options [ Hash ] :let Mapping of variables to use in the command.
666+
# See the server documentation for details.
665667
#
666668
# @return [ BulkWrite::Result ] The result of the operation.
667669
#

spec/runners/unified/crud_operations.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ def bulk_write(op)
221221
if comment = args.use('comment')
222222
opts[:comment] = comment
223223
end
224+
if let = args.use('let')
225+
opts[:let] = let
226+
end
224227
collection.bulk_write(requests, **opts)
225228
end
226229
end
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
description: "BulkWrite deleteMany-let"
2+
3+
schemaVersion: "1.0"
4+
5+
createEntities:
6+
- client:
7+
id: &client0 client0
8+
observeEvents: [ commandStartedEvent ]
9+
- database:
10+
id: &database0 database0
11+
client: *client0
12+
databaseName: &database0Name crud-tests
13+
- collection:
14+
id: &collection0 collection0
15+
database: *database0
16+
collectionName: &collection0Name coll0
17+
18+
initialData:
19+
- collectionName: *collection0Name
20+
databaseName: *database0Name
21+
documents:
22+
- { _id: 1 }
23+
- { _id: 2 }
24+
25+
tests:
26+
- description: "BulkWrite deleteMany with let option"
27+
runOnRequirements:
28+
- minServerVersion: "5.0"
29+
operations:
30+
- object: *collection0
31+
name: bulkWrite
32+
arguments:
33+
requests:
34+
- deleteMany:
35+
filter: &filter
36+
$expr:
37+
$eq: [ "$_id", "$$id" ]
38+
let: &let
39+
id: 1
40+
expectEvents:
41+
- client: *client0
42+
events:
43+
- commandStartedEvent:
44+
command:
45+
delete: *collection0Name
46+
deletes:
47+
- q: *filter
48+
limit: 0
49+
let: *let
50+
outcome:
51+
- collectionName: *collection0Name
52+
databaseName: *database0Name
53+
documents:
54+
- { _id: 2 }
55+
56+
- description: "BulkWrite deleteMany with let option unsupported (server-side error)"
57+
runOnRequirements:
58+
- minServerVersion: "3.6.0"
59+
maxServerVersion: "4.4.99"
60+
operations:
61+
- object: *collection0
62+
name: bulkWrite
63+
arguments:
64+
requests:
65+
- deleteOne:
66+
filter: *filter
67+
let: *let
68+
expectError:
69+
errorContains: "'delete.let' is an unknown field"
70+
isClientError: false
71+
expectEvents:
72+
- client: *client0
73+
events:
74+
- commandStartedEvent:
75+
command:
76+
delete: *collection0Name
77+
deletes:
78+
- q: *filter
79+
limit: 1
80+
let: *let
81+
outcome:
82+
- collectionName: *collection0Name
83+
databaseName: *database0Name
84+
documents:
85+
- { _id: 1 }
86+
- { _id: 2 }
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
description: "BulkWrite deleteOne-let"
2+
3+
schemaVersion: "1.0"
4+
5+
createEntities:
6+
- client:
7+
id: &client0 client0
8+
observeEvents: [ commandStartedEvent ]
9+
- database:
10+
id: &database0 database0
11+
client: *client0
12+
databaseName: &database0Name crud-tests
13+
- collection:
14+
id: &collection0 collection0
15+
database: *database0
16+
collectionName: &collection0Name coll0
17+
18+
initialData:
19+
- collectionName: *collection0Name
20+
databaseName: *database0Name
21+
documents:
22+
- { _id: 1 }
23+
- { _id: 2 }
24+
25+
tests:
26+
- description: "BulkWrite deleteOne with let option"
27+
runOnRequirements:
28+
- minServerVersion: "5.0"
29+
operations:
30+
- object: *collection0
31+
name: bulkWrite
32+
arguments:
33+
requests:
34+
- deleteOne:
35+
filter: &filter
36+
$expr:
37+
$eq: [ "$_id", "$$id" ]
38+
let: &let
39+
id: 1
40+
expectEvents:
41+
- client: *client0
42+
events:
43+
- commandStartedEvent:
44+
command:
45+
delete: *collection0Name
46+
deletes:
47+
- q: *filter
48+
limit: 1
49+
let: *let
50+
outcome:
51+
- collectionName: *collection0Name
52+
databaseName: *database0Name
53+
documents:
54+
- { _id: 2 }
55+
56+
- description: "BulkWrite deleteOne with let option unsupported (server-side error)"
57+
runOnRequirements:
58+
- minServerVersion: "3.6.0"
59+
maxServerVersion: "4.9"
60+
operations:
61+
- object: *collection0
62+
name: bulkWrite
63+
arguments:
64+
requests:
65+
- deleteOne:
66+
filter: *filter
67+
let: *let
68+
expectError:
69+
errorContains: "'delete.let' is an unknown field"
70+
isClientError: false
71+
expectEvents:
72+
- client: *client0
73+
events:
74+
- commandStartedEvent:
75+
command:
76+
delete: *collection0Name
77+
deletes:
78+
- q: *filter
79+
limit: 1
80+
let: *let
81+
outcome:
82+
- collectionName: *collection0Name
83+
databaseName: *database0Name
84+
documents:
85+
- { _id: 1 }
86+
- { _id: 2 }
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
description: "BulkWrite replaceOne-let"
2+
3+
schemaVersion: "1.0"
4+
5+
createEntities:
6+
- client:
7+
id: &client0 client0
8+
observeEvents: [ commandStartedEvent ]
9+
- database:
10+
id: &database0 database0
11+
client: *client0
12+
databaseName: &database0Name crud-tests
13+
- collection:
14+
id: &collection0 collection0
15+
database: *database0
16+
collectionName: &collection0Name coll0
17+
18+
initialData:
19+
- collectionName: *collection0Name
20+
databaseName: *database0Name
21+
documents:
22+
- { _id: 1 }
23+
- { _id: 2 }
24+
25+
tests:
26+
- description: "BulkWrite replaceOne with let option"
27+
runOnRequirements:
28+
- minServerVersion: "5.0"
29+
operations:
30+
- object: *collection0
31+
name: bulkWrite
32+
arguments:
33+
requests:
34+
- replaceOne:
35+
filter: &filter
36+
$expr:
37+
$eq: [ "$_id", "$$id" ]
38+
replacement: &replacement {"x": 3}
39+
let: &let
40+
id: 1
41+
expectEvents:
42+
- client: *client0
43+
events:
44+
- commandStartedEvent:
45+
command:
46+
update: *collection0Name
47+
updates:
48+
- q: *filter
49+
u: *replacement
50+
let: *let
51+
outcome:
52+
- collectionName: *collection0Name
53+
databaseName: *database0Name
54+
documents:
55+
- { _id: 1, x: 3 }
56+
- { _id: 2 }
57+
58+
- description: "BulkWrite replaceOne with let option unsupported (server-side error)"
59+
runOnRequirements:
60+
- minServerVersion: "4.2"
61+
maxServerVersion: "4.9"
62+
operations:
63+
- object: *collection0
64+
name: bulkWrite
65+
arguments:
66+
requests:
67+
- replaceOne:
68+
filter: *filter
69+
replacement: *replacement
70+
let: *let
71+
expectError:
72+
errorContains: "'update.let' is an unknown field"
73+
isClientError: false
74+
expectEvents:
75+
- client: *client0
76+
events:
77+
- commandStartedEvent:
78+
command:
79+
update: *collection0Name
80+
updates:
81+
- q: *filter
82+
u: *replacement
83+
let: *let
84+
outcome:
85+
- collectionName: *collection0Name
86+
databaseName: *database0Name
87+
documents:
88+
- { _id: 1 }
89+
- { _id: 2 }
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
description: "BulkWrite updateMany-let"
2+
3+
schemaVersion: "1.0"
4+
5+
createEntities:
6+
- client:
7+
id: &client0 client0
8+
observeEvents: [ commandStartedEvent ]
9+
- database:
10+
id: &database0 database0
11+
client: *client0
12+
databaseName: &database0Name crud-tests
13+
- collection:
14+
id: &collection0 collection0
15+
database: *database0
16+
collectionName: &collection0Name coll0
17+
18+
initialData:
19+
- collectionName: *collection0Name
20+
databaseName: *database0Name
21+
documents:
22+
- { _id: 1, x: 20 }
23+
- { _id: 2, x: 21 }
24+
25+
tests:
26+
- description: "BulkWrite updateMany with let option"
27+
runOnRequirements:
28+
- minServerVersion: "5.0"
29+
operations:
30+
- object: *collection0
31+
name: bulkWrite
32+
arguments:
33+
requests:
34+
- updateMany:
35+
filter: &filter
36+
$expr:
37+
$eq: [ "$_id", "$$id" ]
38+
update: &update
39+
- $set:
40+
x: 21
41+
let: &let
42+
id: 1
43+
expectEvents:
44+
- client: *client0
45+
events:
46+
- commandStartedEvent:
47+
command:
48+
update: *collection0Name
49+
updates:
50+
- q: *filter
51+
u: *update
52+
multi: true
53+
upsert: { $$unsetOrMatches: false }
54+
let: *let
55+
outcome:
56+
- collectionName: *collection0Name
57+
databaseName: *database0Name
58+
documents:
59+
- { _id: 1, x: 21 }
60+
- { _id: 2, x: 21 }
61+
62+
- description: "BulkWrite updateMany with let option unsupported (server-side error)"
63+
runOnRequirements:
64+
- minServerVersion: "3.6.0"
65+
maxServerVersion: "4.9"
66+
operations:
67+
- object: *collection0
68+
name: bulkWrite
69+
arguments:
70+
requests:
71+
- updateMany:
72+
filter: *filter
73+
update: *update
74+
let: *let
75+
expectError:
76+
errorContains: "'update.let' is an unknown field"
77+
isClientError: false
78+
expectEvents:
79+
- client: *client0
80+
events:
81+
- commandStartedEvent:
82+
command:
83+
update: *collection0Name
84+
updates:
85+
- q: *filter
86+
u: *update
87+
multi: true
88+
upsert:
89+
$$unsetOrMatches: false
90+
let: *let
91+
92+
outcome:
93+
- collectionName: *collection0Name
94+
databaseName: *database0Name
95+
documents:
96+
- { _id: 1, x: 20 }
97+
- { _id: 2, x: 21 }

0 commit comments

Comments
 (0)