Skip text/blob default-only modifies for compatible wider client types
This commit is contained in:
parent
04ac40a73d
commit
2419d0df7b
|
|
@ -1147,9 +1147,10 @@ class Setup extends BaseController
|
||||||
{
|
{
|
||||||
$masterType = $this->normalizeColumnTypeForCompare((string) ($masterCol['Type'] ?? ''));
|
$masterType = $this->normalizeColumnTypeForCompare((string) ($masterCol['Type'] ?? ''));
|
||||||
$clientType = $this->normalizeColumnTypeForCompare((string) ($clientCol['Type'] ?? ''));
|
$clientType = $this->normalizeColumnTypeForCompare((string) ($clientCol['Type'] ?? ''));
|
||||||
|
$isCompatibleWider = $this->isCompatibleWiderType($clientType, $masterType);
|
||||||
|
|
||||||
$typeMatches = $masterType === $clientType
|
$typeMatches = $masterType === $clientType
|
||||||
|| $this->isCompatibleWiderType($clientType, $masterType);
|
|| $isCompatibleWider;
|
||||||
|
|
||||||
if (!$typeMatches) {
|
if (!$typeMatches) {
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -1159,6 +1160,12 @@ class Setup extends BaseController
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For text/blob families, default metadata differs across MySQL/MariaDB and can cause noisy unsafe narrowing alters.
|
||||||
|
// If client type is already equivalent/wider, skip default-based modifications.
|
||||||
|
if ($isCompatibleWider && ($this->isTextFamilyType($masterType) || $this->isBlobFamilyType($masterType))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->normalizeColumnDefaultFromMetadata($masterCol) !== $this->normalizeColumnDefaultFromMetadata($clientCol)) {
|
if ($this->normalizeColumnDefaultFromMetadata($masterCol) !== $this->normalizeColumnDefaultFromMetadata($clientCol)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -1274,6 +1281,10 @@ class Setup extends BaseController
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcasecmp($defaultStr, 'NULL') === 0) {
|
||||||
|
return '__NULL__';
|
||||||
|
}
|
||||||
|
|
||||||
$upper = strtoupper($defaultStr);
|
$upper = strtoupper($defaultStr);
|
||||||
|
|
||||||
// Treat CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), and CURRENT_TIMESTAMP(0) as equivalent.
|
// Treat CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), and CURRENT_TIMESTAMP(0) as equivalent.
|
||||||
|
|
@ -1284,6 +1295,18 @@ class Setup extends BaseController
|
||||||
return $defaultStr;
|
return $defaultStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function isTextFamilyType(string $type): bool
|
||||||
|
{
|
||||||
|
$base = strtolower(trim((string) preg_replace('/\s*\(.*/', '', $type)));
|
||||||
|
return in_array($base, ['tinytext', 'text', 'mediumtext', 'longtext'], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function isBlobFamilyType(string $type): bool
|
||||||
|
{
|
||||||
|
$base = strtolower(trim((string) preg_replace('/\s*\(.*/', '', $type)));
|
||||||
|
return in_array($base, ['tinyblob', 'blob', 'mediumblob', 'longblob'], true);
|
||||||
|
}
|
||||||
|
|
||||||
private function ensureCreateTableIfNotExists(string $sql): string
|
private function ensureCreateTableIfNotExists(string $sql): string
|
||||||
{
|
{
|
||||||
$sql = trim($sql);
|
$sql = trim($sql);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user