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-09-03 18:32

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • 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 в