SQL patch_0.9.26.inc Cotonti
Патч для обновления БД системы до версии 0.9.26 в рамках движка Cotonti.
Патч для обновления БД системы до версии 0.9.26 в рамках движка Cotonti.
Этот файл является патчем для обновления системы до версии 0.9.26 в рамках движка Cotonti. Давайте разберем его код построчно:
Общие замечания
Определение безопасности:
В начале файла проверяется, что он был вызван в рамках корректного контекста, и если не выполнены условия, выполнение скрипта останавливается:
defined('COT_CODE') && defined('COT_UPDATE') or die('Wrong URL');
Эта конструкция проверяет, что константы COT_CODE и COT_UPDATE определены, что означает, что файл был вызван через систему обновления Cotonti, а не напрямую через браузер.
Подключение глобальных переменных:
Объявляются глобальные переменные для таблиц базы данных, которые будут использоваться в процессе выполнения патча:
global $db_server_events, $db_server_events_observers, $db_plugins, $db_core;
Проверка на существование таблиц:
Далее идет проверка, что переменные, содержащие таблицы базы данных, не пусты. Если они пусты, то регистрируются таблицы в системе:
if (empty($db_server_events) || empty($db_server_events_observers) || empty($db_plugins) || empty($db_core)) {
Cot::$db->registerTable('server_events');
Cot::$db->registerTable('server_events_observers');
Cot::$db->registerTable('plugins');
Cot::$db->registerTable('core');
}
Это нужно для того, чтобы движок знал, что будут использоваться эти таблицы в процессе обновления.
Создание таблиц, если они не существуют:
Данный блок создает две таблицы: server_events и server_events_observers. Это делается через метод query объекта базы данных:
if (!Cot::$db->tableExists(Cot::$db->server_events)) {
Cot::$db->query(
'CREATE TABLE ' . Cot::$db->quoteTableName(Cot::$db->server_events) . ' ( '
. Cot::$db->quoteColumnName('id') . ' BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, '
. Cot::$db->quoteColumnName('user_id') . ' INT UNSIGNED NOT NULL, '
. Cot::$db->quoteColumnName('event') . ' VARCHAR(100) NOT NULL, '
. Cot::$db->quoteColumnName('data') . ' TEXT NOT NULL, '
. Cot::$db->quoteColumnName('created_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. 'PRIMARY KEY (' . Cot::$db->quoteColumnName('id') . '),'
. 'INDEX server_events_user_id_idx (' . Cot::$db->quoteColumnName('user_id') . ')'
. ');'
.
'CREATE TABLE ' . Cot::$db->quoteTableName(Cot::$db->server_events_observers) . ' ( '
. Cot::$db->quoteColumnName('id') . ' INT UNSIGNED NOT NULL AUTO_INCREMENT, '
. Cot::$db->quoteColumnName('user_id') . ' INT UNSIGNED NOT NULL, '
. Cot::$db->quoteColumnName('token') . ' VARCHAR(255) NOT NULL, '
. Cot::$db->quoteColumnName('created_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. Cot::$db->quoteColumnName('updated_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. Cot::$db->quoteColumnName('last_event_id') . ' BIGINT UNSIGNED NOT NULL DEFAULT 0, '
. 'PRIMARY KEY (' . Cot::$db->quoteColumnName('id') . '), '
. 'INDEX server_events_observers_user_id_idx (' . Cot::$db->quoteColumnName('user_id') . '), '
. 'INDEX `server_events_observers_created_at_idx` (' . Cot::$db->quoteColumnName('updated_at') . ') '
. ');'
);
}
Это создаст две таблицы:
server_events: Хранит информацию о событиях пользователей, включая ID пользователя, описание события, данные и временную метку.
server_events_observers: Содержит информацию о наблюдателях (пользователях), которые отслеживают события, включая их ID, токены и ссылки на события.
Все создаваемые таблицы используют механизм индексов для быстрого поиска, что повышает производительность работы с этими данными.
Добавление индекса в таблицу плагинов:
Следующий шаг — добавление индекса plugins_code_idx в таблицу cot_plugins, если такого индекса еще нет:
if (!Cot::$db->indexExists(Cot::$db->plugins, 'plugins_code_idx')) {
Cot::$db->addIndex(Cot::$db->plugins, 'plugins_code_idx', ['pl_code']);
}
Это улучшает производительность запросов, которые фильтруют данные по полю pl_code в таблице плагинов.
Удаление записей из таблицы core:
В конце патча удаляются записи из таблицы core, связанные с кодами 'admin' и 'message':
Cot::$db->delete(Cot::$db->core, "ct_code IN ('admin', 'message')");
Это может быть связано с удалением устаревших или ненужных данных, которые больше не используются в обновленной версии.
Заключение
Этот файл является патчем для обновления версии Cotonti до 0.9.26 и включает в себя:
Создание новых таблиц для хранения данных о событиях и наблюдателях.
Регистрацию таблиц в базе данных.
Добавление индекса в таблицу плагинов для улучшения производительности.
Удаление устаревших данных из таблицы core.
Все эти изменения направлены на улучшение функциональности системы, поддержание целостности базы данных и улучшение производительности работы с данными.
<?php
/**
* Update to v. 0.9.26
*/
defined('COT_CODE') && defined('COT_UPDATE') or die('Wrong URL');
global $db_server_events, $db_server_events_observers, $db_plugins, $db_core;
if (empty($db_server_events) || empty($db_server_events_observers) || empty($db_plugins) || empty($db_core)) {
// Registering tables
Cot::$db->registerTable('server_events');
Cot::$db->registerTable('server_events_observers');
Cot::$db->registerTable('plugins');
Cot::$db->registerTable('core');
}
if (!Cot::$db->tableExists(Cot::$db->server_events)) {
Cot::$db->query(
'CREATE TABLE ' . Cot::$db->quoteTableName(Cot::$db->server_events) . ' ( '
. Cot::$db->quoteColumnName('id') . ' BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, '
. Cot::$db->quoteColumnName('user_id') . ' INT UNSIGNED NOT NULL, '
. Cot::$db->quoteColumnName('event') . ' VARCHAR(100) NOT NULL, '
. Cot::$db->quoteColumnName('data') . ' TEXT NOT NULL, '
. Cot::$db->quoteColumnName('created_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. 'PRIMARY KEY (' . Cot::$db->quoteColumnName('id') . '),'
. 'INDEX server_events_user_id_idx (' . Cot::$db->quoteColumnName('user_id') . ')'
. ');'
. 'CREATE TABLE ' . Cot::$db->quoteTableName(Cot::$db->server_events_observers) . ' ( '
. Cot::$db->quoteColumnName('id') . ' INT UNSIGNED NOT NULL AUTO_INCREMENT, '
. Cot::$db->quoteColumnName('user_id') . ' INT UNSIGNED NOT NULL, '
. Cot::$db->quoteColumnName('token') . ' VARCHAR(255) NOT NULL, '
. Cot::$db->quoteColumnName('created_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. Cot::$db->quoteColumnName('updated_at') . ' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, '
. Cot::$db->quoteColumnName('last_event_id') . ' BIGINT UNSIGNED NOT NULL DEFAULT 0, '
. 'PRIMARY KEY (' . Cot::$db->quoteColumnName('id') . '), '
. 'INDEX server_events_observers_user_id_idx (' . Cot::$db->quoteColumnName('user_id') . '), '
. 'INDEX `server_events_observers_created_at_idx` (' . Cot::$db->quoteColumnName('updated_at') . ') '
. ');'
);
}
if (!Cot::$db->indexExists(Cot::$db->plugins, 'plugins_code_idx')) {
Cot::$db->addIndex(Cot::$db->plugins, 'plugins_code_idx', ['pl_code']);
}
Cot::$db->delete(Cot::$db->core, "ct_code IN ('admin', 'message')");
Комментарии (0)
Автор контента
Оффлайн
Sodium Carbonate
Последняя авторизация: 20.07.2026 00:04
- Страница размещена: 30.01.2025 07:07
- Последнее обновление: 30.01.2025 07:08