Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge MySQL 5.7.9 (GA) semantics into MySQL57Platform #2653

Merged
merged 1 commit into from
May 9, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/en/reference/platforms.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ MySQL
^^^^^

- ``MySqlPlatform`` for version 5.0 and above.
- ``MySQL57Platform`` for version 5.7 and above.
- ``MySQL57Platform`` for version 5.7 (5.7.9 GA) and above.

Oracle
^^^^^^
Expand Down
11 changes: 8 additions & 3 deletions lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,15 @@ public function createDatabasePlatformForVersion($version)

$majorVersion = $versionParts['major'];
$minorVersion = isset($versionParts['minor']) ? $versionParts['minor'] : 0;
$patchVersion = isset($versionParts['patch']) ? $versionParts['patch'] : 0;
$version = $majorVersion . '.' . $minorVersion . '.' . $patchVersion;
$patchVersion = isset($versionParts['patch']) ? $versionParts['patch'] : null;

if (version_compare($version, '5.7', '>=')) {
if ('5' === $majorVersion && '7' === $minorVersion && null === $patchVersion) {
$patchVersion = '9';
}

$version = $majorVersion . '.' . $minorVersion . '.' . $patchVersion;

if (version_compare($version, '5.7.9', '>=')) {
return new MySQL57Platform();
}

Expand Down
5 changes: 4 additions & 1 deletion lib/Doctrine/DBAL/Platforms/Keywords/MySQL57Keywords.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ protected function getKeywords()
'FOREIGN',
'FROM',
'FULLTEXT',
'GENERATED',
'GET',
'GRANT',
'GROUP',
Expand Down Expand Up @@ -183,12 +184,12 @@ protected function getKeywords()
'MODIFIES',
'NATURAL',
'NO_WRITE_TO_BINLOG',
'NONBLOCKING',
'NOT',
'NULL',
'NUMERIC',
'ON',
'OPTIMIZE',
'OPTIMIZER_COSTS',
'OPTION',
'OPTIONALLY',
'OR',
Expand Down Expand Up @@ -240,6 +241,7 @@ protected function getKeywords()
'SQLWARNING',
'SSL',
'STARTING',
'STORED',
'STRAIGHT_JOIN',
'TABLE',
'TERMINATED',
Expand Down Expand Up @@ -268,6 +270,7 @@ protected function getKeywords()
'VARCHAR',
'VARCHARACTER',
'VARYING',
'VIRTUAL',
'WHEN',
'WHERE',
'WHILE',
Expand Down
29 changes: 28 additions & 1 deletion lib/Doctrine/DBAL/Platforms/MySQL57Platform.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,31 @@
use Doctrine\DBAL\Schema\TableDiff;

/**
* Provides the behavior, features and SQL dialect of the MySQL 5.7 database platform.
* Provides the behavior, features and SQL dialect of the MySQL 5.7 (5.7.9 GA) database platform.
*
* @author İsmail BASKIN <[email protected]>
* @author Steve Müller <[email protected]>
* @link www.doctrine-project.org
* @since 2.5
*/
class MySQL57Platform extends MySqlPlatform
{
/**
* {@inheritdoc}
*/
public function hasNativeJsonType()
{
return true;
}

/**
* {@inheritdoc}
*/
public function getJsonTypeDeclarationSQL(array $field)
{
return 'JSON';
}

/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -64,4 +81,14 @@ protected function getReservedKeywordsClass()
{
return 'Doctrine\DBAL\Platforms\Keywords\MySQL57Keywords';
}

/**
* {@inheritdoc}
*/
protected function initializeDoctrineTypeMappings()
{
parent::initializeDoctrineTypeMappings();

$this->doctrineTypeMapping['json'] = 'json_array';
}
}
6 changes: 4 additions & 2 deletions tests/Doctrine/Tests/DBAL/Driver/AbstractMySQLDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@ protected function getDatabasePlatformsForVersions()
return array(
array('5.6.9', 'Doctrine\DBAL\Platforms\MySqlPlatform'),
array('5.7', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('5.7.0', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('5.7.1', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('5.7.0', 'Doctrine\DBAL\Platforms\MySqlPlatform'),
array('5.7.8', 'Doctrine\DBAL\Platforms\MySqlPlatform'),
array('5.7.9', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('5.7.10', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('6', 'Doctrine\DBAL\Platforms\MySQL57Platform'),
array('10.0.15-MariaDB-1~wheezy', 'Doctrine\DBAL\Platforms\MySqlPlatform'),
array('10.1.2a-MariaDB-a1~lenny-log', 'Doctrine\DBAL\Platforms\MySqlPlatform'),
Expand Down
16 changes: 16 additions & 0 deletions tests/Doctrine/Tests/DBAL/Platforms/MySQL57PlatformTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ public function createPlatform()
return new MySQL57Platform();
}

public function testHasNativeJsonType()
{
$this->assertTrue($this->_platform->hasNativeJsonType());
}

public function testReturnsJsonTypeDeclarationSQL()
{
$this->assertSame('JSON', $this->_platform->getJsonTypeDeclarationSQL(array()));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Support for PHP < 7 has been dropped at master. Could we use [] instead?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@phansys is that really important here? We would need to fix all of that stuff in one PR anyways.

}

public function testInitializesJsonTypeMapping()
{
$this->assertTrue($this->_platform->hasDoctrineTypeMappingFor('json'));
$this->assertSame('json_array', $this->_platform->getDoctrineTypeMapping('json'));
}

/**
* @group DBAL-234
*/
Expand Down