Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / lib / Doctrine / ORM / Mapping / DefaultQuoteStrategy.php
1 <?php
2 /*
3  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14  *
15  * This software consists of voluntary contributions made by many individuals
16  * and is licensed under the MIT license. For more information, see
17  * <http://www.doctrine-project.org>.
18  */
19
20 namespace Doctrine\ORM\Mapping;
21
22 use Doctrine\ORM\Mapping\ClassMetadata;
23 use Doctrine\DBAL\Platforms\AbstractPlatform;
24
25 /**
26  * A set of rules for determining the physical column, alias and table quotes
27  *
28  * @since   2.3
29  * @author  Fabio B. Silva <fabio.bat.silva@gmail.com>
30  */
31 class DefaultQuoteStrategy implements QuoteStrategy
32 {
33     /**
34      * {@inheritdoc}
35      */
36     public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform)
37     {
38         return isset($class->fieldMappings[$fieldName]['quoted'])
39             ? $platform->quoteIdentifier($class->fieldMappings[$fieldName]['columnName'])
40             : $class->fieldMappings[$fieldName]['columnName'];
41     }
42
43     /**
44      * {@inheritdoc}
45      */
46     public function getTableName(ClassMetadata $class, AbstractPlatform $platform)
47     {
48         return isset($class->table['quoted']) 
49             ? $platform->quoteIdentifier($class->table['name'])
50             : $class->table['name'];
51     }
52
53     /**
54      * {@inheritdoc}
55      */
56     public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform)
57     {
58         return isset($definition['quoted'])
59             ? $platform->quoteIdentifier($definition['sequenceName'])
60             : $definition['sequenceName'];
61     }
62
63     /**
64      * {@inheritdoc}
65      */
66     public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform)
67     {
68         return isset($joinColumn['quoted'])
69             ? $platform->quoteIdentifier($joinColumn['name'])
70             : $joinColumn['name'];
71     }
72
73     /**
74      * {@inheritdoc}
75      */
76     public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform)
77     {
78         return isset($joinColumn['quoted'])
79             ? $platform->quoteIdentifier($joinColumn['referencedColumnName'])
80             : $joinColumn['referencedColumnName'];
81     }
82
83     /**
84      * {@inheritdoc}
85      */
86     public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform)
87     {
88         return isset($association['joinTable']['quoted'])
89             ? $platform->quoteIdentifier($association['joinTable']['name'])
90             : $association['joinTable']['name'];
91     }
92
93     /**
94      * {@inheritdoc}
95      */
96     public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform)
97     {
98         $quotedColumnNames = array();
99
100         foreach ($class->identifier as $fieldName) {
101             if (isset($class->fieldMappings[$fieldName])) {
102                 $quotedColumnNames[] = $this->getColumnName($fieldName, $class, $platform);
103
104                 continue;
105             }
106
107             // Association defined as Id field
108             $joinColumns            = $class->associationMappings[$fieldName]['joinColumns'];
109             $assocQuotedColumnNames = array_map(
110                 function ($joinColumn) use ($platform)
111                 {
112                     return isset($joinColumn['quoted'])
113                         ? $platform->quoteIdentifier($joinColumn['name'])
114                         : $joinColumn['name'];
115                 },
116                 $joinColumns
117             );
118
119             $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames);
120         }
121
122         return $quotedColumnNames;
123     }
124
125     /**
126      * {@inheritdoc}
127      */
128     public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null)
129     {
130         // Trim the column alias to the maximum identifier length of the platform.
131         // If the alias is to long, characters are cut off from the beginning.
132         // And strip non alphanumeric characters
133         $columnName = $columnName . $counter;
134         $columnName = substr($columnName, -$platform->getMaxIdentifierLength());
135         $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName);
136
137         return $platform->getSQLResultCasing($columnName);
138     }
139
140 }