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')");

 

4 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-07-20 14:34

  • Page published: 2025-01-30 07:07
  • Last update: 2025-01-30 07:08

Similar pages

installation SQL file в Cotonti
1 Этот файл `install.sql` является SQL-скриптом для создания и заполнения таблиц в базе данных для системы управления
Файл page.install.sql в Cotonti
2 описание файла page.install.sql в Cotonti CMF Файл page.install.sql является частью процесса установки модуля Page в