Source of file SequenceFeature.php
Size: 3,730 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Db/TableGateway/Feature/SequenceFeature.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Db\TableGateway\Feature; use Zend\Db\Sql\Insert; use Zend\Db\Adapter\Driver\ResultInterface; use Zend\Db\Adapter\Driver\StatementInterface; class SequenceFeature extends AbstractFeature { /** * @var string */ protected $primaryKeyField; /** * @var string */ protected $sequenceName; /** * @var int */ protected $sequenceValue; /** * @param string $primaryKeyField * @param string $sequenceName */ public function __construct($primaryKeyField, $sequenceName) { $this->primaryKeyField = $primaryKeyField; $this->sequenceName = $sequenceName; } /** * @param Insert $insert */ public function preInsert(Insert $insert) { $columns = $insert->getRawState('columns'); $values = $insert->getRawState('values'); $key = array_search($this->primaryKeyField, $columns); if ($key !== false) { $this->sequenceValue = $values[$key]; return $insert; } $this->sequenceValue = $this->nextSequenceId(); if ($this->sequenceValue === null) { return $insert; } $insert->values(array($this->primaryKeyField => $this->sequenceValue), Insert::VALUES_MERGE); return $insert; } public function postInsert(StatementInterface $statement, ResultInterface $result) { if ($this->sequenceValue !== null) { $this->tableGateway->lastInsertValue = $this->sequenceValue; } } /** * Generate a new value from the specified sequence in the database, and return it. * @return int */ public function nextSequenceId() { $platform = $this->tableGateway->adapter->getPlatform(); $platformName = $platform->getName(); switch ($platformName) { case 'Oracle': $sql = 'SELECT ' . $platform->quoteIdentifier($this->sequenceName) . '.NEXTVAL as "nextval" FROM dual'; break; case 'PostgreSQL': $sql = 'SELECT NEXTVAL(\'' . $this->sequenceName . '\')'; break; default : return null; } $statement = $this->tableGateway->adapter->createStatement(); $statement->prepare($sql); $result = $statement->execute(); $sequence = $result->current(); unset($statement, $result); return $sequence['nextval']; } /** * Return the most recent value from the specified sequence in the database. * @return int */ public function lastSequenceId() { $platform = $this->tableGateway->adapter->getPlatform(); $platformName = $platform->getName(); switch ($platformName) { case 'Oracle': $sql = 'SELECT ' . $platform->quoteIdentifier($this->sequenceName) . '.CURRVAL as "currval" FROM dual'; break; case 'PostgreSQL': $sql = 'SELECT CURRVAL(\'' . $this->sequenceName . '\')'; break; default : return null; } $statement = $this->tableGateway->adapter->createStatement(); $statement->prepare($sql); $result = $statement->execute(); $sequence = $result->current(); unset($statement, $result); return $sequence['currval']; } } |