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
1269542c
Commit
1269542c
authored
Jun 16, 2015
by
Jeremy Mikola
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Extract Client::listDatabases() to an operation class
parent
bc65629c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
21 deletions
+83
-21
Client.php
src/Client.php
+6
-21
ListDatabases.php
src/Operation/ListDatabases.php
+77
-0
No files found.
src/Client.php
View file @
1269542c
...
...
@@ -7,9 +7,8 @@ use MongoDB\Driver\Cursor;
use
MongoDB\Driver\Manager
;
use
MongoDB\Driver\ReadPreference
;
use
MongoDB\Driver\WriteConcern
;
use
MongoDB\Exception\UnexpectedValueException
;
use
MongoDB\Model\DatabaseInfoIterator
;
use
MongoDB\
Model\DatabaseInfoLegacyIterator
;
use
MongoDB\
Operation\ListDatabases
;
class
Client
{
...
...
@@ -53,29 +52,15 @@ class Client
/**
* List databases.
*
* @see
http://docs.mongodb.org/manual/reference/command/listDatabases/
* @see
ListDatabases::__construct() for supported options
* @return DatabaseInfoIterator
* @throws UnexpectedValueException if the command result is malformed
*/
public
function
listDatabases
()
public
function
listDatabases
(
array
$options
=
array
()
)
{
$command
=
new
Command
(
array
(
'listDatabases'
=>
1
));
$operation
=
new
ListDatabases
(
$options
);
$server
=
$this
->
manager
->
selectServer
(
new
ReadPreference
(
ReadPreference
::
RP_PRIMARY
));
$cursor
=
$this
->
manager
->
executeCommand
(
'admin'
,
$command
);
$cursor
->
setTypeMap
(
array
(
'document'
=>
'array'
));
$result
=
current
(
$cursor
->
toArray
());
if
(
!
isset
(
$result
[
'databases'
])
||
!
is_array
(
$result
[
'databases'
]))
{
throw
new
UnexpectedValueException
(
'listDatabases command did not return a "databases" array'
);
}
/* Return an Iterator instead of an array in case listDatabases is
* eventually changed to return a command cursor, like the collection
* and index enumeration commands. This makes the "totalSize" command
* field inaccessible, but users can manually invoke the command if they
* need that value.
*/
return
new
DatabaseInfoLegacyIterator
(
$result
[
'databases'
]);
return
$operation
->
execute
(
$server
);
}
/**
...
...
src/Operation/ListDatabases.php
0 → 100644
View file @
1269542c
<?php
namespace
MongoDB\Operation
;
use
MongoDB\Driver\Command
;
use
MongoDB\Driver\Server
;
use
MongoDB\Exception\RuntimeException
;
use
MongoDB\Exception\UnexpectedValueException
;
use
MongoDB\Model\DatabaseInfoIterator
;
use
MongoDB\Model\DatabaseInfoLegacyIterator
;
/**
* Operation for the ListDatabases command.
*
* @api
* @see MongoDB\Client::listDatabases()
* @see http://docs.mongodb.org/manual/reference/command/ListDatabases/
*/
class
ListDatabases
implements
Executable
{
private
$options
;
/**
* Constructs a listDatabases command.
*
* Supported options:
*
* * maxTimeMS (integer): The maximum amount of time to allow the query to
* run.
*
* @param array $options Command options
*/
public
function
__construct
(
array
$options
=
array
())
{
if
(
isset
(
$options
[
'maxTimeMS'
])
&&
!
is_integer
(
$options
[
'maxTimeMS'
]))
{
throw
new
InvalidArgumentTypeException
(
'"maxTimeMS" option'
,
$options
[
'maxTimeMS'
],
'integer'
);
}
$this
->
options
=
$options
;
}
/**
* Execute the operation.
*
* @see Executable::execute()
* @param Server $server
* @return DatabaseInfoIterator
*/
public
function
execute
(
Server
$server
)
{
$cmd
=
array
(
'listDatabases'
=>
1
);
if
(
isset
(
$this
->
options
[
'maxTimeMS'
]))
{
$cmd
[
'maxTimeMS'
]
=
$this
->
options
[
'maxTimeMS'
];
}
$cursor
=
$server
->
executeCommand
(
'admin'
,
new
Command
(
$cmd
));
$cursor
->
setTypeMap
(
array
(
'document'
=>
'array'
));
$result
=
current
(
$cursor
->
toArray
());
if
(
empty
(
$result
[
'ok'
]))
{
throw
new
RuntimeException
(
isset
(
$result
[
'errmsg'
])
?
$result
[
'errmsg'
]
:
'Unknown error'
);
}
if
(
!
isset
(
$result
[
'databases'
])
||
!
is_array
(
$result
[
'databases'
]))
{
throw
new
UnexpectedValueException
(
'listDatabases command did not return a "databases" array'
);
}
/* Return an Iterator instead of an array in case listDatabases is
* eventually changed to return a command cursor, like the collection
* and index enumeration commands. This makes the "totalSize" command
* field inaccessible, but users can manually invoke the command if they
* need that value.
*/
return
new
DatabaseInfoLegacyIterator
(
$result
[
'databases'
]);
}
}
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