20250804
This commit is contained in:
@@ -31,9 +31,9 @@
|
||||
public string $FieldName;
|
||||
|
||||
/**
|
||||
* @var bool $IsPrimaryKey Признак того, что свойство является первичным ключом.
|
||||
* @var DataBaseHeadItem $Column Информация об ячейке.
|
||||
*/
|
||||
public bool $IsPrimaryKey;
|
||||
public DataBaseHeadItem $Column;
|
||||
|
||||
/**
|
||||
* @var bool $IsIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
||||
@@ -61,14 +61,14 @@
|
||||
* @param string $name Имя свойства.
|
||||
* @param mixed|null $value Значение свойства (ещё не конвертированное!).
|
||||
* @param string $fieldName Имя поля в таблице БД.
|
||||
* @param bool $isPrimaryKey Признак того, что свойство является первичным ключом.
|
||||
* @param DataBaseHeadItem $column Информация об ячейке.
|
||||
* @param bool $isIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
||||
* @param callable|null $ConvertToDB Конвертер значения свойства в значение поля БД.
|
||||
* @param Closure|null $ConvertFromDB Конвертер значения поля БД в значение свойства.
|
||||
* @param Closure|null $Compare Функция сравнения значений свойства.
|
||||
*/
|
||||
public function __construct (string $name = '', mixed $value = null, string $fieldName = '',
|
||||
bool $isPrimaryKey = false, bool $isIgnored = false, ?callable $ConvertToDB = null,
|
||||
DataBaseHeadItem $column = new DataBaseHeadItem(), bool $isIgnored = false, ?callable $ConvertToDB = null,
|
||||
?Closure $ConvertFromDB = null, ?Closure $Compare = null)
|
||||
{
|
||||
// Установка значений
|
||||
@@ -78,8 +78,8 @@
|
||||
$this->Value = $value;
|
||||
// - установка имени поля в таблице БД
|
||||
$this->FieldName = StringExtension::IsNullOrWhitespace($fieldName) ? $name : $fieldName;
|
||||
// - установка признака того, что свойство является первичным ключом
|
||||
$this->IsPrimaryKey = $isPrimaryKey;
|
||||
// - установка свойств столбца
|
||||
$this->Column = $column;
|
||||
// - установка признака того, что свойство игнорируется при сохранении в / загрузке из БД
|
||||
$this->IsIgnored = $isIgnored;
|
||||
// - установка конвертеров значения свойства в значение поля БД
|
||||
|
94
sources/classes/DataBaseHeadItem.php
Normal file
94
sources/classes/DataBaseHeadItem.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes;
|
||||
|
||||
use goodboyalex\php_components_pack\classes\Tuple;
|
||||
use goodboyalex\php_db_components_pack\enums\DBType;
|
||||
|
||||
/**
|
||||
* Класс, описывающий структуру колонки.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class DataBaseHeadItem
|
||||
{
|
||||
/**
|
||||
* @var string $Name Имя колонки.
|
||||
*/
|
||||
public string $Name;
|
||||
|
||||
/**
|
||||
* @var Tuple $Type Тип данных (DBType тип, int максимальная длина).
|
||||
*/
|
||||
public Tuple $Type;
|
||||
|
||||
/**
|
||||
* @var bool $IsNotNull Запрещено ли вставлять пустые (NULL) значения в указанное поле.
|
||||
*/
|
||||
public bool $IsNotNull;
|
||||
|
||||
/**
|
||||
* @var bool $IsUnique Обеспечивает уникальность каждого значения в данном поле.
|
||||
*/
|
||||
public bool $IsUnique;
|
||||
|
||||
/**
|
||||
* @var bool $IsPrimaryKey Устанавливается на одно или несколько полей, гарантирующих уникальную идентификацию
|
||||
* каждой записи в таблице.
|
||||
*/
|
||||
public bool $IsPrimaryKey;
|
||||
|
||||
/**
|
||||
* @var Tuple $ForeignWith Связь с другой таблицей (string имя_таблицы, string имя_поля).
|
||||
*/
|
||||
public Tuple $ForeignWith;
|
||||
|
||||
/**
|
||||
* @var ConditionBuilder $Check Параметры проверки введённого значения на соблюдение некоторого условия.
|
||||
*/
|
||||
public ConditionBuilder $Check;
|
||||
|
||||
/**
|
||||
* @var mixed $Default Задаёт значение по умолчанию.
|
||||
*/
|
||||
public mixed $Default;
|
||||
|
||||
/**
|
||||
* @var bool $IsAutoIncrement Автоматически генерирует уникальное значение каждый раз при создании новой записи.
|
||||
*/
|
||||
public bool $IsAutoIncrement;
|
||||
|
||||
/**
|
||||
* Конструктор.
|
||||
*
|
||||
* @param string $name Имя колонки.
|
||||
* @param Tuple $type Тип данных (DBType тип, int максимальная длина).
|
||||
* @param bool $isNotNull Запрещено ли вставлять пустые (NULL) значения в указанное поле.
|
||||
* @param bool $isUnique Обеспечивает уникальность каждого значения в данном поле.
|
||||
* @param bool $isPrimaryKey Устанавливается на одно или несколько полей, гарантирующих уникальную
|
||||
* идентификацию каждой записи в таблице.
|
||||
* @param Tuple $foreignWith Связь с другой таблицей (string имя_таблицы, string имя_поля).
|
||||
* @param ConditionBuilder $check Параметры проверки введённого значения на соблюдение некоторого условия.
|
||||
* @param mixed|null $default Задаёт значение по умолчанию.
|
||||
* @param bool $isAutoIncrement Автоматически генерирует уникальное значение каждый раз при создании новой
|
||||
* записи.
|
||||
*/
|
||||
public function __construct (string $name = "", Tuple $type = new Tuple(DBType::STRING, 255),
|
||||
bool $isNotNull = false, bool $isUnique = false, bool $isPrimaryKey = false,
|
||||
Tuple $foreignWith = new Tuple(null, null), ConditionBuilder $check = new ConditionBuilder(),
|
||||
mixed $default = null, bool $isAutoIncrement = false)
|
||||
{
|
||||
$this->Name = $name;
|
||||
$this->Type = $type;
|
||||
$this->IsNotNull = $isNotNull;
|
||||
$this->IsUnique = $isUnique;
|
||||
$this->IsPrimaryKey = $isPrimaryKey;
|
||||
$this->ForeignWith = $foreignWith;
|
||||
$this->Check = $check;
|
||||
$this->Default = $default;
|
||||
$this->IsAutoIncrement = $isAutoIncrement;
|
||||
}
|
||||
}
|
29
sources/classes/DataBaseHeader.php
Normal file
29
sources/classes/DataBaseHeader.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes;
|
||||
|
||||
use goodboyalex\php_components_pack\classes\ObjectArray;
|
||||
|
||||
/**
|
||||
* Класс, описывающий структуру столбцов базы данных.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class DataBaseHeader
|
||||
{
|
||||
/**
|
||||
* @var ObjectArray $Container Столбцы таблицы.
|
||||
*/
|
||||
private ObjectArray $Container;
|
||||
|
||||
/**
|
||||
* Конструктор.
|
||||
*/
|
||||
public function __construct ()
|
||||
{
|
||||
$this->Container = new ObjectArray();
|
||||
}
|
||||
}
|
@@ -1,9 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes;
|
||||
|
||||
use Closure;
|
||||
@@ -15,6 +11,7 @@
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseInsert;
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseQueryExecute;
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseSpecial;
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseTableManagement;
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseTransactions;
|
||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseUpdate;
|
||||
use PDO;
|
||||
@@ -154,6 +151,9 @@
|
||||
// Удаление записей
|
||||
use DatabaseDelete;
|
||||
|
||||
// Управление таблицами баз данных
|
||||
use DatabaseTableManagement;
|
||||
|
||||
// Приватные методы
|
||||
use DatabaseSpecial;
|
||||
}
|
52
sources/classes/tm_drivers/MSSQLTableManager.php
Normal file
52
sources/classes/tm_drivers/MSSQLTableManager.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes\tm_drivers;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||
use goodboyalex\php_db_components_pack\interfaces\ITableManager;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Система менеджмента таблицами базы данных MS SQL.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class MSSQLTableManager implements ITableManager
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function IsTableExist (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// Создаю SQL-запрос
|
||||
$sql = "SELECT CASE WHEN OBJECT_ID(:tableName, 'U') IS NOT NULL THEN 1 ELSE 0 END";
|
||||
|
||||
// Подготавливаю данные
|
||||
$stmt = $handle->prepare($sql);
|
||||
|
||||
// Выполняю запрос
|
||||
$stmt->execute(['tableName' => $tableName]);
|
||||
|
||||
// Получаю количество таблиц и вывожу true или false
|
||||
return $stmt->fetchColumn() === '1';
|
||||
}
|
||||
|
||||
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool
|
||||
{
|
||||
// TODO: Implement CreateTable() method.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function DropTable (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// TODO: Implement DropTable() method.
|
||||
return false;
|
||||
}
|
||||
}
|
53
sources/classes/tm_drivers/MySQLTableManager.php
Normal file
53
sources/classes/tm_drivers/MySQLTableManager.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes\tm_drivers;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||
use goodboyalex\php_db_components_pack\interfaces\ITableManager;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Система менеджмента таблицами базы данных MySQL.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class MySQLTableManager implements ITableManager
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function IsTableExist (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// Создаю SQL-запрос
|
||||
$sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = :tableName";
|
||||
|
||||
// Подготавливаю данные
|
||||
$stmt = $handle->prepare($sql);
|
||||
|
||||
// Выполняю запрос
|
||||
$stmt->execute(['tableName' => $tableName]);
|
||||
|
||||
// Получаю количество таблиц, если > 0, то вывожу true, иначе - false
|
||||
return $stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool
|
||||
{
|
||||
// TODO: Implement CreateTable() method.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function DropTable (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// TODO: Implement DropTable() method.
|
||||
return false;
|
||||
}
|
||||
}
|
52
sources/classes/tm_drivers/OracleDBTableManager.php
Normal file
52
sources/classes/tm_drivers/OracleDBTableManager.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes\tm_drivers;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||
use goodboyalex\php_db_components_pack\interfaces\ITableManager;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Система менеджмента таблицами базы данных Oracle DB.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class OracleDBTableManager implements ITableManager
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function IsTableExist (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// Создаю SQL-запрос
|
||||
$sql = "SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME = UPPER(:tableName)";
|
||||
|
||||
// Подготавливаю данные
|
||||
$stmt = $handle->prepare($sql);
|
||||
|
||||
// Выполняю запрос
|
||||
$stmt->execute(['tableName' => $tableName]);
|
||||
|
||||
// Получаю количество таблиц, если >0, то вывожу true, иначе - false
|
||||
return $stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool
|
||||
{
|
||||
// TODO: Implement CreateTable() method.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function DropTable (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// TODO: Implement DropTable() method.
|
||||
return false;
|
||||
}
|
||||
}
|
56
sources/classes/tm_drivers/PostgreSQLTableManager.php
Normal file
56
sources/classes/tm_drivers/PostgreSQLTableManager.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes\tm_drivers;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||
use goodboyalex\php_db_components_pack\interfaces\ITableManager;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Система менеджмента таблицами базы данных PostgreSQL.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class PostgreSQLTableManager implements ITableManager
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function IsTableExist (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// Создаю SQL-запрос
|
||||
$sql = "SELECT EXISTS(
|
||||
SELECT 1
|
||||
FROM pg_tables
|
||||
WHERE schemaname = current_schema()
|
||||
AND tablename = :tableName)";
|
||||
|
||||
// Подготавливаю данные
|
||||
$stmt = $handle->prepare($sql);
|
||||
|
||||
// Выполняю запрос
|
||||
$stmt->execute(['tableName' => $tableName]);
|
||||
|
||||
// Получаю количество таблиц, если = "true", то вывожу true, иначе - false
|
||||
return $stmt->fetchColumn() === 'true';
|
||||
}
|
||||
|
||||
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool
|
||||
{
|
||||
// TODO: Implement CreateTable() method.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function DropTable (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// TODO: Implement DropTable() method.
|
||||
return false;
|
||||
}
|
||||
}
|
52
sources/classes/tm_drivers/SQLiteTableManager.php
Normal file
52
sources/classes/tm_drivers/SQLiteTableManager.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\classes\tm_drivers;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||
use goodboyalex\php_db_components_pack\interfaces\ITableManager;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Система менеджмента таблицами базы данных SQLite.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
final class SQLiteTableManager implements ITableManager
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function IsTableExist (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// Создаю SQL-запрос
|
||||
$sql = "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=:tableName";
|
||||
|
||||
// Подготавливаю данные
|
||||
$stmt = $handle->prepare($sql);
|
||||
|
||||
// Выполняю запрос
|
||||
$stmt->execute(['tableName' => $tableName]);
|
||||
|
||||
// Получаю количество таблиц, если >0, то вывожу true, иначе - false
|
||||
return $stmt->fetchColumn() > 0;
|
||||
}
|
||||
|
||||
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool
|
||||
{
|
||||
// TODO: Implement CreateTable() method.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function DropTable (PDO $handle, string $tableName): bool
|
||||
{
|
||||
// TODO: Implement DropTable() method.
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user