20250820 v1.0.2-b2

This commit is contained in:
2025-08-20 18:09:37 +03:00
parent cc3b1ef41b
commit 95aa7d9411
22 changed files with 594 additions and 68 deletions

View File

@@ -291,12 +291,12 @@
* @param string $className Имя класса объекта.
* @param DBOperation $operation Операция.
*
* @return object|null Экземпляр класса объекта или <code>null</code>, если ошибка.
* @return IDBItem|null Экземпляр класса объекта или <code>null</code>, если ошибка.
*/
private function RestoreItem (array $row, string $className, DBOperation $operation): ?object
private function RestoreItem (array $row, string $className, DBOperation $operation): ?IDBItem
{
// Если целевой класс не реализует интерфейс IDBItem
if (in_array(IDBItem::class, class_implements($className)))
if (!is_a($className, IDBItem::class, true))
// - то прерываем и возвращаем null
return null;
@@ -385,8 +385,12 @@
*/
private function PrepareColumn (array $columns): array
{
// Получаю знаки открытия параметра и закрытия его
[$signOpen, $signClose] = DBDriver::GetSigns($this->Config->Driver);
// Возвращаю результат
return array_map(
function ($item)
function ($item) use ($signOpen, $signClose)
{
// Результирующая строка
$result = "";
@@ -399,18 +403,18 @@
// - последний символ
$lastLetter = substr($item, -1);
// - если первый символ не $this->DBSignOpen
if ($firstLetter !== $this->DBSignOpen)
// - если первый символ не $signOpen
if ($firstLetter !== $signOpen)
// -- то добавляем
$result .= $this->DBSignOpen;
$result .= $signOpen;
// - добавляем строку
$result .= $item;
// - если последний символ не $this->DBSignClose
if ($lastLetter !== $this->DBSignClose)
// - если последний символ не $signClose
if ($lastLetter !== $signClose)
// -- то добавляем
$result .= $this->DBSignClose;
$result .= $signClose;
}
// Возвращаем результат
@@ -438,13 +442,13 @@
* @var string $sql_where where-запрос SQL
* @var array $params Параметры и их значения (для защиты от SQL-инъекции)
*/
[$sql_where, $params] = $whereConditions->Build();
[$sql_where, $params] = $whereConditions->Build($this->Config->Driver);
// Колонки
$sql_columns = count($columns) > 0 ? implode(', ', $this->PrepareColumn($columns)) : "*";
// Создаю запрос
$sql = "SELECT $sql_columns FROM $this->DBSignOpen$table$this->DBSignClose";
$sql = "SELECT $sql_columns FROM $table";
// Если заданы where-параметры
if ($whereConditions->Count() > 0)
@@ -464,9 +468,13 @@
*/
private function PrepareTableName (string $table): string
{
// Получаю знаки открытия параметра и закрытия его
[$signOpen, $signClose] = DBDriver::GetSigns($this->Config->Driver);
// Возвращаю результат
return match ($this->Config->Driver) {
DBDriver::MySQL, DBDriver::SQLite, DBDriver::OracleDB, DBDriver::PostgreSQL => $this->DBSignOpen
. $table . $this->DBSignClose,
DBDriver::MySQL, DBDriver::SQLite, DBDriver::OracleDB, DBDriver::PostgreSQL =>
"$signOpen$table$signClose",
DBDriver::MSSQL => "[dbo].[$table]"
};
}