добавлена поддержка эмуляции "ADD IF NOT EXISTS" для колонок (MySQL 8) при обновлении модуля
This commit is contained in:
@@ -408,9 +408,9 @@
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Метод, предназначенный для обновления модуля при увеличении номера версии модуля
|
||||
*
|
||||
* Модернизирован: добавлена поддержка эмуляции "ADD IF NOT EXISTS" для колонок (MySQL 8)
|
||||
*/
|
||||
public function moduleUpdate ()
|
||||
{
|
||||
@@ -431,10 +431,36 @@
|
||||
include ($sql_file);
|
||||
|
||||
// Выполняем запросы обновления модуля
|
||||
// из массива $module_sql_update файла sql.php
|
||||
foreach ($module_sql_update AS $sql)
|
||||
{
|
||||
$AVE_DB->Query(str_replace('%%PRFX%%', PREFIX, $sql));
|
||||
// Заменяем префикс в запросе
|
||||
$sql = str_replace('%%PRFX%%', PREFIX, $sql);
|
||||
|
||||
// Эмуляция ADD IF NOT EXISTS для колонок
|
||||
if (stripos($sql, 'ADD IF NOT EXISTS') !== false)
|
||||
{
|
||||
// Ищем имя таблицы и колонки, игнорируя кавычки
|
||||
if (preg_match('/ALTER\s+TABLE\s+[`"\'\s]?([\w%]+)[`"\'\s]?\s+ADD\s+IF\s+NOT\s+EXISTS\s+[`"\'\s]?([\w]+)[`"\'\s]?/i', $sql, $matches))
|
||||
{
|
||||
$tableName = $matches[1];
|
||||
$columnName = $matches[2];
|
||||
|
||||
// Проверяем, существует ли уже колонка в базе
|
||||
$check = $AVE_DB->Query("SHOW COLUMNS FROM `{$tableName}` LIKE '{$columnName}'");
|
||||
|
||||
// Если поле уже найдено — переходим к следующему запросу в массиве
|
||||
if ($check && $check->FetchRow()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Если поля нет — убираем "IF NOT EXISTS", превращая в легальный ADD
|
||||
// При этом хвост запроса (тип поля, AFTER и т.д.) сохраняется
|
||||
$sql = str_replace('IF NOT EXISTS', '', $sql);
|
||||
}
|
||||
}
|
||||
|
||||
// Выполняем итоговый запрос
|
||||
$AVE_DB->Query($sql);
|
||||
}
|
||||
}
|
||||
// Обновляем модуль, если в нем не применяется (отсутствует) файл sql.php
|
||||
|
||||
Reference in New Issue
Block a user