Anton Grebnev
13 years ago
8 changed files with 288 additions and 130 deletions
-
19model/DbDriver.php
-
77model/DbStatement.php
-
21model/MongoDbCommand.php
-
85model/MongoDriver.php
-
121model/MongoStatement.php
-
72model/MySQLiStatement.php
-
2model/NoSqlDbDriver.php
-
17model/SqlDbDriver.php
@ -0,0 +1,121 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* @copyright NetMonsters <team@netmonsters.ru> |
||||
|
* @link http://netmonsters.ru |
||||
|
* @package Majestic |
||||
|
* @subpackage db |
||||
|
* @since 2011-11-15 |
||||
|
*/ |
||||
|
|
||||
|
/** |
||||
|
* @property MongoDriver $driver |
||||
|
* @property MongoCursor $result |
||||
|
*/ |
||||
|
class MongoStatement extends DbStatement |
||||
|
{ |
||||
|
|
||||
|
public function fetch($style = Db::FETCH_OBJ) |
||||
|
{ |
||||
|
if (!$this->result) { |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
$row = false; |
||||
|
switch ($style) { |
||||
|
case Db::FETCH_OBJ: |
||||
|
$row = $this->fetchObject(); |
||||
|
break; |
||||
|
case Db::FETCH_ASSOC: |
||||
|
if ($this->result instanceof MongoCursor) { |
||||
|
$row = $this->result->getNext(); |
||||
|
} else { |
||||
|
$row = $this->result; |
||||
|
} |
||||
|
break; |
||||
|
default: |
||||
|
throw new Exception('Invalid fetch mode "' . $style . '" specified'); |
||||
|
} |
||||
|
return $row; |
||||
|
} |
||||
|
|
||||
|
public function fetchObject($class = 'stdClass') |
||||
|
{ |
||||
|
if ($this->result instanceof MongoCursor) { |
||||
|
$row = $this->result->getNext(); |
||||
|
} else { |
||||
|
$row = $this->result; |
||||
|
} |
||||
|
if (is_array($row) && isset($row['_id'])) { |
||||
|
$row = new ArrayObject($row, ArrayObject::ARRAY_AS_PROPS); |
||||
|
} else { |
||||
|
$row = false; |
||||
|
} |
||||
|
return $row; |
||||
|
} |
||||
|
|
||||
|
public function close() |
||||
|
{ |
||||
|
// TODO: Implement close() method.
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @return int |
||||
|
*/ |
||||
|
public function affectedRows() |
||||
|
{ |
||||
|
if (is_array($this->result)) { |
||||
|
if (isset($this->result['ok']) && $this->result['ok'] == 1 && isset($this->result['n'])) { |
||||
|
return $this->result['n']; |
||||
|
} else { |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
public function numRows() |
||||
|
{ |
||||
|
if ($this->result instanceof MongoCursor) { |
||||
|
return $this->result->count(); |
||||
|
} else { |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @param MongoDbComand $request |
||||
|
* @return bool |
||||
|
*/ |
||||
|
protected function driverExecute($request) |
||||
|
{ |
||||
|
$mongo = $this->driver->getConnection(); |
||||
|
if ($mongo instanceof Mongo) { |
||||
|
if (DEBUG) { |
||||
|
$profiler = Profiler::getInstance()->profilerCommand('Mongo', $request); |
||||
|
$result = $request->execute(); |
||||
|
$profiler->end(); |
||||
|
} else { |
||||
|
$result = $request->execute(); |
||||
|
} |
||||
|
if ($result === false) { |
||||
|
throw new Exception('MongoDB request error.'); |
||||
|
} |
||||
|
if ($result instanceof MongoCursor || is_array($result)) { |
||||
|
$this->result = $result; |
||||
|
} |
||||
|
return true; |
||||
|
} else { |
||||
|
throw new Exception('No connection to MongoDB server.'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public function bindParam($param, &$value) |
||||
|
{ |
||||
|
$this->request->bindParam($param, $value); |
||||
|
} |
||||
|
|
||||
|
protected function assemble() |
||||
|
{ |
||||
|
return $this->request; |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue