Commit 79d07ff7 authored by Jeremy Mikola's avatar Jeremy Mikola

PHPLIB-46: Index info and corresponding iterator class

parent 48b3de1c
<?php
namespace MongoDB\Model;
use ArrayAccess;
use BadMethodCallException;
/**
* Index information model class.
*
* This class models the index information returned by the listIndexes command
* or, for legacy servers, queries on the "system.indexes" collection. It
* provides methods to access common index options, and allows access to other
* options through the ArrayAccess interface (write methods are not supported).
* For information on keys and index options, see the referenced
* db.collection.createIndex() documentation.
*
* @api
* @see MongoDB\Collection::listIndexes()
* @see https://github.com/mongodb/specifications/blob/master/source/enumerate-indexes.rst
* @see http://docs.mongodb.org/manual/reference/method/db.collection.createIndex/
*/
class IndexInfo implements ArrayAccess
{
private $info;
/**
* Constructor.
*
* @param array $info Index info
*/
public function __construct(array $info)
{
$this->info = $info;
}
/**
* Return the index key(s).
*
* @return array
*/
public function getKeys()
{
return (array) $this->info['key'];
}
/**
* Return the index name.
*
* @return string
*/
public function getName()
{
return (string) $this->info['name'];
}
/**
* Return the index namespace (e.g. "db.collection").
*
* @return string
*/
public function getNamespace()
{
return (string) $this->info['ns'];
}
/**
* Return the index version.
*
* @return integer
*/
public function getVersion()
{
return (integer) $this->info['v'];
}
/**
* Return whether this is a sparse index.
*
* @see http://docs.mongodb.org/manual/core/index-sparse/
* @return boolean
*/
public function isSparse()
{
return ! empty($this->info['sparse']);
}
/**
* Return whether this is a TTL index.
*
* @see http://docs.mongodb.org/manual/core/index-ttl/
* @return boolean
*/
public function isTtl()
{
return array_key_exists('expireAfterSeconds', $this->info);
}
/**
* Return whether this is a unique index.
*
* @see http://docs.mongodb.org/manual/core/index-unique/
* @return boolean
*/
public function isUnique()
{
return ! empty($this->info['unique']);
}
/**
* Check whether a field exists in the index information.
*
* @see http://php.net/arrayaccess.offsetexists
* @param mixed $key
* @return boolean
*/
public function offsetExists($key)
{
return array_key_exists($key, $this->info);
}
/**
* Return the field's value from the index information.
*
* This method satisfies the Enumerating Indexes specification's requirement
* that index fields be made accessible under their original names. It may
* also be used to access fields that do not have a helper method.
*
* @see http://php.net/arrayaccess.offsetget
* @see https://github.com/mongodb/specifications/blob/master/source/enumerate-indexes.rst#getting-full-index-information
* @param mixed $key
* @return mixed
*/
public function offsetGet($key)
{
return $this->data[$key];
}
/**
* Not supported.
*
* @see http://php.net/arrayaccess.offsetset
* @throws BadMethodCallException IndexInfo is read-only
*/
public function offsetSet($key, $value)
{
throw new BadMethodCallException('IndexInfo is read-only');
}
/**
* Not supported.
*
* @see http://php.net/arrayaccess.offsetunset
* @throws BadMethodCallException IndexInfo is read-only
*/
public function offsetUnset($key)
{
throw new BadMethodCallException('IndexInfo is read-only');
}
}
<?php
namespace MongoDB\Model;
use Iterator;
/**
* IndexInfoIterator interface.
*
* This iterator is used for enumerating indexes in a collection.
*
* @api
* @see MongoDB\Collection::listIndexes()
*/
interface IndexInfoIterator extends Iterator
{
/**
* Return the current element as a IndexInfo instance.
*
* @return IndexInfo
*/
public function current();
}
<?php
namespace MongoDB\Model;
use IteratorIterator;
/**
* IndexInfoIterator for both listIndexes command and legacy query results.
*
* This common iterator may be used to wrap a Cursor returned by both the
* listIndexes command and, for legacy servers, queries on the "system.indexes"
* collection.
*
* @internal
* @see MongoDB\Collection::listIndexes()
* @see https://github.com/mongodb/specifications/blob/master/source/enumerate-indexes.rst
* @see http://docs.mongodb.org/manual/reference/command/listIndexes/
* @see http://docs.mongodb.org/manual/reference/system-collections/
*/
class IndexInfoIteratorIterator extends IteratorIterator implements IndexInfoIterator
{
/**
* Return the current element as an IndexInfo instance.
*
* @see IndexInfoIterator::current()
* @see http://php.net/iterator.current
* @return IndexInfo
*/
public function current()
{
return new IndexInfo(parent::current());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment