Add namespace.
This commit is contained in:
365
Model/MongoDbCommand.php
Normal file
365
Model/MongoDbCommand.php
Normal file
@ -0,0 +1,365 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright NetMonsters <team@netmonsters.ru>
|
||||
* @link http://netmonsters.ru
|
||||
* @package Majestic
|
||||
* @subpackage db
|
||||
* @since 2011-11-15
|
||||
*/
|
||||
|
||||
class MongoCommandBuilder
|
||||
{
|
||||
|
||||
const FIND = 'Find';
|
||||
|
||||
const COUNT = 'Count';
|
||||
|
||||
const INSERT = 'Insert';
|
||||
|
||||
const UPDATE = 'Update';
|
||||
|
||||
const REMOVE = 'Remove';
|
||||
|
||||
const COMMAND = 'Command';
|
||||
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param MongoCollection $collection
|
||||
* @return MongoDbCommand
|
||||
*/
|
||||
static public function factory($type, $collection = null)
|
||||
{
|
||||
$class = ucfirst($type) . 'MongoCommand';
|
||||
$command = new $class();
|
||||
$command->setCollection($collection);
|
||||
return $command;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MongoDbCommand
|
||||
{
|
||||
|
||||
/**
|
||||
* @var MongoCollection
|
||||
*/
|
||||
protected $collection;
|
||||
|
||||
/**
|
||||
* Execute Mongo command/query
|
||||
*
|
||||
* @return mixed
|
||||
* @throws \Majestic\Exception\GeneralException
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
return $this->concreteExecute();
|
||||
} else {
|
||||
throw new \Majestic\Exception\GeneralException(get_called_class() . ' error. Bind all required params first.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $name Parameter name
|
||||
* @param mixed $value Parameter value
|
||||
* @return MongoDbCommand
|
||||
*/
|
||||
public function bindParam($name, $value)
|
||||
{
|
||||
if (property_exists($this, $name)) {
|
||||
$this->$name = $value;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param MongoCollection $collection Mongo collection
|
||||
* @return MongoDbCommand
|
||||
*/
|
||||
public function setCollection($collection)
|
||||
{
|
||||
$this->collection = $collection;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert query parameters array to string
|
||||
*
|
||||
* @param array $array
|
||||
* @return string
|
||||
*/
|
||||
protected function arrayToString($array)
|
||||
{
|
||||
$string = '[';
|
||||
if(!empty($array)) {
|
||||
$string .= PHP_EOL;
|
||||
}
|
||||
foreach($array as $key => $value) {
|
||||
$string .= "\t" . $key . ' = ' . $value . PHP_EOL;
|
||||
}
|
||||
$string .= ']' . PHP_EOL;
|
||||
return $string;
|
||||
}
|
||||
|
||||
abstract protected function concreteExecute();
|
||||
|
||||
abstract protected function checkParams();
|
||||
}
|
||||
|
||||
class FindMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $condition = array();
|
||||
|
||||
protected $fields = array();
|
||||
|
||||
protected $multiple = true;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
if ($this->multiple) {
|
||||
return $this->collection->find($this->condition, $this->fields);
|
||||
} else {
|
||||
return $this->collection->findOne($this->condition, $this->fields);
|
||||
}
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->condition) && isset($this->fields)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Condition: ' . $this->arrayToString($this->condition);
|
||||
$result .= 'Type: FIND' . PHP_EOL;
|
||||
$result .= 'Fields: ' . $this->arrayToString($this->fields);
|
||||
$mult = $this->multiple ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Multiple fields: ' . $mult . PHP_EOL;
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CountMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $condition = array();
|
||||
|
||||
protected $limit = 0;
|
||||
|
||||
protected $skip = 0;
|
||||
|
||||
protected $multiple = true;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
return $this->collection->count($this->condition, $this->limit, $this->skip);
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->condition) && isset($this->limit) && isset($this->skip)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Type: COUNT' . PHP_EOL;
|
||||
$result .= 'Condition: ' . $this->arrayToString($this->condition);
|
||||
$result .= 'Limit: ' . $this->limit . PHP_EOL;
|
||||
$result .= 'Skip: ' . $this->skip . PHP_EOL;
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class InsertMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $data;
|
||||
|
||||
protected $safe = true;
|
||||
|
||||
protected $insertId = false;
|
||||
|
||||
protected $multiple = false;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
$result = null;
|
||||
if (!$this->multiple) {
|
||||
$result = $this->collection->insert($this->data, array('safe' => $this->safe));
|
||||
$this->insertId = $this->data['_id'];
|
||||
} else {
|
||||
if (count($this->data)) {
|
||||
$result = $this->collection->batchInsert($this->data, array('safe' => $this->safe));
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->data) && isset($this->safe)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function getInsertId()
|
||||
{
|
||||
return $this->insertId;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Type: INSERT' . PHP_EOL;
|
||||
$result .= 'Data: ' . $this->arrayToString($this->data);
|
||||
$mult = $this->multiple ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Bulk insert: ' . $mult . PHP_EOL;
|
||||
$safe = $this->safe ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Safe operation: ' . $safe . PHP_EOL;
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UpdateMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $condition;
|
||||
|
||||
protected $data;
|
||||
|
||||
protected $multiple = true;
|
||||
|
||||
protected $upsert = false;
|
||||
|
||||
protected $safe = true;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
return $this->collection->update($this->condition, $this->data,
|
||||
array('multiple' => $this->multiple, 'upsert' => $this->upsert, 'safe' => $this->safe));
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->condition) && isset($this->data) &&
|
||||
isset($this->upsert) && isset($this->safe)
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Type: UPDATE' . PHP_EOL;
|
||||
$result .= 'Condition: ' . $this->arrayToString($this->condition);
|
||||
$result .= 'Data: ' . $this->arrayToString($this->data);
|
||||
$mult = $this->multiple ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Multiple fields: ' . $mult . PHP_EOL;
|
||||
$upsert = $this->upsert ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Upsert: ' . $upsert . PHP_EOL;
|
||||
$safe = $this->safe ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Safe operation: ' . $safe . PHP_EOL;
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RemoveMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $condition;
|
||||
|
||||
protected $safe = true;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
return $this->collection->remove($this->condition, array('safe' => $this->safe));
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->condition) && isset($this->safe)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Type: REMOVE' . PHP_EOL;
|
||||
$result .= 'Condition: ' . $this->arrayToString($this->condition);
|
||||
$safe = $this->safe ? 'TRUE' : 'FALSE';
|
||||
$result .= 'Safe operation: ' . $safe . PHP_EOL;
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CommandMongoCommand extends MongoDbCommand
|
||||
{
|
||||
protected $command;
|
||||
|
||||
protected function concreteExecute()
|
||||
{
|
||||
$db = $this->collection->db;
|
||||
if ($db instanceof MongoDB) {
|
||||
return $db->command($this->command);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
protected function checkParams()
|
||||
{
|
||||
if (isset($this->collection) && isset($this->command)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->checkParams()) {
|
||||
$result = PHP_EOL . 'Collection: ' . trim($this->collection, "\n") . PHP_EOL;
|
||||
$result .= 'Type: COMMAND' . PHP_EOL;
|
||||
$result .= 'Command: ' . $this->arrayToString($this->command);
|
||||
return $result;
|
||||
} else {
|
||||
return 'Command properties not set';
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user