From cc2fb1a07065eb51cff7b1b8e43d9dd2cbd2ccc7 Mon Sep 17 00:00:00 2001 From: Adrian Olek Date: Thu, 6 Mar 2014 23:09:26 +0100 Subject: [PATCH] Added index flags support in annotation, xml & yaml mapping drivers. --- doctrine-mapping.xsd | 1 + .../ORM/Mapping/Driver/AnnotationDriver.php | 5 ++++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 14 +++++++++++--- lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php | 13 ++++++++++++- lib/Doctrine/ORM/Mapping/Index.php | 5 +++++ lib/Doctrine/ORM/Tools/SchemaTool.php | 7 ++++++- 6 files changed, 39 insertions(+), 6 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index b6728f0de..f7364b7f7 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -341,6 +341,7 @@ + diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e127d8372..09479b77e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -101,7 +101,10 @@ class AnnotationDriver extends AbstractAnnotationDriver if ($tableAnnot->indexes !== null) { foreach ($tableAnnot->indexes as $indexAnnot) { - $index = array('columns' => $indexAnnot->columns); + $index = array( + 'columns' => $indexAnnot->columns, + 'flags' => $indexAnnot->flags + ); if ( ! empty($indexAnnot->name)) { $primaryTable['indexes'][$indexAnnot->name] = $index; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 3d867e1c5..c81c083e1 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -196,14 +196,22 @@ class XmlDriver extends FileDriver $metadata->table['indexes'] = array(); foreach ($xmlRoot->indexes->index as $index) { $columns = explode(',', (string)$index['columns']); - + + if(!isset($index['flags'])) { + $flags = array(); + } else { + $flags = explode(',', (string)$index['flags']); + } + if (isset($index['name'])) { $metadata->table['indexes'][(string)$index['name']] = array( - 'columns' => $columns + 'columns' => $columns, + 'flags' => $flags ); } else { $metadata->table['indexes'][] = array( - 'columns' => $columns + 'columns' => $columns, + 'flags' => $flags ); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 48aa7021b..6e3342902 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -213,8 +213,19 @@ class YamlDriver extends FileDriver $columns = $index['columns']; } + if(!isset($index['flags'])) + { + $flags = array(); + } elseif (is_string($index['flags'])) { + $flags = explode(',', $index['flags']); + $flags = array_map('trim', $flags); + } else { + $flags = $index['flags']; + } + $metadata->table['indexes'][$index['name']] = array( - 'columns' => $columns + 'columns' => $columns, + 'flags' => $flags ); } } diff --git a/lib/Doctrine/ORM/Mapping/Index.php b/lib/Doctrine/ORM/Mapping/Index.php index a6696c4b6..ff4532d47 100644 --- a/lib/Doctrine/ORM/Mapping/Index.php +++ b/lib/Doctrine/ORM/Mapping/Index.php @@ -34,4 +34,9 @@ final class Index implements Annotation * @var array */ public $columns; + + /** + * @var array + */ + public $flags; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index ad8b84f68..abad1013a 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -264,7 +264,12 @@ class SchemaTool if (isset($class->table['indexes'])) { foreach ($class->table['indexes'] as $indexName => $indexData) { - $table->addIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName); + if(!isset($indexData['flags'])) + { + $indexData['flags'] = array(); + } + + $table->addIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, (array) $indexData['flags']); } }