This commit is contained in:
Alexandre Alapetite 2024-05-12 22:51:55 +02:00
parent 65a0b5918c
commit 342fae6072
No known key found for this signature in database
GPG Key ID: A24378C38E812B23
3 changed files with 19 additions and 17 deletions

View File

@ -234,21 +234,23 @@ SQL;
include_once(APP_PATH . '/SQL/install.sql.' . $this->pdo->dbType() . '.php');
if (!empty($GLOBALS['SQL_UPDATE_MINOR'])) {
$sql = $GLOBALS['SQL_UPDATE_MINOR'];
$isMariaDB = false;
$dbVersion = $this->fetchValue('SELECT version()') ?? '';
Minz_Log::warning($dbVersion);
$isMariaDB = stripos($dbVersion, 'MariaDB') !== false; // MariaDB includes its name in version, but not MySQL
if (!$isMariaDB) {
// MySQL does not support `DROP INDEX IF EXISTS` yet https://dev.mysql.com/doc/refman/8.3/en/drop-index.html
// but MariaDB does https://mariadb.com/kb/en/drop-index/
$sql = str_replace('DROP INDEX IF EXISTS', 'DROP INDEX', $sql);
if ($this->pdo->dbType() === 'mysql') {
$dbVersion = $this->fetchValue('SELECT version()') ?? '';
$isMariaDB = stripos($dbVersion, 'MariaDB') !== false; // MariaDB includes its name in version, but not MySQL
if (!$isMariaDB) {
// MySQL does not support `DROP INDEX IF EXISTS` yet https://dev.mysql.com/doc/refman/8.3/en/drop-index.html
// but MariaDB does https://mariadb.com/kb/en/drop-index/
$sql = str_replace('DROP INDEX IF EXISTS', 'DROP INDEX', $sql);
}
}
if ($this->pdo->exec($sql) === false) {
$info = $this->pdo->errorInfo();
if (!$isMariaDB && !empty($info[2]) && ($info[2] === 'Can\'t DROP INDEX `url`; check that it exists')) {
if ($this->pdo->dbType() === 'mysql' &&
!$isMariaDB && !empty($info[2]) && (stripos($info[2], 'Can\'t DROP ') !== false)) {
// Too bad for MySQL, but ignore error
Minz_Log::warning('SQL error ' . __METHOD__ . json_encode('IGNORED'));
return;
}
Minz_Log::error('SQL error ' . __METHOD__ . json_encode($this->pdo->errorInfo()));

View File

@ -114,6 +114,13 @@ DROP TABLE IF EXISTS `_entrytag`, `_tag`, `_entrytmp`, `_entry`, `_feed`, `_cate
SQL;
$GLOBALS['SQL_UPDATE_MINOR'] = <<<'SQL'
ALTER TABLE `_feed`
DROP INDEX IF EXISTS `url`, -- IF EXISTS works with MariaDB but not with MySQL, so needs PHP workaround
MODIFY COLUMN `url` VARCHAR(32768) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
MODIFY COLUMN `website` TEXT CHARACTER SET latin1 COLLATE latin1_bin,
MODIFY COLUMN `lastUpdate` BIGINT DEFAULT 0,
MODIFY COLUMN `pathEntries` VARCHAR(4096),
MODIFY COLUMN `httpAuth` VARCHAR(1024) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
ALTER TABLE `_entry`
MODIFY COLUMN `date` BIGINT,
MODIFY COLUMN `lastSeen` BIGINT DEFAULT 0,
@ -132,11 +139,4 @@ ALTER TABLE `_entrytmp`
MODIFY COLUMN `tags` VARCHAR(2048);
ALTER TABLE `_tag`
MODIFY COLUMN `name` VARCHAR(191) NOT NULL;
ALTER TABLE `_feed`
DROP INDEX IF EXISTS `url`, -- IF EXISTS works with MariaDB but not with MySQL, so needs PHP workaround
MODIFY COLUMN `url` VARCHAR(32768) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
MODIFY COLUMN `website` TEXT CHARACTER SET latin1 COLLATE latin1_bin,
MODIFY COLUMN `lastUpdate` BIGINT DEFAULT 0,
MODIFY COLUMN `pathEntries` VARCHAR(4096),
MODIFY COLUMN `httpAuth` VARCHAR(1024) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;
SQL;

View File

@ -106,7 +106,7 @@ $GLOBALS['SQL_UPDATE_MINOR'] = <<<'SQL'
ALTER TABLE `_category`
ALTER COLUMN "name" SET DATA TYPE VARCHAR(191);
ALTER TABLE `_feed`
DROP CONSTRAINT IF EXISTS "_feed_url_key",
DROP CONSTRAINT IF EXISTS `_feed_url_key`,
ALTER COLUMN "url" SET DATA TYPE VARCHAR(32768),
ALTER COLUMN "name" SET DATA TYPE VARCHAR(191),
ALTER COLUMN "website" SET DATA TYPE VARCHAR(32768),