UUID id generator
This commit is contained in:
parent
3788d0e815
commit
0a835609fa
3 changed files with 67 additions and 0 deletions
49
lib/Doctrine/ORM/Id/UuidGenerator.php
Normal file
49
lib/Doctrine/ORM/Id/UuidGenerator.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
/*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.doctrine-project.org>.
|
||||
*/
|
||||
|
||||
namespace Doctrine\ORM\Id;
|
||||
|
||||
use Serializable, Doctrine\ORM\EntityManager;
|
||||
|
||||
/**
|
||||
* Represents an ID generator that uses a database sequence.
|
||||
*
|
||||
* @since 2.0
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @author Maarten de Keizer <m.de.keizer@markei.nl>
|
||||
*/
|
||||
class UuidGenerator extends AbstractIdGenerator
|
||||
{
|
||||
|
||||
/**
|
||||
* Generates an ID for the given entity.
|
||||
*
|
||||
* @param Doctrine\ORM\EntityManager $em The EntityManager to user
|
||||
* @param object $entity
|
||||
* @return string The generated value.
|
||||
* @override
|
||||
*/
|
||||
public function generate(EntityManager $em, $entity)
|
||||
{
|
||||
$conn = $em->getConnection();
|
||||
$sql = 'SELECT ' . $conn->getDatabasePlatform()->getGuidExpression();
|
||||
return $conn->query($sql)->fetchColumn(0);
|
||||
}
|
||||
|
||||
}
|
|
@ -515,6 +515,9 @@ class ClassMetadataFactory implements ClassMetadataFactoryInterface
|
|||
case ClassMetadata::GENERATOR_TYPE_NONE:
|
||||
$class->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator());
|
||||
break;
|
||||
case ClassMetadata::GENERATOR_TYPE_UUID:
|
||||
$class->setIdGenerator(new \Doctrine\ORM\Id\UuidGenerator());
|
||||
break;
|
||||
case ClassMetadata::GENERATOR_TYPE_TABLE:
|
||||
throw new ORMException("TableGenerator not yet implemented.");
|
||||
break;
|
||||
|
|
|
@ -94,6 +94,11 @@ class ClassMetadataInfo implements ClassMetadata
|
|||
* must have a natural, manually assigned id.
|
||||
*/
|
||||
const GENERATOR_TYPE_NONE = 5;
|
||||
/**
|
||||
* UUID means that a UUID/GUID expression is used for id generation. Full
|
||||
* portability is currently not guaranteed.
|
||||
*/
|
||||
const GENERATOR_TYPE_UUID = 6;
|
||||
/**
|
||||
* DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time
|
||||
* by doing a property-by-property comparison with the original data. This will
|
||||
|
@ -1559,6 +1564,16 @@ class ClassMetadataInfo implements ClassMetadata
|
|||
{
|
||||
return $this->generatorType == self::GENERATOR_TYPE_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the class use a UUID for id generation
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isIdentifierUuid()
|
||||
{
|
||||
return $this->generatorType == self::GENERATOR_TYPE_UUID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type of a field.
|
||||
|
|
Loading…
Add table
Reference in a new issue