20250804
This commit is contained in:
parent
a80c4e6f65
commit
06d92863ee
30
sources/attributes/AutoIncrement.php
Normal file
30
sources/attributes/AutoIncrement.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывает, что значение поля автоматически генерируется каждый раз при создании новой записи. Чаще всего
|
||||||
|
* применяется для первичных ключей.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class AutoIncrement
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
38
sources/attributes/Check.php
Normal file
38
sources/attributes/Check.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывающий условие, которое нужно проверять при добавлении строки в БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class Check
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ConditionBuilder $Condition Условие, которое нужно проверять при добавлении строки в БД.
|
||||||
|
*/
|
||||||
|
public ConditionBuilder $Condition;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param ConditionBuilder $condition Условие, которое нужно проверять при добавлении строки в БД.
|
||||||
|
*/
|
||||||
|
public function __construct (ConditionBuilder $condition)
|
||||||
|
{
|
||||||
|
$this->Condition = $condition;
|
||||||
|
}
|
||||||
|
}
|
45
sources/attributes/DataType.php
Normal file
45
sources/attributes/DataType.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывающий тип данных поля в БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class DataType
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var DBType $Type Тип данных поля.
|
||||||
|
*/
|
||||||
|
public DBType $Type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int $Size Размер поля (если это тип STRING)
|
||||||
|
*/
|
||||||
|
public int $Size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param DBType $type Тип данных поля.
|
||||||
|
* @param int $size Размер строкового значения (0 - MAX). Работает только для типа STRING. По умолчанию, 0.
|
||||||
|
*/
|
||||||
|
public function __construct (DBType $type, int $size = 0)
|
||||||
|
{
|
||||||
|
$this->Type = $type;
|
||||||
|
$this->Size = $size;
|
||||||
|
}
|
||||||
|
}
|
37
sources/attributes/DefaultValue.php
Normal file
37
sources/attributes/DefaultValue.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывающий значение по умолчанию для столбца.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class DefaultValue
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var mixed $Value Значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public mixed $Value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param mixed $value Значение по умолчанию.
|
||||||
|
*/
|
||||||
|
public function __construct (mixed $value)
|
||||||
|
{
|
||||||
|
$this->Value = $value;
|
||||||
|
}
|
||||||
|
}
|
44
sources/attributes/ForeignKey.php
Normal file
44
sources/attributes/ForeignKey.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывающий имя поля в БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class ForeignKey
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string $TableName Имя таблицы.
|
||||||
|
*/
|
||||||
|
public string $TableName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string $FieldName Имя связываемого поля.
|
||||||
|
*/
|
||||||
|
public string $FieldName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param string $table Имя таблицы.
|
||||||
|
* @param string $fieldName Имя связываемого поля.
|
||||||
|
*/
|
||||||
|
public function __construct (string $table, string $fieldName)
|
||||||
|
{
|
||||||
|
$this->TableName = $table;
|
||||||
|
$this->FieldName = $fieldName;
|
||||||
|
}
|
||||||
|
}
|
30
sources/attributes/NotNull.php
Normal file
30
sources/attributes/NotNull.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывает, что на данное поле действует ограничение, которое запрещает вставлять пустые (NULL) значения
|
||||||
|
* в указанное поле.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class NotNull
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
30
sources/attributes/Unique.php
Normal file
30
sources/attributes/Unique.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут обеспечивает уникальность каждого значения в данном поле. Обычно применяется для уникальных
|
||||||
|
* идентификационных номеров или адресов электронной почты.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class Unique
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -31,9 +31,9 @@
|
|||||||
public string $FieldName;
|
public string $FieldName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var bool $IsPrimaryKey Признак того, что свойство является первичным ключом.
|
* @var DataBaseHeadItem $Column Информация об ячейке.
|
||||||
*/
|
*/
|
||||||
public bool $IsPrimaryKey;
|
public DataBaseHeadItem $Column;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var bool $IsIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
* @var bool $IsIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
||||||
@ -61,14 +61,14 @@
|
|||||||
* @param string $name Имя свойства.
|
* @param string $name Имя свойства.
|
||||||
* @param mixed|null $value Значение свойства (ещё не конвертированное!).
|
* @param mixed|null $value Значение свойства (ещё не конвертированное!).
|
||||||
* @param string $fieldName Имя поля в таблице БД.
|
* @param string $fieldName Имя поля в таблице БД.
|
||||||
* @param bool $isPrimaryKey Признак того, что свойство является первичным ключом.
|
* @param DataBaseHeadItem $column Информация об ячейке.
|
||||||
* @param bool $isIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
* @param bool $isIgnored Признак того, что свойство игнорируется при сохранении в / загрузке из БД.
|
||||||
* @param callable|null $ConvertToDB Конвертер значения свойства в значение поля БД.
|
* @param callable|null $ConvertToDB Конвертер значения свойства в значение поля БД.
|
||||||
* @param Closure|null $ConvertFromDB Конвертер значения поля БД в значение свойства.
|
* @param Closure|null $ConvertFromDB Конвертер значения поля БД в значение свойства.
|
||||||
* @param Closure|null $Compare Функция сравнения значений свойства.
|
* @param Closure|null $Compare Функция сравнения значений свойства.
|
||||||
*/
|
*/
|
||||||
public function __construct (string $name = '', mixed $value = null, string $fieldName = '',
|
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)
|
?Closure $ConvertFromDB = null, ?Closure $Compare = null)
|
||||||
{
|
{
|
||||||
// Установка значений
|
// Установка значений
|
||||||
@ -78,8 +78,8 @@
|
|||||||
$this->Value = $value;
|
$this->Value = $value;
|
||||||
// - установка имени поля в таблице БД
|
// - установка имени поля в таблице БД
|
||||||
$this->FieldName = StringExtension::IsNullOrWhitespace($fieldName) ? $name : $fieldName;
|
$this->FieldName = StringExtension::IsNullOrWhitespace($fieldName) ? $name : $fieldName;
|
||||||
// - установка признака того, что свойство является первичным ключом
|
// - установка свойств столбца
|
||||||
$this->IsPrimaryKey = $isPrimaryKey;
|
$this->Column = $column;
|
||||||
// - установка признака того, что свойство игнорируется при сохранении в / загрузке из БД
|
// - установка признака того, что свойство игнорируется при сохранении в / загрузке из БД
|
||||||
$this->IsIgnored = $isIgnored;
|
$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
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
* @noinspection SqlNoDataSourceInspection
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace goodboyalex\php_db_components_pack\classes;
|
namespace goodboyalex\php_db_components_pack\classes;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
@ -15,6 +11,7 @@
|
|||||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseInsert;
|
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\DatabaseQueryExecute;
|
||||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseSpecial;
|
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\DatabaseTransactions;
|
||||||
use goodboyalex\php_db_components_pack\traits\Database\DatabaseUpdate;
|
use goodboyalex\php_db_components_pack\traits\Database\DatabaseUpdate;
|
||||||
use PDO;
|
use PDO;
|
||||||
@ -154,6 +151,9 @@
|
|||||||
// Удаление записей
|
// Удаление записей
|
||||||
use DatabaseDelete;
|
use DatabaseDelete;
|
||||||
|
|
||||||
|
// Управление таблицами баз данных
|
||||||
|
use DatabaseTableManagement;
|
||||||
|
|
||||||
// Приватные методы
|
// Приватные методы
|
||||||
use DatabaseSpecial;
|
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;
|
||||||
|
}
|
||||||
|
}
|
49
sources/enums/DBType.php
Normal file
49
sources/enums/DBType.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\enums;
|
||||||
|
|
||||||
|
use goodboyalex\php_components_pack\traits\EnumExtensionsTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Перечисление типов в БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
enum DBType: int
|
||||||
|
{
|
||||||
|
// Подключаем trait для работы с перечислениями
|
||||||
|
use EnumExtensionsTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип целых чисел.
|
||||||
|
*/
|
||||||
|
case INT = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип чисел с плавающей точкой.
|
||||||
|
*/
|
||||||
|
case FLOAT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип строк.
|
||||||
|
*/
|
||||||
|
case STRING = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип булевых значений.
|
||||||
|
*/
|
||||||
|
case BOOL = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип даты.
|
||||||
|
*/
|
||||||
|
case DATE = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Массив/объект.
|
||||||
|
*/
|
||||||
|
case ARRAY = 5;
|
||||||
|
}
|
@ -10,23 +10,4 @@
|
|||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
interface IDBItem
|
interface IDBItem {}
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Вывод параметров добавления/обновления данных в базу данных.
|
|
||||||
*
|
|
||||||
* @param bool $withId Нужно ли добавлять Id в массив
|
|
||||||
*
|
|
||||||
* @return array Массив параметров
|
|
||||||
*/
|
|
||||||
public function ToSQL (bool $withId = true): array;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Преобразование данных из базы данных в модель, класс.
|
|
||||||
*
|
|
||||||
* @param array $sqlData Данные из базы данных
|
|
||||||
*
|
|
||||||
* @return self Класс модели с заполненными данными из базы данных
|
|
||||||
*/
|
|
||||||
public function FromSQL (array $sqlData): self;
|
|
||||||
}
|
|
48
sources/interfaces/ITableManager.php
Normal file
48
sources/interfaces/ITableManager.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\interfaces;
|
||||||
|
|
||||||
|
use goodboyalex\php_db_components_pack\classes\DataBaseHeader;
|
||||||
|
use PDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Интерфейс классов драйверов баз данных для управления таблицами данных.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
interface ITableManager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Проверяет существование таблицы в базе данных.
|
||||||
|
*
|
||||||
|
* @param PDO $handle Представляет соединение между PHP и сервером базы данных.
|
||||||
|
* @param string $tableName Имя таблицы.
|
||||||
|
*
|
||||||
|
* @return bool Возвращает <code>true</code>, если таблица существует, иначе возвращает <code>false</code>.
|
||||||
|
*/
|
||||||
|
public function IsTableExist (PDO $handle, string $tableName): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Создает таблицу в базе данных.
|
||||||
|
*
|
||||||
|
* @param PDO $handle Представляет соединение между PHP и сервером базы данных.
|
||||||
|
* @param string $tableName Имя таблицы.
|
||||||
|
* @param DataBaseHeader $columns Колонки таблицы.
|
||||||
|
*
|
||||||
|
* @return bool Возвращает <code>true</code>, если таблица успешно создана, иначе возвращает <code>false</code>.
|
||||||
|
*/
|
||||||
|
public function CreateTable (PDO $handle, string $tableName, DataBaseHeader $columns): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Удаляет таблицу из базы данных.
|
||||||
|
*
|
||||||
|
* @param PDO $handle Представляет соединение между PHP и сервером базы данных.
|
||||||
|
* @param string $tableName Имя таблицы.
|
||||||
|
*
|
||||||
|
* @return bool Возвращает <code>true</code>, если таблица успешно удалена, иначе возвращает <code>false</code>.
|
||||||
|
*/
|
||||||
|
public function DropTable (PDO $handle, string $tableName): bool;
|
||||||
|
}
|
@ -8,13 +8,23 @@
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use goodboyalex\php_components_pack\classes\ObjectArray;
|
use goodboyalex\php_components_pack\classes\ObjectArray;
|
||||||
|
use goodboyalex\php_components_pack\classes\Tuple;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\AutoIncrement;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\Check;
|
||||||
use goodboyalex\php_db_components_pack\attributes\ConvertToDB;
|
use goodboyalex\php_db_components_pack\attributes\ConvertToDB;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\DataType;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\DefaultValue;
|
||||||
use goodboyalex\php_db_components_pack\attributes\FieldName;
|
use goodboyalex\php_db_components_pack\attributes\FieldName;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\ForeignKey;
|
||||||
use goodboyalex\php_db_components_pack\attributes\IgnoredInDB;
|
use goodboyalex\php_db_components_pack\attributes\IgnoredInDB;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\NotNull;
|
||||||
use goodboyalex\php_db_components_pack\attributes\PrimaryKey;
|
use goodboyalex\php_db_components_pack\attributes\PrimaryKey;
|
||||||
|
use goodboyalex\php_db_components_pack\attributes\Unique;
|
||||||
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\DataBaseHeadItem;
|
||||||
use goodboyalex\php_db_components_pack\classes\DBItemProperty;
|
use goodboyalex\php_db_components_pack\classes\DBItemProperty;
|
||||||
use goodboyalex\php_db_components_pack\enums\DBOperation;
|
use goodboyalex\php_db_components_pack\enums\DBOperation;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBType;
|
||||||
use goodboyalex\php_db_components_pack\interfaces\IDBItem;
|
use goodboyalex\php_db_components_pack\interfaces\IDBItem;
|
||||||
use PDO;
|
use PDO;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
@ -68,11 +78,11 @@
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// - получаю рефлексию класса
|
// - получаю рефлексию класса
|
||||||
$reflectedClass = new ReflectionClass(get_class($source));
|
$class = new ReflectionClass(get_class($source));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// - получаю рефлексию свойства
|
// - получаю рефлексию свойства
|
||||||
$reflectionProperty = $reflectedClass->getProperty($key);
|
$property = $class->getProperty($key);
|
||||||
}
|
}
|
||||||
catch (ReflectionException) {
|
catch (ReflectionException) {
|
||||||
// - если ошибка, то вывожу пустой массив
|
// - если ошибка, то вывожу пустой массив
|
||||||
@ -80,22 +90,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// - пропускаю не публичные свойства
|
// - пропускаю не публичные свойства
|
||||||
if (!$reflectionProperty->isPublic())
|
if (!$property->isPublic())
|
||||||
// -- пропускаю
|
// -- пропускаю
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// - получаю атрибуты
|
// - получаю атрибуты
|
||||||
$attributes = $reflectionProperty->getAttributes();
|
$attributes = $property->getAttributes();
|
||||||
|
|
||||||
/**
|
|
||||||
* Фильтруем поля, игнорируемые для данной операции
|
|
||||||
*
|
|
||||||
* @var PrimaryKey|null $pkAttr Атрибут первичного ключа.
|
|
||||||
*/
|
|
||||||
$pkAttr = self::FindAttribute($attributes, PrimaryKey::class);
|
|
||||||
|
|
||||||
// - это первичный ключ?
|
|
||||||
$isPrimary = $pkAttr !== null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Фильтруем поля, игнорируемые для данной операции
|
* Фильтруем поля, игнорируемые для данной операции
|
||||||
@ -131,8 +131,100 @@
|
|||||||
$converterFromDB = $convertAttr?->ConvertFromDB;
|
$converterFromDB = $convertAttr?->ConvertFromDB;
|
||||||
$compareFunc = $convertAttr?->Compare;
|
$compareFunc = $convertAttr?->Compare;
|
||||||
|
|
||||||
|
// - получаем свойства столбца
|
||||||
|
/**
|
||||||
|
* Атрибут первичного ключа.
|
||||||
|
*
|
||||||
|
* @var PrimaryKey|null $pkAttr Атрибут первичного ключа.
|
||||||
|
*/
|
||||||
|
$pkAttr = self::FindAttribute($attributes, PrimaryKey::class);
|
||||||
|
|
||||||
|
// -- это первичный ключ?
|
||||||
|
$isPrimary = $pkAttr !== null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тип данных поля.
|
||||||
|
*
|
||||||
|
* @var DataType|null $dtAttr Атрибут типа данных
|
||||||
|
*/
|
||||||
|
$dtAttr = self::FindAttribute($attributes, DataType::class);
|
||||||
|
|
||||||
|
// - тип данных
|
||||||
|
$dataType = $dtAttr !== null
|
||||||
|
? new Tuple($dtAttr->Type, $dtAttr->Size)
|
||||||
|
: new Tuple(self::GetDBTypeForType($property->getType()->getName()), 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут "не пустое значение".
|
||||||
|
*
|
||||||
|
* @var NotNull|null $nnAttr Атрибут нет пустому значению.
|
||||||
|
*/
|
||||||
|
$nnAttr = self::FindAttribute($attributes, NotNull::class);
|
||||||
|
|
||||||
|
// -- это первичный ключ?
|
||||||
|
$isNotNull = $nnAttr !== null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут "уникальное значение".
|
||||||
|
*
|
||||||
|
* @var Unique|null $unqAttr Атрибут уникального значения.
|
||||||
|
*/
|
||||||
|
$unqAttr = self::FindAttribute($attributes, Unique::class);
|
||||||
|
|
||||||
|
// -- это уникальный ключ?
|
||||||
|
$isUnique = $unqAttr !== null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ключ для связывания поля.
|
||||||
|
*
|
||||||
|
* @var ForeignKey|null $chkAttr Атрибут связывания.
|
||||||
|
*/
|
||||||
|
$chkAttr = self::FindAttribute($attributes, ForeignKey::class);
|
||||||
|
|
||||||
|
// - связывание с другой таблицей
|
||||||
|
$foreignWith = $chkAttr !== null
|
||||||
|
? new Tuple($chkAttr->TableName, $chkAttr->FieldName)
|
||||||
|
: new Tuple(null, null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут проверки поля.
|
||||||
|
*
|
||||||
|
* @var Check|null $chkAttr Атрибут проверки поля.
|
||||||
|
*/
|
||||||
|
$chkAttr = self::FindAttribute($attributes, Check::class);
|
||||||
|
|
||||||
|
// - проверка данных поля
|
||||||
|
$checkFunc = $chkAttr !== null
|
||||||
|
? $chkAttr->Condition
|
||||||
|
: new ConditionBuilder();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут значения по умолчанию поля.
|
||||||
|
*
|
||||||
|
* @var DefaultValue|null $dvAttr Атрибут значения по умолчанию поля.
|
||||||
|
*/
|
||||||
|
$dvAttr = self::FindAttribute($attributes, DefaultValue::class);
|
||||||
|
|
||||||
|
// - значение по умолчанию
|
||||||
|
$default = $dvAttr?->Value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут "автоматической генерации".
|
||||||
|
*
|
||||||
|
* @var AutoIncrement|null $aiAttr Атрибут "автоматической генерации".
|
||||||
|
*/
|
||||||
|
$aiAttr = self::FindAttribute($attributes, AutoIncrement::class);
|
||||||
|
|
||||||
|
// -- это атрибут "автоматической генерации"?
|
||||||
|
$isAutoIncrement = $aiAttr !== null;
|
||||||
|
|
||||||
|
// - создаю заголовок
|
||||||
|
$columnHeader = new DataBaseHeadItem($fieldName, $dataType, $isNotNull, $isUnique, $isPrimary,
|
||||||
|
$foreignWith, $checkFunc, $default, $isAutoIncrement);
|
||||||
|
|
||||||
|
|
||||||
// - создаю объект свойства
|
// - создаю объект свойства
|
||||||
$item = new DBItemProperty($key, $value, $fieldName, $isPrimary, $isIgnore, $converterToDB,
|
$item = new DBItemProperty($key, $value, $fieldName, $columnHeader, $isIgnore, $converterToDB,
|
||||||
$converterFromDB, $compareFunc);
|
$converterFromDB, $compareFunc);
|
||||||
|
|
||||||
// - добавляю в массив
|
// - добавляю в массив
|
||||||
@ -143,6 +235,28 @@
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Получает тип из базы данных по типу переменной.
|
||||||
|
*
|
||||||
|
* @param string $type Тип.
|
||||||
|
*
|
||||||
|
* @return DBType Тип из базы данных.
|
||||||
|
*/
|
||||||
|
private static function GetDBTypeForType (string $type): DBType
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @noinspection SpellCheckingInspection Отключаю проверку из-за того, что многие типы будут в lower case
|
||||||
|
*/
|
||||||
|
return match (strtolower($type)) {
|
||||||
|
"int", "integer" => DBType::INT,
|
||||||
|
"float", "double" => DBType::FLOAT,
|
||||||
|
"bool", "boolean" => DBType::BOOL,
|
||||||
|
"dateonly", "timeonly", "datetime", "datetimeimmutable" => DBType::DATE,
|
||||||
|
"array" => DBType::ARRAY,
|
||||||
|
default => DBType::STRING
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Подготавливает массив параметров
|
* Подготавливает массив параметров
|
||||||
*
|
*
|
||||||
|
49
sources/traits/Database/DatabaseTableManagement.php
Normal file
49
sources/traits/Database/DatabaseTableManagement.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @noinspection SqlNoDataSourceInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\traits\Database;
|
||||||
|
|
||||||
|
use goodboyalex\php_db_components_pack\classes\tm_drivers\MSSQLTableManager;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\tm_drivers\MySQLTableManager;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\tm_drivers\OracleDBTableManager;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\tm_drivers\PostgreSQLTableManager;
|
||||||
|
use goodboyalex\php_db_components_pack\classes\tm_drivers\SQLiteTableManager;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBDriver;
|
||||||
|
use PDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Трейт для управления таблицами базы данных.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
* @see PDO
|
||||||
|
*/
|
||||||
|
trait DatabaseTableManagement
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Проверяет, существует ли таблица.
|
||||||
|
*
|
||||||
|
* @param string $tableName Имя таблицы.
|
||||||
|
*
|
||||||
|
* @return bool Результат проверки: <code>true</code> - таблица существует, <code>false</code> - не существует.
|
||||||
|
*/
|
||||||
|
public function IsTableExist (string $tableName): bool
|
||||||
|
{
|
||||||
|
// Получаю систему управления таблицами БД
|
||||||
|
$dbDrv = match ($this->Config->Driver) {
|
||||||
|
DBDriver::MySQL => new MySQLTableManager(),
|
||||||
|
DBDriver::MSSQL => new MSSQLTableManager(),
|
||||||
|
DBDriver::PostgreSQL => new PostgreSQLTableManager(),
|
||||||
|
DBDriver::OracleDB => new OracleDBTableManager(),
|
||||||
|
DBDriver::SQLite => new SQLiteTableManager()
|
||||||
|
};
|
||||||
|
|
||||||
|
// Проверяю существование таблицы, вывожу результат
|
||||||
|
return $dbDrv->isTableExist($this->DataBaseHandle, $tableName);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user