vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * This software consists of voluntary contributions made by many individuals
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * and is licensed under the LGPL. For more information, see
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * <http://www.doctrine-project.org>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
namespace Doctrine\DBAL\Platforms;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
use Doctrine\DBAL\DBALException,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    Doctrine\DBAL\Connection,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    Doctrine\DBAL\Types,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    Doctrine\DBAL\Schema\Table,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    Doctrine\DBAL\Schema\Index,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    Doctrine\DBAL\Schema\ForeignKeyConstraint,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    Doctrine\DBAL\Schema\TableDiff,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    Doctrine\DBAL\Schema\Column,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    Doctrine\DBAL\Types\Type;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * Base class for all DatabasePlatforms. The DatabasePlatforms are the central
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 * point of abstraction of platform-specific behaviors, features and SQL dialects.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * They are a passive source of information.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 * @link    www.doctrine-project.org
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @since   2.0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @version $Revision: 3938 $
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 * @author  Jonathan Wage <jonwage@gmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
 * @author  Roman Borschel <roman@code-factory.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
 * @author  Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
 * @author  Benjamin Eberlei <kontakt@beberlei.de>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 * @todo Remove any unnecessary methods.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
abstract class AbstractPlatform
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    const CREATE_INDEXES = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    const CREATE_FOREIGNKEYS = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    const TRIM_UNSPECIFIED = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    const TRIM_LEADING = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    const TRIM_TRAILING = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
     * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    const TRIM_BOTH = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    protected $doctrineTypeMapping = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
     * Contains a list of all columns that should generate parseable column comments for type-detection
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
     * in reverse engineering scenarios.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    protected $doctrineTypeComments = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
     * Constructor.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    public function __construct() {}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
     * Gets the SQL snippet that declares a boolean column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    abstract public function getBooleanTypeDeclarationSQL(array $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
     * Gets the SQL snippet that declares a 4 byte integer column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    abstract public function getIntegerTypeDeclarationSQL(array $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
     * Gets the SQL snippet that declares an 8 byte integer column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    abstract public function getBigIntTypeDeclarationSQL(array $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
     * Gets the SQL snippet that declares a 2 byte integer column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    abstract public function getSmallIntTypeDeclarationSQL(array $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
     * Gets the SQL snippet that declares common properties of an integer column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
    abstract protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
     * Lazy load Doctrine Type Mappings
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    abstract protected function initializeDoctrineTypeMappings();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
     * Gets the SQL snippet used to declare a VARCHAR column type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
     * @param array $field
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    public function getVarcharTypeDeclarationSQL(array $field)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        if ( !isset($field['length'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
            $field['length'] = $this->getVarcharDefaultLength();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        $fixed = (isset($field['fixed'])) ? $field['fixed'] : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
        if ($field['length'] > $this->getVarcharMaxLength()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
            return $this->getClobTypeDeclarationSQL($field);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
            return $this->getVarcharTypeDeclarationSQLSnippet($field['length'], $fixed);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        throw DBALException::notSupported('VARCHARs not supported by Platform.');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
     * Gets the SQL snippet used to declare a CLOB column type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
     * @param array $field
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    abstract public function getClobTypeDeclarationSQL(array $field);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     * Gets the name of the platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
    abstract public function getName();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
     * Register a doctrine type to be used in conjunction with a column type of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
     * @param string $dbType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
     * @param string $doctrineType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    public function registerDoctrineTypeMapping($dbType, $doctrineType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        if ($this->doctrineTypeMapping === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
            $this->initializeDoctrineTypeMappings();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
        if (!Types\Type::hasType($doctrineType)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
            throw DBALException::typeNotFound($doctrineType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        $dbType = strtolower($dbType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        $this->doctrineTypeMapping[$dbType] = $doctrineType;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
     * Get the Doctrine type that is mapped for the given database column type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
     * @param  string $dbType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    public function getDoctrineTypeMapping($dbType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
        if ($this->doctrineTypeMapping === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
            $this->initializeDoctrineTypeMappings();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
        $dbType = strtolower($dbType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        if (isset($this->doctrineTypeMapping[$dbType])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
            return $this->doctrineTypeMapping[$dbType];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
            throw new \Doctrine\DBAL\DBALException("Unknown database type ".$dbType." requested, " . get_class($this) . " may not support it.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
     * Check if a database type is currently supported by this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
     * @param string $dbType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
    public function hasDoctrineTypeMappingFor($dbType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        if ($this->doctrineTypeMapping === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
            $this->initializeDoctrineTypeMappings();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        $dbType = strtolower($dbType);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        return isset($this->doctrineTypeMapping[$dbType]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
     * Initialize the Doctrine Type comments instance variable for in_array() checks.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    protected function initializeCommentedDoctrineTypes()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        $this->doctrineTypeComments = array(Type::TARRAY, Type::OBJECT);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
     * Is it necessary for the platform to add a parsable type comment to allow reverse engineering the given type?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
     * @param Type $doctrineType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    public function isCommentedDoctrineType(Type $doctrineType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
        if ($this->doctrineTypeComments === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
            $this->initializeCommentedDoctrineTypes();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        return in_array($doctrineType->getName(), $this->doctrineTypeComments);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
     * Mark this type as to be commented in ALTER TABLE and CREATE TABLE statements.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
     * @param Type $doctrineType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
    public function markDoctrineTypeCommented(Type $doctrineType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        if ($this->doctrineTypeComments === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
            $this->initializeCommentedDoctrineTypes();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
        $this->doctrineTypeComments[] = $doctrineType->getName();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
     * Get the comment to append to a column comment that helps parsing this type in reverse engineering.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
     * @param Type $doctrineType
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
    public function getDoctrineTypeComment(Type $doctrineType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        return '(DC2Type:' . $doctrineType->getName() . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
     * Return the comment of a passed column modified by potential doctrine type comment hints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
     * @param Column $column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    protected function getColumnComment(Column $column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
        $comment = $column->getComment();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
        if ($this->isCommentedDoctrineType($column->getType())) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
            $comment .= $this->getDoctrineTypeComment($column->getType());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
        return $comment;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
     * Gets the character used for identifier quoting.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
    public function getIdentifierQuoteCharacter()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
        return '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
     * Gets the string portion that starts an SQL comment.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
    public function getSqlCommentStartString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
        return "--";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
     * Gets the string portion that ends an SQL comment.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
    public function getSqlCommentEndString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
        return "\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
     * Gets the maximum length of a varchar field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
     * @return integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    public function getVarcharMaxLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
        return 4000;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
     * Gets the default length of a varchar field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
     * @return integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    public function getVarcharDefaultLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
        return 255;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
     * Gets all SQL wildcard characters of the platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    public function getWildcards()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
        return array('%', '_');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
     * Returns the regular expression operator.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    public function getRegexpExpression()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
     * Returns the average value of a column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
     * @param string $column    the column to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
     * @return string           generated sql including an AVG aggregate function
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
    public function getAvgExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
        return 'AVG(' .  $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
     * Returns the number of rows (without a NULL value) of a column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
     * If a '*' is used instead of a column the number of selected rows
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
     * is returned.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
     * @param string|integer $column    the column to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
     * @return string                   generated sql including a COUNT aggregate function
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    public function getCountExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
        return 'COUNT(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
     * Returns the highest value of a column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
     * @param string $column    the column to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
     * @return string           generated sql including a MAX aggregate function
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
    public function getMaxExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
        return 'MAX(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
     * Returns the lowest value of a column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
     * @param string $column the column to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
    public function getMinExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
        return 'MIN(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
     * Returns the total sum of a column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
     * @param string $column the column to use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
    public function getSumExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
        return 'SUM(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
    // scalar functions
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
     * Returns the md5 sum of a field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
     * Note: Not SQL92, but common functionality
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
    public function getMd5Expression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
        return 'MD5(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
     * Returns the length of a text field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
     * @param string $expression1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
     * @param string $expression2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
    public function getLengthExpression($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
        return 'LENGTH(' . $column . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
     * Rounds a numeric field to the number of decimals specified.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
     * @param string $expression1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
     * @param string $expression2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
    public function getRoundExpression($column, $decimals = 0)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
        return 'ROUND(' . $column . ', ' . $decimals . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
     * Returns the remainder of the division operation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
     * $expression1 / $expression2.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
     * @param string $expression1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
     * @param string $expression2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
    public function getModExpression($expression1, $expression2)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
        return 'MOD(' . $expression1 . ', ' . $expression2 . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
     * Trim a string, leading/trailing/both and with a given char which defaults to space.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
     * @param string $str
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
     * @param int $pos
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
     * @param string $char has to be quoted already
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
    public function getTrimExpression($str, $pos = self::TRIM_UNSPECIFIED, $char = false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
        $posStr = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
        $trimChar = ($char != false) ? $char . ' FROM ' : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
        if ($pos == self::TRIM_LEADING) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
            $posStr = 'LEADING '.$trimChar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
        } else if($pos == self::TRIM_TRAILING) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
            $posStr = 'TRAILING '.$trimChar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
        } else if($pos == self::TRIM_BOTH) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
            $posStr = 'BOTH '.$trimChar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
        return 'TRIM(' . $posStr . $str . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
     * rtrim
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
     * returns the string $str with proceeding space characters removed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
     * @param string $str       literal string or column name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
    public function getRtrimExpression($str)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
        return 'RTRIM(' . $str . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
     * ltrim
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
     * returns the string $str with leading space characters removed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
     * @param string $str       literal string or column name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
    public function getLtrimExpression($str)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
        return 'LTRIM(' . $str . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
     * upper
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
     * Returns the string $str with all characters changed to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
     * uppercase according to the current character set mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
     * @param string $str       literal string or column name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
    public function getUpperExpression($str)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
        return 'UPPER(' . $str . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
     * lower
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
     * Returns the string $str with all characters changed to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
     * lowercase according to the current character set mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
     * @param string $str       literal string or column name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
    public function getLowerExpression($str)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
        return 'LOWER(' . $str . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
     * returns the position of the first occurrence of substring $substr in string $str
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
     * @param string $substr    literal string to find
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
     * @param string $str       literal string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
     * @param int    $pos       position to start at, beginning of string by default
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
     * @return integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
    public function getLocateExpression($str, $substr, $startPos = false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
     * Returns the current system date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
    public function getNowExpression()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
        return 'NOW()';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
     * return string to call a function to get a substring inside an SQL statement
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
     * Note: Not SQL92, but common functionality.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
     * SQLite only supports the 2 parameter variant of this function
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
     * @param  string $value         an sql string literal or column name/alias
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
     * @param  integer $from     where to start the substring portion
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
     * @param  integer $len       the substring portion length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
    public function getSubstringExpression($value, $from, $len = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
        if ($len === null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
            return 'SUBSTRING(' . $value . ' FROM ' . $from . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
        else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
            return 'SUBSTRING(' . $value . ' FROM ' . $from . ' FOR ' . $len . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
     * Returns a series of strings concatinated
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
     * concat() accepts an arbitrary number of parameters. Each parameter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
     * must contain an expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
     * @param string $arg1, $arg2 ... $argN     strings that will be concatinated.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
    public function getConcatExpression()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
        return join(' || ' , func_get_args());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
     * Returns the SQL for a logical not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
     * Example:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
     * <code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
     * $q = new Doctrine_Query();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
     * $e = $q->expr;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
     * $q->select('*')->from('table')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
     *   ->where($e->eq('id', $e->not('null'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
     * </code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
     * @return string a logical expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
    public function getNotExpression($expression)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
        return 'NOT(' . $expression . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
     * Returns the SQL to check if a value is one in a set of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
     * given values.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
     * in() accepts an arbitrary number of parameters. The first parameter
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
     * must always specify the value that should be matched against. Successive
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
     * must contain a logical expression or an array with logical expressions.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
     * These expressions will be matched against the first parameter.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
     * @param string $column        the value that should be matched against
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
     * @param string|array(string)  values that will be matched against $column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
     * @return string logical expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
    public function getInExpression($column, $values)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
        if ( ! is_array($values)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
            $values = array($values);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
        $values = $this->getIdentifiers($values);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
        if (count($values) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
            throw \InvalidArgumentException('Values must not be empty.');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
        return $column . ' IN (' . implode(', ', $values) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
     * Returns SQL that checks if a expression is null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
     * @param string $expression the expression that should be compared to null
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
     * @return string logical expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
    public function getIsNullExpression($expression)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
        return $expression . ' IS NULL';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
     * Returns SQL that checks if a expression is not null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
     * @param string $expression the expression that should be compared to null
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
     * @return string logical expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
    public function getIsNotNullExpression($expression)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
        return $expression . ' IS NOT NULL';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
     * Returns SQL that checks if an expression evaluates to a value between
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
     * two values.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
     * The parameter $expression is checked if it is between $value1 and $value2.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
     * Note: There is a slight difference in the way BETWEEN works on some databases.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
     * http://www.w3schools.com/sql/sql_between.asp. If you want complete database
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
     * independence you should avoid using between().
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
     * @param string $expression the value to compare to
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
     * @param string $value1 the lower value to compare with
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
     * @param string $value2 the higher value to compare with
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
     * @return string logical expression
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
    public function getBetweenExpression($expression, $value1, $value2)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
        return $expression . ' BETWEEN ' .$value1 . ' AND ' . $value2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
    public function getAcosExpression($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
        return 'ACOS(' . $value . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
    public function getSinExpression($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        return 'SIN(' . $value . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
    public function getPiExpression()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
        return 'PI()';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
    public function getCosExpression($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
        return 'COS(' . $value . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
     * Calculate the difference in days between the two passed dates.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
     * Computes diff = date1 - date2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
     * @param string $date1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
     * @param string $date2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
    public function getDateDiffExpression($date1, $date2)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
     * Add the number of given days to a date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
     * @param string $date
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
     * @param int $days
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
    public function getDateAddDaysExpression($date, $days)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
     * Substract the number of given days to a date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
     * @param string $date
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
     * @param int $days
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
    public function getDateSubDaysExpression($date, $days)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
     * Add the number of given months to a date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
     * @param string $date
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
     * @param int $months
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
    public function getDateAddMonthExpression($date, $months)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
     * Substract the number of given months to a date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
     * @param string $date
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
     * @param int $months
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
    public function getDateSubMonthExpression($date, $months)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
    public function getForUpdateSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
        return 'FOR UPDATE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
     * Honors that some SQL vendors such as MsSql use table hints for locking instead of the ANSI SQL FOR UPDATE specification.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
     * @param  string $fromClause
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
     * @param  int $lockMode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
    public function appendLockHint($fromClause, $lockMode)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
        return $fromClause;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
     * Get the sql snippet to append to any SELECT statement which locks rows in shared read lock.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
     * This defaults to the ASNI SQL "FOR UPDATE", which is an exclusive lock (Write). Some database
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
     * vendors allow to lighten this constraint up to be a real read lock.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
    public function getReadLockSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
        return $this->getForUpdateSQL();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
     * Get the SQL snippet to append to any SELECT statement which obtains an exclusive lock on the rows.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
     * The semantics of this lock mode should equal the SELECT .. FOR UPDATE of the ASNI SQL standard.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
    public function getWriteLockSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
        return $this->getForUpdateSQL();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
    public function getDropDatabaseSQL($database)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
        return 'DROP DATABASE ' . $database;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
     * Drop a Table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
     * @param  Table|string $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
    public function getDropTableSQL($table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
        if ($table instanceof \Doctrine\DBAL\Schema\Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
        return 'DROP TABLE ' . $table;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
     * Drop index from a table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
     * @param Index|string $name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
     * @param string|Table $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
    public function getDropIndexSQL($index, $table=null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
        if($index instanceof \Doctrine\DBAL\Schema\Index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
            $index = $index->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
        } else if(!is_string($index)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
            throw new \InvalidArgumentException('AbstractPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
        return 'DROP INDEX ' . $index;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
     * Get drop constraint sql
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
     * @param  \Doctrine\DBAL\Schema\Constraint $constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
     * @param  string|Table $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
    public function getDropConstraintSQL($constraint, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
        if ($constraint instanceof \Doctrine\DBAL\Schema\Constraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
            $constraint = $constraint->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
        if ($table instanceof \Doctrine\DBAL\Schema\Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
        return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $constraint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
     * @param  ForeignKeyConstraint|string $foreignKey
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
     * @param  Table|string $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
    public function getDropForeignKeySQL($foreignKey, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
        if ($foreignKey instanceof \Doctrine\DBAL\Schema\ForeignKeyConstraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
            $foreignKey = $foreignKey->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
        if ($table instanceof \Doctrine\DBAL\Schema\Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
        return 'ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $foreignKey;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
     * Gets the SQL statement(s) to create a table with the specified name, columns and constraints
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
     * on this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
     * @param string $table The name of the table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
     * @param int $createFlags
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
     * @return array The sequence of SQL statements.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
    public function getCreateTableSQL(Table $table, $createFlags=self::CREATE_INDEXES)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
        if ( ! is_int($createFlags)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
            throw new \InvalidArgumentException("Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
        if (count($table->getColumns()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
            throw DBALException::noColumnsSpecifiedForTable($table->getName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
        $tableName = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
        $options = $table->getOptions();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
        $options['uniqueConstraints'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
        $options['indexes'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
        $options['primary'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
        if (($createFlags&self::CREATE_INDEXES) > 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
            foreach ($table->getIndexes() AS $index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
                /* @var $index Index */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
                if ($index->isPrimary()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
                    $options['primary'] = $index->getColumns();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
                } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
                    $options['indexes'][$index->getName()] = $index;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
        $columns = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
        foreach ($table->getColumns() AS $column) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
            /* @var \Doctrine\DBAL\Schema\Column $column */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
            $columnData = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
            $columnData['name'] = $column->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
            $columnData['type'] = $column->getType();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
            $columnData['length'] = $column->getLength();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
            $columnData['notnull'] = $column->getNotNull();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
            $columnData['fixed'] = $column->getFixed();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
            $columnData['unique'] = false; // TODO: what do we do about this?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
            $columnData['version'] = ($column->hasPlatformOption("version"))?$column->getPlatformOption('version'):false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
            if(strtolower($columnData['type']) == "string" && $columnData['length'] === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
                $columnData['length'] = 255;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
            $columnData['unsigned'] = $column->getUnsigned();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
            $columnData['precision'] = $column->getPrecision();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
            $columnData['scale'] = $column->getScale();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
            $columnData['default'] = $column->getDefault();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
            $columnData['columnDefinition'] = $column->getColumnDefinition();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
            $columnData['autoincrement'] = $column->getAutoincrement();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
            $columnData['comment'] = $this->getColumnComment($column);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
            if(in_array($column->getName(), $options['primary'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
                $columnData['primary'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
            $columns[$columnData['name']] = $columnData;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
        if (($createFlags&self::CREATE_FOREIGNKEYS) > 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
            $options['foreignKeys'] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
            foreach ($table->getForeignKeys() AS $fkConstraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
                $options['foreignKeys'][] = $fkConstraint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
        $sql = $this->_getCreateTableSQL($tableName, $columns, $options);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
        if ($this->supportsCommentOnStatement()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
            foreach ($table->getColumns() AS $column) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
                if ($column->getComment()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
                    $sql[] = $this->getCommentOnColumnSQL($tableName, $column->getName(), $this->getColumnComment($column));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
    public function getCommentOnColumnSQL($tableName, $columnName, $comment)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
        return "COMMENT ON COLUMN " . $tableName . "." . $columnName . " IS '" . $comment . "'";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
     * @param string $tableName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
     * @param array $columns
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
     * @param array $options
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
    protected function _getCreateTableSQL($tableName, array $columns, array $options = array())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
        $columnListSql = $this->getColumnDeclarationListSQL($columns);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
        if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
            foreach ($options['uniqueConstraints'] as $name => $definition) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
                $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($name, $definition);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
        if (isset($options['primary']) && ! empty($options['primary'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
            $columnListSql .= ', PRIMARY KEY(' . implode(', ', array_unique(array_values($options['primary']))) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
        if (isset($options['indexes']) && ! empty($options['indexes'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
            foreach($options['indexes'] as $index => $definition) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
                $columnListSql .= ', ' . $this->getIndexDeclarationSQL($index, $definition);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
        $query = 'CREATE TABLE ' . $tableName . ' (' . $columnListSql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
        $check = $this->getCheckDeclarationSQL($columns);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
        if ( ! empty($check)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
            $query .= ', ' . $check;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
        $query .= ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
        $sql[] = $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
        if (isset($options['foreignKeys'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
            foreach ((array) $options['foreignKeys'] AS $definition) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
                $sql[] = $this->getCreateForeignKeySQL($definition, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
    public function getCreateTemporaryTableSnippetSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
        return "CREATE TEMPORARY TABLE";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
     * Gets the SQL to create a sequence on this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
     * @param \Doctrine\DBAL\Schema\Sequence $sequence
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
     * @throws DBALException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
    public function getCreateSequenceSQL(\Doctrine\DBAL\Schema\Sequence $sequence)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
     * Gets the SQL statement to change a sequence on this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
     * @param \Doctrine\DBAL\Schema\Sequence $sequence 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
    public function getAlterSequenceSQL(\Doctrine\DBAL\Schema\Sequence $sequence)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
     * Gets the SQL to create a constraint on a table on this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
     * @param Constraint $constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
     * @param string|Table $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
    public function getCreateConstraintSQL(\Doctrine\DBAL\Schema\Constraint $constraint, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
        if ($table instanceof \Doctrine\DBAL\Schema\Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
        $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $constraint->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
        $columns = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
        foreach ($constraint->getColumns() as $column) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
            $columns[] = $column;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
        $columnList = '('. implode(', ', $columns) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
        $referencesClause = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
        if ($constraint instanceof \Doctrine\DBAL\Schema\Index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
            if($constraint->isPrimary()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
                $query .= ' PRIMARY KEY';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
            } elseif ($constraint->isUnique()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
                $query .= ' UNIQUE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
                throw new \InvalidArgumentException(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
                    'Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
                );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
        } else if ($constraint instanceof \Doctrine\DBAL\Schema\ForeignKeyConstraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
            $query .= ' FOREIGN KEY';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
            $foreignColumns = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
            foreach ($constraint->getForeignColumns() AS $column) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
                $foreignColumns[] = $column;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
            
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
            $referencesClause = ' REFERENCES '.$constraint->getForeignTableName(). ' ('.implode(', ', $foreignColumns).')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
        $query .= ' '.$columnList.$referencesClause;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
        return $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
     * Gets the SQL to create an index on a table on this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
     * @param Index $index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
     * @param string|Table $table name of the table on which the index is to be created
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
    public function getCreateIndexSQL(Index $index, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
        if ($table instanceof Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
        $name = $index->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
        $columns = $index->getColumns();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
        if (count($columns) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
            throw new \InvalidArgumentException("Incomplete definition. 'columns' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
        if ($index->isPrimary()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
            return $this->getCreatePrimaryKeySQL($index, $table);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
            $type = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
            if ($index->isUnique()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
                $type = 'UNIQUE ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
            $query = 'CREATE ' . $type . 'INDEX ' . $name . ' ON ' . $table;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
            $query .= ' (' . $this->getIndexFieldDeclarationListSQL($columns) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
        return $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
     * Get SQL to create an unnamed primary key constraint.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
     * @param Index $index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
     * @param string|Table $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
    public function getCreatePrimaryKeySQL(Index $index, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
        return 'ALTER TABLE ' . $table . ' ADD PRIMARY KEY (' . $this->getIndexFieldDeclarationListSQL($index->getColumns()) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
     * Quotes a string so that it can be safely used as a table or column name,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
     * even if it is a reserved word of the platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
     * NOTE: Just because you CAN use quoted identifiers doesn't mean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
     * you SHOULD use them.  In general, they end up causing way more
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
     * problems than they solve.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
     * @param string $str           identifier name to be quoted
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
     * @return string               quoted identifier string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
    public function quoteIdentifier($str)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
        $c = $this->getIdentifierQuoteCharacter();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
        return $c . $str . $c;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
     * Create a new foreign key
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
     * @param ForeignKeyConstraint  $foreignKey    ForeignKey instance
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
     * @param string|Table          $table         name of the table on which the foreign key is to be created
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
    public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
        if ($table instanceof \Doctrine\DBAL\Schema\Table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
            $table = $table->getQuotedName($this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
        $query = 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclarationSQL($foreignKey);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
        return $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
     * Gets the sql statements for altering an existing table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
     * The method returns an array of sql statements, since some platforms need several statements.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
     * @param TableDiff $diff
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
    public function getAlterTableSQL(TableDiff $diff)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
    protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
        $tableName = $diff->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
        $sql = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
        if ($this->supportsForeignKeyConstraints()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
            foreach ($diff->removedForeignKeys AS $foreignKey) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
                $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
            foreach ($diff->changedForeignKeys AS $foreignKey) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
                $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
        foreach ($diff->removedIndexes AS $index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
            $sql[] = $this->getDropIndexSQL($index, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
        foreach ($diff->changedIndexes AS $index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
            $sql[] = $this->getDropIndexSQL($index, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
    protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
        if ($diff->newName !== false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
            $tableName = $diff->newName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
            $tableName = $diff->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
        $sql = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
        if ($this->supportsForeignKeyConstraints()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
            foreach ($diff->addedForeignKeys AS $foreignKey) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
                $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
            foreach ($diff->changedForeignKeys AS $foreignKey) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
                $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
        foreach ($diff->addedIndexes AS $index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
            $sql[] = $this->getCreateIndexSQL($index, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
        foreach ($diff->changedIndexes AS $index) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
            $sql[] = $this->getCreateIndexSQL($index, $tableName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
     * Common code for alter table statement generation that updates the changed Index and Foreign Key definitions.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
     * @param TableDiff $diff
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
    protected function _getAlterTableIndexForeignKeySQL(TableDiff $diff)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
        return array_merge($this->getPreAlterTableIndexForeignKeySQL($diff), $this->getPostAlterTableIndexForeignKeySQL($diff));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
     * Get declaration of a number of fields in bulk
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
     * @param array $fields  a multidimensional associative array.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
     *      The first dimension determines the field name, while the second
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
     *      dimension is keyed with the name of the properties
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
     *      of the field being declared as array indexes. Currently, the types
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
     *      of supported field properties are as follows:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
     *      length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
     *          Integer value that determines the maximum length of the text
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
     *          field. If this argument is missing the field should be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
     *          declared to have the longest length allowed by the DBMS.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
     *      default
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
     *          Text value to be used as default for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
     *      notnull
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
     *          Boolean flag that indicates whether this field is constrained
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
     *          to not be set to null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
     *      charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
     *          Text value with the default CHARACTER SET for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
     *      collation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
     *          Text value with the default COLLATION for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
     *      unique
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
     *          unique constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
    public function getColumnDeclarationListSQL(array $fields)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
        $queryFields = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
        foreach ($fields as $fieldName => $field) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
            $query = $this->getColumnDeclarationSQL($fieldName, $field);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
            $queryFields[] = $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
        return implode(', ', $queryFields);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
     * Obtain DBMS specific SQL code portion needed to declare a generic type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
     * field to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
     * @param string $name   name the field to be declared.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
     * @param array  $field  associative array with the name of the properties
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
     *      of the field being declared as array indexes. Currently, the types
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
     *      of supported field properties are as follows:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
     *      length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
     *          Integer value that determines the maximum length of the text
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
     *          field. If this argument is missing the field should be
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
     *          declared to have the longest length allowed by the DBMS.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
     *      default
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
     *          Text value to be used as default for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
     *      notnull
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
     *          Boolean flag that indicates whether this field is constrained
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
     *          to not be set to null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
     *      charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
     *          Text value with the default CHARACTER SET for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
     *      collation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
     *          Text value with the default COLLATION for this field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
     *      unique
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
     *          unique constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
     *      check
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
     *          column check constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
     *      columnDefinition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
     *          a string that defines the complete column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
     * @return string  DBMS specific SQL code portion that should be used to declare the column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
    public function getColumnDeclarationSQL($name, array $field)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
        if (isset($field['columnDefinition'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
            $columnDef = $this->getCustomTypeDeclarationSQL($field);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
            $default = $this->getDefaultValueDeclarationSQL($field);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
            $charset = (isset($field['charset']) && $field['charset']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
                    ' ' . $this->getColumnCharsetDeclarationSQL($field['charset']) : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
            $collation = (isset($field['collation']) && $field['collation']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
                    ' ' . $this->getColumnCollationDeclarationSQL($field['collation']) : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
            $notnull = (isset($field['notnull']) && $field['notnull']) ? ' NOT NULL' : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
            $unique = (isset($field['unique']) && $field['unique']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
                    ' ' . $this->getUniqueFieldDeclarationSQL() : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
            $check = (isset($field['check']) && $field['check']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
                    ' ' . $field['check'] : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
            $typeDecl = $field['type']->getSqlDeclaration($field, $this);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
            $columnDef = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
        if ($this->supportsInlineColumnComments() && isset($field['comment']) && $field['comment']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
            $columnDef .= " COMMENT '" . $field['comment'] . "'";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
        return $name . ' ' . $columnDef;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
     * Gets the SQL snippet that declares a floating point column of arbitrary precision.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
    public function getDecimalTypeDeclarationSQL(array $columnDef) 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
        $columnDef['precision'] = ( ! isset($columnDef['precision']) || empty($columnDef['precision']))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
            ? 10 : $columnDef['precision'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
        $columnDef['scale'] = ( ! isset($columnDef['scale']) || empty($columnDef['scale']))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
            ? 0 : $columnDef['scale'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
        return 'NUMERIC(' . $columnDef['precision'] . ', ' . $columnDef['scale'] . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
     * Obtain DBMS specific SQL code portion needed to set a default value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
     * declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
     * @param array $field      field definition array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
     * @return string           DBMS specific SQL code portion needed to set a default value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
    public function getDefaultValueDeclarationSQL($field)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
        $default = empty($field['notnull']) ? ' DEFAULT NULL' : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
        if (isset($field['default'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
            $default = " DEFAULT '".$field['default']."'";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
            if (isset($field['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
                if (in_array((string)$field['type'], array("Integer", "BigInteger", "SmallInteger"))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
                    $default = " DEFAULT ".$field['default'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
                } else if ((string)$field['type'] == 'DateTime' && $field['default'] == $this->getCurrentTimestampSQL()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
                    $default = " DEFAULT ".$this->getCurrentTimestampSQL();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
        return $default;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
     * Obtain DBMS specific SQL code portion needed to set a CHECK constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
     * declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
     * @param array $definition     check definition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
     * @return string               DBMS specific SQL code portion needed to set a CHECK constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
    public function getCheckDeclarationSQL(array $definition)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
        $constraints = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
        foreach ($definition as $field => $def) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
            if (is_string($def)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
                $constraints[] = 'CHECK (' . $def . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
                if (isset($def['min'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
                    $constraints[] = 'CHECK (' . $field . ' >= ' . $def['min'] . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
                if (isset($def['max'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
                    $constraints[] = 'CHECK (' . $field . ' <= ' . $def['max'] . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
        return implode(', ', $constraints);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
     * Obtain DBMS specific SQL code portion needed to set a unique
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
     * constraint declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
     * @param string $name          name of the unique constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
     * @param Index $index          index definition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
     * @return string               DBMS specific SQL code portion needed 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
     *                              to set a constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
    public function getUniqueConstraintDeclarationSQL($name, Index $index)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
        if (count($index->getColumns()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
            throw \InvalidArgumentException("Incomplete definition. 'columns' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
        return 'CONSTRAINT ' . $name . ' UNIQUE ('
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
             . $this->getIndexFieldDeclarationListSQL($index->getColumns()) 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
             . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
     * Obtain DBMS specific SQL code portion needed to set an index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
     * declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
     * @param string $name          name of the index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
     * @param Index $index          index definition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
     * @return string               DBMS specific SQL code portion needed to set an index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
    public function getIndexDeclarationSQL($name, Index $index)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
        $type = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
        if($index->isUnique()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
            $type = 'UNIQUE ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
        if (count($index->getColumns()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
            throw \InvalidArgumentException("Incomplete definition. 'columns' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
        return $type . 'INDEX ' . $name . ' ('
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
             . $this->getIndexFieldDeclarationListSQL($index->getColumns()) 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
             . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
     * getCustomTypeDeclarationSql
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
     * Obtail SQL code portion needed to create a custom column,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
     * e.g. when a field has the "columnDefinition" keyword.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
     * Only "AUTOINCREMENT" and "PRIMARY KEY" are added if appropriate.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
    public function getCustomTypeDeclarationSQL(array $columnDef)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
        return $columnDef['columnDefinition'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
     * getIndexFieldDeclarationList
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
     * Obtain DBMS specific SQL code portion needed to set an index
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
     * declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
    public function getIndexFieldDeclarationListSQL(array $fields)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
        $ret = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
        foreach ($fields as $field => $definition) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
            if (is_array($definition)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
                $ret[] = $field;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
                $ret[] = $definition;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
        return implode(', ', $ret);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
     * A method to return the required SQL string that fits between CREATE ... TABLE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
     * to create the table as a temporary table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
     * Should be overridden in driver classes to return the correct string for the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
     * specific database type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
     * The default is to return the string "TEMPORARY" - this will result in a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
     * SQL error for any database that does not support temporary tables, or that
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
     * requires a different SQL command from "CREATE TEMPORARY TABLE".
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
     * @return string The string required to be placed between "CREATE" and "TABLE"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
     *                to generate a temporary table, if possible.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
    public function getTemporaryTableSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
        return 'TEMPORARY';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
     * Some vendors require temporary table names to be qualified specially.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
     * @param  string $tableName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
    public function getTemporaryTableName($tableName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
        return $tableName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
     * Get sql query to show a list of database.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
    public function getShowDatabasesSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
     * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
     * of a field declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
     * @param array $definition         an associative array with the following structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
     *          name                    optional constraint name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
     *          local                   the local field(s)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
     *          foreign                 the foreign reference field(s)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
     *          foreignTable            the name of the foreign table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
     *          onDelete                referential delete action
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
     *          onUpdate                referential update action
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
     *          deferred                deferred constraint checking
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
     * The onDelete and onUpdate keys accept the following values:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
     * CASCADE: Delete or update the row from the parent table and automatically delete or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
     *          update the matching rows in the child table. Both ON DELETE CASCADE and ON UPDATE CASCADE are supported.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
     *          Between two tables, you should not define several ON UPDATE CASCADE clauses that act on the same column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
     *          in the parent table or in the child table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
     * SET NULL: Delete or update the row from the parent table and set the foreign key column or columns in the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
     *          child table to NULL. This is valid only if the foreign key columns do not have the NOT NULL qualifier
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
     *          specified. Both ON DELETE SET NULL and ON UPDATE SET NULL clauses are supported.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
     * NO ACTION: In standard SQL, NO ACTION means no action in the sense that an attempt to delete or update a primary
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
     *           key value is not allowed to proceed if there is a related foreign key value in the referenced table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
     * RESTRICT: Rejects the delete or update operation for the parent table. NO ACTION and RESTRICT are the same as
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
     *           omitting the ON DELETE or ON UPDATE clause.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
     * SET DEFAULT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
     * @return string  DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
     *                 of a field declaration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
    public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
        $sql  = $this->getForeignKeyBaseDeclarationSQL($foreignKey);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
        $sql .= $this->getAdvancedForeignKeyOptionsSQL($foreignKey);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
     * Return the FOREIGN KEY query section dealing with non-standard options
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
     * as MATCH, INITIALLY DEFERRED, ON UPDATE, ...
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
     * @param ForeignKeyConstraint $foreignKey     foreign key definition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
    public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
        $query = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
        if ($this->supportsForeignKeyOnUpdate() && $foreignKey->hasOption('onUpdate')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
            $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
        if ($foreignKey->hasOption('onDelete')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
            $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
        return $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
     * returns given referential action in uppercase if valid, otherwise throws
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
     * an exception
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
     * @throws Doctrine_Exception_Exception     if unknown referential action given
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
     * @param string $action    foreign key referential action
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
     * @param string            foreign key referential action in uppercase
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
    public function getForeignKeyReferentialActionSQL($action)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
        $upper = strtoupper($action);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
        switch ($upper) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
            case 'CASCADE':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
            case 'SET NULL':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
            case 'NO ACTION':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
            case 'RESTRICT':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
            case 'SET DEFAULT':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
                return $upper;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
            break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
            default:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
                throw new \InvalidArgumentException('Invalid foreign key action: ' . $upper);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
     * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
     * of a field declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
     * @param ForeignKeyConstraint $foreignKey
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
    public function getForeignKeyBaseDeclarationSQL(ForeignKeyConstraint $foreignKey)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
        $sql = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
        if (strlen($foreignKey->getName())) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
            $sql .= 'CONSTRAINT ' . $foreignKey->getQuotedName($this) . ' ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
        $sql .= 'FOREIGN KEY (';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
        if (count($foreignKey->getLocalColumns()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
            throw new \InvalidArgumentException("Incomplete definition. 'local' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
        if (count($foreignKey->getForeignColumns()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
            throw new \InvalidArgumentException("Incomplete definition. 'foreign' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
        if (strlen($foreignKey->getForeignTableName()) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
            throw new \InvalidArgumentException("Incomplete definition. 'foreignTable' required.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
        $sql .= implode(', ', $foreignKey->getLocalColumns())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
              . ') REFERENCES '
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
              . $foreignKey->getForeignTableName() . '('
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
              . implode(', ', $foreignKey->getForeignColumns()) . ')';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
        return $sql;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
     * Obtain DBMS specific SQL code portion needed to set the UNIQUE constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
     * of a field declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
     * @return string  DBMS specific SQL code portion needed to set the UNIQUE constraint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
     *                 of a field declaration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
    public function getUniqueFieldDeclarationSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
        return 'UNIQUE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
     * Obtain DBMS specific SQL code portion needed to set the CHARACTER SET
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
     * of a field declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
     * @param string $charset   name of the charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
     * @return string  DBMS specific SQL code portion needed to set the CHARACTER SET
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
     *                 of a field declaration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
    public function getColumnCharsetDeclarationSQL($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
        return '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
     * Obtain DBMS specific SQL code portion needed to set the COLLATION
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
     * of a field declaration to be used in statements like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
     * @param string $collation   name of the collation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
     * @return string  DBMS specific SQL code portion needed to set the COLLATION
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
     *                 of a field declaration.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
    public function getColumnCollationDeclarationSQL($collation)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
        return '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
     * Whether the platform prefers sequences for ID generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
     * Subclasses should override this method to return TRUE if they prefer sequences.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
    public function prefersSequences()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
     * Whether the platform prefers identity columns (eg. autoincrement) for ID generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
     * Subclasses should override this method to return TRUE if they prefer identity columns.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
    public function prefersIdentityColumns()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
     * Some platforms need the boolean values to be converted.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
     * The default conversion in this implementation converts to integers (false => 0, true => 1).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
     * @param mixed $item
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
    public function convertBooleans($item)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
        if (is_array($item)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
            foreach ($item as $k => $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
                if (is_bool($value)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
                    $item[$k] = (int) $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
        } else if (is_bool($item)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
            $item = (int) $item;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
        return $item;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
     * Gets the SQL statement specific for the platform to set the charset.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
     * This function is MySQL specific and required by
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
     * {@see \Doctrine\DBAL\Connection::setCharset($charset)}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
     * @param string $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
    public function getSetCharsetSQL($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
        return "SET NAMES '".$charset."'";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
     * Gets the SQL specific for the platform to get the current date.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
    public function getCurrentDateSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
        return 'CURRENT_DATE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
     * Gets the SQL specific for the platform to get the current time.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
    public function getCurrentTimeSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
        return 'CURRENT_TIME';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
     * Gets the SQL specific for the platform to get the current timestamp
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
    public function getCurrentTimestampSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
        return 'CURRENT_TIMESTAMP';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
     * Get sql for transaction isolation level Connection constant
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
     * @param integer $level
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
    protected function _getTransactionIsolationLevelSQL($level)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
        switch ($level) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
            case Connection::TRANSACTION_READ_UNCOMMITTED:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
                return 'READ UNCOMMITTED';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
            case Connection::TRANSACTION_READ_COMMITTED:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
                return 'READ COMMITTED';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
            case Connection::TRANSACTION_REPEATABLE_READ:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
                return 'REPEATABLE READ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
            case Connection::TRANSACTION_SERIALIZABLE:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
                return 'SERIALIZABLE';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
            default:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
                throw new \InvalidArgumentException('Invalid isolation level:' . $level);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
    public function getListDatabasesSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
    public function getListSequencesSQL($database)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
    public function getListTableConstraintsSQL($table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
    public function getListTableColumnsSQL($table, $database = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
    public function getListTablesSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
    public function getListUsersSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
     * Get the SQL to list all views of a database or user.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
     * @param string $database
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
    public function getListViewsSQL($database)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
     * Get the list of indexes for the current database.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
     * The current database parameter is optional but will always be passed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
     * when using the SchemaManager API and is the database the given table is in.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
     * Attention: Some platforms only support currentDatabase when they
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
     * are connected with that database. Cross-database information schema
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
     * requests may be impossible.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
     * @param string $table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
     * @param string $currentDatabase 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
    public function getListTableIndexesSQL($table, $currentDatabase = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
    public function getListTableForeignKeysSQL($table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
    public function getCreateViewSQL($name, $sql)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
    public function getDropViewSQL($name)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
    public function getDropSequenceSQL($sequence)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
    public function getSequenceNextValSQL($sequenceName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
    public function getCreateDatabaseSQL($database)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
     * Get sql to set the transaction isolation level
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
     * @param integer $level
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
    public function getSetTransactionIsolationSQL($level)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
     * Obtain DBMS specific SQL to be used to create datetime fields in 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
     * statements like CREATE TABLE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
     * @param array $fieldDeclaration 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
    public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
     * Obtain DBMS specific SQL to be used to create datetime with timezone offset fields.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
     * @param array $fieldDeclaration
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
    public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
        return $this->getDateTimeTypeDeclarationSQL($fieldDeclaration);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
     * Obtain DBMS specific SQL to be used to create date fields in statements
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
     * like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
     * @param array $fieldDeclaration
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
    public function getDateTypeDeclarationSQL(array $fieldDeclaration)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
     * Obtain DBMS specific SQL to be used to create time fields in statements
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
     * like CREATE TABLE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
     * @param array $fieldDeclaration
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
    public function getTimeTypeDeclarationSQL(array $fieldDeclaration)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
    public function getFloatDeclarationSQL(array $fieldDeclaration)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
        return 'DOUBLE PRECISION';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
     * Gets the default transaction isolation level of the platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
     * @return integer The default isolation level.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
     * @see Doctrine\DBAL\Connection\TRANSACTION_* constants.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
    public function getDefaultTransactionIsolationLevel()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
        return Connection::TRANSACTION_READ_COMMITTED;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
    /* supports*() metods */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
     * Whether the platform supports sequences.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
    public function supportsSequences()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
     * Whether the platform supports identity columns.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
     * Identity columns are columns that recieve an auto-generated value from the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
     * database on insert of a row.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
    public function supportsIdentityColumns()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
     * Whether the platform supports indexes.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
    public function supportsIndexes()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
    public function supportsAlterTable()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
     * Whether the platform supports transactions.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
    public function supportsTransactions()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
     * Whether the platform supports savepoints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
    public function supportsSavepoints()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
     * Whether the platform supports releasing savepoints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
    public function supportsReleaseSavepoints()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
        return $this->supportsSavepoints();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
     * Whether the platform supports primary key constraints.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
    public function supportsPrimaryConstraints()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
     * Does the platform supports foreign key constraints?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
    public function supportsForeignKeyConstraints()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
     * Does this platform supports onUpdate in foreign key constraints?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
    public function supportsForeignKeyOnUpdate()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
        return ($this->supportsForeignKeyConstraints() && true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
     * Whether the platform supports database schemas.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
    public function supportsSchemas()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
     * Some databases don't allow to create and drop databases at all or only with certain tools.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
    public function supportsCreateDropDatabase()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
     * Whether the platform supports getting the affected rows of a recent
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
     * update/delete type query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
    public function supportsGettingAffectedRows()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
        return true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
     * Does this plaform support to add inline column comments as postfix.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
    public function supportsInlineColumnComments()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
     * Does this platform support the propriortary synatx "COMMENT ON asset"
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
    public function supportsCommentOnStatement()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
    public function getIdentityColumnNullInsertSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
        return "";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
     * Gets the format string, as accepted by the date() function, that describes
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
     * the format of a stored datetime value of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
     * @return string The format string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
    public function getDateTimeFormatString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
        return 'Y-m-d H:i:s';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
     * Gets the format string, as accepted by the date() function, that describes
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
     * the format of a stored datetime with timezone value of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
     * @return string The format string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
    public function getDateTimeTzFormatString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
        return 'Y-m-d H:i:s';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
     * Gets the format string, as accepted by the date() function, that describes
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
     * the format of a stored date value of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
     * @return string The format string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
    public function getDateFormatString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
        return 'Y-m-d';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
     * Gets the format string, as accepted by the date() function, that describes
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
     * the format of a stored time value of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
     * @return string The format string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
    public function getTimeFormatString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
        return 'H:i:s';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
     * Modify limit query
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
     * @param string $query
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
     * @param int $limit
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
     * @param int $offset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
    final public function modifyLimitQuery($query, $limit, $offset = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
        if ( $limit !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
            $limit = (int)$limit;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
        if ( $offset !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
            $offset = (int)$offset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
        return $this->doModifyLimitQuery($query, $limit, $offset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
     * @param string $query
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
     * @param int $limit
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
     * @param int $offset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
    protected function doModifyLimitQuery($query, $limit, $offset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
        if ( $limit !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
            $query .= ' LIMIT ' . $limit;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
        if ( $offset !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
            $query .= ' OFFSET ' . $offset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
        return $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
     * Gets the character casing of a column in an SQL result set of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
     * @param string $column The column name for which to get the correct character casing.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
     * @return string The column name in the character casing used in SQL result sets.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
    public function getSQLResultCasing($column)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
        return $column;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
     * Makes any fixes to a name of a schema element (table, sequence, ...) that are required
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
     * by restrictions of the platform, like a maximum length.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
     * @param string $schemaName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
    public function fixSchemaElementName($schemaElementName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
        return $schemaElementName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
     * Maximum length of any given databse identifier, like tables or column names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
     * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
    public function getMaxIdentifierLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
        return 63;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
     * Get the insert sql for an empty insert statement
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
     * @param string $tableName 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
     * @param string $identifierColumnName 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
     * @return string $sql
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
    public function getEmptyIdentityInsertSQL($tableName, $identifierColumnName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
        return 'INSERT INTO ' . $tableName . ' (' . $identifierColumnName . ') VALUES (null)';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
     * Generate a Truncate Table SQL statement for a given table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
     * Cascade is not supported on many platforms but would optionally cascade the truncate by
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
     * following the foreign keys.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
     * @param  string $tableName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
     * @param  bool $cascade
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
    public function getTruncateTableSQL($tableName, $cascade = false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
        return 'TRUNCATE '.$tableName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
     * This is for test reasons, many vendors have special requirements for dummy statements.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
    public function getDummySelectSQL()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
        return 'SELECT 1';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
     * Generate SQL to create a new savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
     * @param string $savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
    public function createSavePoint($savepoint)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
        return 'SAVEPOINT ' . $savepoint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
     * Generate SQL to release a savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
     * @param string $savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
    public function releaseSavePoint($savepoint)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
        return 'RELEASE SAVEPOINT ' . $savepoint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
     * Generate SQL to rollback a savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
     * @param string $savepoint
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
    public function rollbackSavePoint($savepoint)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
        return 'ROLLBACK TO SAVEPOINT ' . $savepoint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
     * Return the keyword list instance of this platform.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
     * Throws exception if no keyword list is specified.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
     * @throws DBALException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
     * @return KeywordList
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
    final public function getReservedKeywordsList()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
        $class = $this->getReservedKeywordsClass();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
        $keywords = new $class;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
        if (!$keywords instanceof \Doctrine\DBAL\Platforms\Keywords\KeywordList) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
            throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
        return $keywords;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
     * The class name of the reserved keywords list.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
    protected function getReservedKeywordsClass()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
        throw DBALException::notSupported(__METHOD__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
}