Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongo-php-library
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sinan
mongo-php-library
Commits
88ce8510
Commit
88ce8510
authored
Sep 22, 2016
by
Jeremy Mikola
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PHPLIB-219: Fix BSON serialization of findAndModify write concern
parent
71a3b88f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
58 additions
and
1 deletion
+58
-1
FindAndModify.php
src/Operation/FindAndModify.php
+1
-1
functions.php
src/functions.php
+28
-0
FunctionsTest.php
tests/FunctionsTest.php
+29
-0
No files found.
src/Operation/FindAndModify.php
View file @
88ce8510
...
...
@@ -191,7 +191,7 @@ class FindAndModify implements Executable
}
if
(
isset
(
$this
->
options
[
'writeConcern'
])
&&
\MongoDB\server_supports_feature
(
$server
,
self
::
$wireVersionForWriteConcern
))
{
$cmd
[
'writeConcern'
]
=
$this
->
options
[
'writeConcern'
]
;
$cmd
[
'writeConcern'
]
=
\MongoDB\write_concern_as_document
(
$this
->
options
[
'writeConcern'
])
;
}
return
new
Command
(
$cmd
);
...
...
src/functions.php
View file @
88ce8510
...
...
@@ -5,6 +5,7 @@ namespace MongoDB;
use
MongoDB\BSON\Serializable
;
use
MongoDB\Driver\ReadConcern
;
use
MongoDB\Driver\Server
;
use
MongoDB\Driver\WriteConcern
;
use
MongoDB\Exception\InvalidArgumentException
;
use
stdClass
;
...
...
@@ -140,3 +141,30 @@ function server_supports_feature(Server $server, $feature)
return
(
$minWireVersion
<=
$feature
&&
$maxWireVersion
>=
$feature
);
}
/**
* Converts a WriteConcern instance to a stdClass for use in a BSON document.
*
* @internal
* @see https://jira.mongodb.org/browse/PHPC-498
* @param WriteConcern $writeConcern Write concern
* @return stdClass
*/
function
write_concern_as_document
(
WriteConcern
$writeConcern
)
{
$document
=
[];
if
(
$writeConcern
->
getW
()
!==
null
)
{
$document
[
'w'
]
=
$writeConcern
->
getW
();
}
if
(
$writeConcern
->
getJournal
()
!==
null
)
{
$document
[
'j'
]
=
$writeConcern
->
getJournal
();
}
if
(
$writeConcern
->
getWtimeout
()
!==
0
)
{
$document
[
'wtimeout'
]
=
$writeConcern
->
getWtimeout
();
}
return
(
object
)
$document
;
}
tests/FunctionsTest.php
View file @
88ce8510
...
...
@@ -3,6 +3,7 @@
namespace
MongoDB\Tests
;
use
MongoDB\Driver\ReadConcern
;
use
MongoDB\Driver\WriteConcern
;
/**
* Unit tests for utility functions.
...
...
@@ -25,4 +26,32 @@ class FunctionsTest extends \PHPUnit_Framework_TestCase
[
new
ReadConcern
(
ReadConcern
::
MAJORITY
),
(
object
)
[
'level'
=>
ReadConcern
::
MAJORITY
]
],
];
}
/**
* @dataProvider provideWriteConcernsAndDocuments
*/
public
function
testWriteConcernAsDocument
(
WriteConcern
$writeConcern
,
$expectedDocument
)
{
$this
->
assertEquals
(
$expectedDocument
,
\MongoDB\write_concern_as_document
(
$writeConcern
));
}
public
function
provideWriteConcernsAndDocuments
()
{
return
[
[
new
WriteConcern
(
-
3
),
(
object
)
[
'w'
=>
'majority'
]
],
// MONGOC_WRITE_CONCERN_W_MAJORITY
[
new
WriteConcern
(
-
2
),
(
object
)
[]
],
// MONGOC_WRITE_CONCERN_W_DEFAULT
[
new
WriteConcern
(
-
1
),
(
object
)
[
'w'
=>
-
1
]
],
[
new
WriteConcern
(
0
),
(
object
)
[
'w'
=>
0
]
],
[
new
WriteConcern
(
1
),
(
object
)
[
'w'
=>
1
]
],
[
new
WriteConcern
(
'majority'
),
(
object
)
[
'w'
=>
'majority'
]
],
[
new
WriteConcern
(
'tag'
),
(
object
)
[
'w'
=>
'tag'
]
],
[
new
WriteConcern
(
1
,
0
),
(
object
)
[
'w'
=>
1
]
],
[
new
WriteConcern
(
1
,
0
,
false
),
(
object
)
[
'w'
=>
1
,
'j'
=>
false
]
],
[
new
WriteConcern
(
1
,
1000
),
(
object
)
[
'w'
=>
1
,
'wtimeout'
=>
1000
]
],
[
new
WriteConcern
(
1
,
1000
,
true
),
(
object
)
[
'w'
=>
1
,
'wtimeout'
=>
1000
,
'j'
=>
true
]
],
[
new
WriteConcern
(
-
2
,
0
,
true
),
(
object
)
[
'j'
=>
true
]
],
// Note: wtimeout is only applicable applies for w > 1
[
new
WriteConcern
(
-
2
,
1000
),
(
object
)
[
'wtimeout'
=>
1000
]
],
];
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment