First Commit
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Database\DBAL;
|
||||
|
||||
use Doctrine\DBAL\Exception as DBALException;
|
||||
use Doctrine\DBAL\Platforms\AbstractPlatform;
|
||||
use Doctrine\DBAL\Platforms\MariaDb1010Platform;
|
||||
use Doctrine\DBAL\Platforms\MariaDb1027Platform;
|
||||
use Doctrine\DBAL\Platforms\MariaDb1052Platform;
|
||||
use Doctrine\DBAL\Platforms\MariaDb1060Platform;
|
||||
use Doctrine\DBAL\Platforms\MariaDBPlatform;
|
||||
use Doctrine\DBAL\Platforms\MySQL57Platform;
|
||||
use Doctrine\DBAL\Platforms\MySQL80Platform;
|
||||
use Doctrine\DBAL\Platforms\MySQL84Platform;
|
||||
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSQL100Platform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSQL120Platform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSQL94Platform;
|
||||
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
||||
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
|
||||
use Doctrine\DBAL\Platforms\SQLServerPlatform;
|
||||
use Doctrine\DBAL\Types\PhpDateTimeMappingType;
|
||||
use Doctrine\DBAL\Types\Type;
|
||||
|
||||
class TimestampType extends Type implements PhpDateTimeMappingType
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @throws DBALException
|
||||
*/
|
||||
public function getSQLDeclaration(array $column, AbstractPlatform $platform): string
|
||||
{
|
||||
return match (get_class($platform)) {
|
||||
MySQLPlatform::class,
|
||||
MySQL57Platform::class,
|
||||
MySQL80Platform::class,
|
||||
MySQL84Platform::class,
|
||||
MariaDBPlatform::class,
|
||||
MariaDb1027Platform::class,
|
||||
MariaDb1052Platform::class,
|
||||
MariaDb1060Platform::class,
|
||||
MariaDb1010Platform::class => $this->getMySqlPlatformSQLDeclaration($column),
|
||||
PostgreSQLPlatform::class,
|
||||
PostgreSQL94Platform::class,
|
||||
PostgreSQL100Platform::class,
|
||||
PostgreSQL120Platform::class => $this->getPostgresPlatformSQLDeclaration($column),
|
||||
SQLServerPlatform::class,
|
||||
SQLServer2012Platform::class => $this->getSqlServerPlatformSQLDeclaration($column),
|
||||
SqlitePlatform::class => 'DATETIME',
|
||||
default => throw new DBALException('Invalid platform: '.substr(strrchr(get_class($platform), '\\'), 1)),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL declaration for MySQL.
|
||||
*
|
||||
* @param array $column
|
||||
* @return string
|
||||
*/
|
||||
protected function getMySqlPlatformSQLDeclaration(array $column): string
|
||||
{
|
||||
$columnType = 'TIMESTAMP';
|
||||
|
||||
if ($column['precision']) {
|
||||
$columnType = 'TIMESTAMP('.min((int) $column['precision'], 6).')';
|
||||
}
|
||||
|
||||
$notNull = $column['notnull'] ?? false;
|
||||
|
||||
if (! $notNull) {
|
||||
return $columnType.' NULL';
|
||||
}
|
||||
|
||||
return $columnType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL declaration for PostgreSQL.
|
||||
*
|
||||
* @param array $column
|
||||
* @return string
|
||||
*/
|
||||
protected function getPostgresPlatformSQLDeclaration(array $column): string
|
||||
{
|
||||
return 'TIMESTAMP('.min((int) $column['precision'], 6).')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SQL declaration for SQL Server.
|
||||
*
|
||||
* @param array $column
|
||||
* @return string
|
||||
*/
|
||||
protected function getSqlServerPlatformSQLDeclaration(array $column): string
|
||||
{
|
||||
return $column['precision'] ?? false
|
||||
? 'DATETIME2('.min((int) $column['precision'], 7).')'
|
||||
: 'DATETIME';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'timestamp';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user