Compare commits

...

11 Commits

10 changed files with 569 additions and 2430 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
vendor vendor
composer.lock
!.gitignore

11
LICENSE Normal file
View File

@ -0,0 +1,11 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# PHP 8.3 Framework for working with ArangoDB
🤟 Very simple and flexible, easy to scale and integrate

View File

@ -5,7 +5,7 @@
"keywords": [ "keywords": [
"ArangoDB" "ArangoDB"
], ],
"type": "library", "type": "framework",
"license": "WTFPL", "license": "WTFPL",
"homepage": "https://git.hood.su/mirzaev/arangodb", "homepage": "https://git.hood.su/mirzaev/arangodb",
"authors": [ "authors": [
@ -28,7 +28,7 @@
} }
], ],
"require": { "require": {
"php": "^8.1", "php": "^8.2",
"triagens/arangodb": "~3.8" "triagens/arangodb": "~3.8"
}, },
"require-dev": { "require-dev": {

2098
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -4,115 +4,201 @@ declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
use mirzaev\arangodb\terminal; // Files of the project
use mirzaev\arangodb\connection,
mirzaev\arangodb\terminal,
mirzaev\arangodb\enumerations\collection\type;
use ArangoDBClient\Connection as _connection; // Library for ArangoDB
use ArangoDBClient\Collection as _collection; use ArangoDBClient\Statement as _statement,
use ArangoDBClient\Statement as _statement; ArangoDBClient\Document as _document,
use ArangoDBClient\Document as _document; ArangoDBClient\CollectionHandler as _collection_handler,
use ArangoDBClient\CollectionHandler as _collection_handler; ArangoDBClient\Cursor as cursor;
// Built-in libraries
use exception;
/** /**
* Коллекция * Collection
* *
* @package mirzaev\arangodb * @package mirzaev\arangodb
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/ */
class collection class collection
{ {
/** /**
* Инициализация * Initialize a collection
* *
* @param _connection $session Сессия соединения с базой данных * @param string $collection Name of the collection
* @param string $name Название * @param type $type Type of the collection
* @param bool $edge Обрабатывать как ребро? (иначе: вершина) * @param ?terminal $terminal Инстанция терминала
* @param ?terminal $terminal Инстанция терминала * @param array &$errors Registry of errors
* *
* @return string|null Идентификатор коллекции * @return string|null Identifier of the collection
*/ */
public static function init(_connection $session, string $name, bool $edge = false, ?terminal $terminal = null): ?string public static function initialize(string $name, type $type = type::document, ?terminal $terminal = null, array &$errors = []): ?string
{ {
// Инициализация try {
$collections = new _collection_handler($session); // Инициализация
$collections = new _collection_handler(connection::$session);
if (!$collections->has($name)) { if (!$collections->has($name)) {
// Не найдана коллекция // Не найдана коллекция
// Запись в вывод // Запись в вывод
if ($terminal instanceof terminal) $terminal::write("Коллекция \"$name\" не найдена"); if ($terminal instanceof terminal) $terminal::write("Not found $type collection: $name");
// Запись коллекции на сервер и его ответ в буфер возврата // Запись коллекции на сервер и его ответ в буфер возврата
$id = $collections->create($name, ['type' => $edge ? _collection::TYPE_EDGE : _collection::TYPE_DOCUMENT]); $id = $collections->create($name, ['type' => $type->code()]);
if ($collections->has($name)) { if ($collections->has($name)) {
// Коллекция найдена (записана) // Коллекция найдена (записана)
// Запись в вывод // Запись в вывод
if ($terminal instanceof terminal) $terminal::write("Создана коллекция \"$name\" с типом " . ($edge ? 'ребро' : 'документ')); if ($terminal instanceof terminal) $terminal::write("Created $type collection: $name");
// Возврат идентификатора коллекции // Возврат идентификатора коллекции
return $id; return $id;
} }
} else { } else {
// Найдена коллекция // Найдена коллекция
// Возврат идентификатора коллекции // Возврат идентификатора коллекции
return $name; return $name;
} }
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
return null; return null;
} }
/** /**
* Поиск * Execute
* *
* @param _connection $session Сессия соединения с базой данных * @param string $query Query (AQL)
* @param string $query AQL-запрос * @param array $parameters Binded parameters for placeholders [placholder => parameter]
* * @param bool $flat Not implement record?
* @return _document|array|string|int|null Инстанция документа * @param array &$errors Registry of errors
*/ *
public static function search(_connection $session, string $query): _document|string|array|int|null * @return _document|array|string|int|null Instance of the document
{ */
// Поиск журнала public static function execute(string $query, array $parameters = [], bool $flat = false, array &$errors = []): _document|string|array|int|null
$journal = (new _statement( {
$session, try {
[ // Statement instance initialization
'query' => $query, $instance = new _statement(
"batchSize" => 1000, connection::$session,
"sanitize" => true [
] 'query' => $query,
))->execute(); 'batchSize' => 1000,
'sanitize' => true,
cursor::ENTRY_FLAT => $flat
]
);
// Инициализация буфера вывода // Binds application
$buffer = []; $instance->bind($parameters);
foreach ($journal as $key => $value) { // Sending the request
$buffer[$key] = $value; $response = $instance->execute();
}
return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null; // Инициализация буфера вывода
} $buffer = [];
/** foreach ($response->getAll() as $key => $value) {
* Очистка $buffer[$key] = $value;
* }
* @param _connection $session Сессия соединения с базой данных
* @param string $name Название
*
* @return bool Статус выполнения
*/
public static function truncate(_connection $session, string $name): bool
{
// Инициализация
$collections = new _collection_handler($session);
if ($collections->has($name)) { // Exit (success)
// Найдена коллекция return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null;
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
// Очистка // Exit (fail)
return $collections->truncate($name); return null;
} }
return false; /**
} * Truncate
*
* @param string $name Name of the collection
* @param array &$errors Registry of errors
*
* @return bool Статус выполнения
*/
public static function truncate(string $collection, array &$errors = []): bool
{
try {
// Initizlizing of the collection handler
$collections = new _collection_handler(connection::$session);
if ($collections->has($collection)) {
// Fount the collection
// Truncate and exit (success)
return $collections->truncate($collection);
}
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
// Exit (fail)
return false;
}
/**
* Count documents in ArangoDB
*
* @param string $collection Name of the collection
* @param array &$errors Registry of errors
*
* @return int|null Amount of documents in ArangoDB
*/
public static function count(string $collection, array &$errors = []): ?int
{
try {
// Count and exit (success)
return static::execute(
<<<'AQL'
RETURN LENGTH(@@collection)
AQL,
[
'@collection' => $collection
]
);
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
// Exit (fail)
return null;
}
} }

View File

@ -4,201 +4,205 @@ declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
use ArangoDBClient\Connection as _connection; // Library for ArangoDB
use ArangoDBClient\Exception as _exception; use ArangoDBClient\Connection as _connection,
use ArangoDBClient\UpdatePolicy as _update; ArangoDBClient\Exception as _exception,
use ArangoDBClient\ConnectionOptions as _options; ArangoDBClient\UpdatePolicy as _update,
ArangoDBClient\ConnectionOptions as _options;
// Built-in libraries
use exception; use exception;
/** /**
* Подключение * Connection
* *
* @package mirzaev\arangodb * @package mirzaev\arangodb
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/ */
final class connection final class connection
{ {
/** /**
* Адрес * Адрес
*/ */
protected string $adress = 'tcp://127.0.0.1:8529'; protected string $adress = 'tcp://127.0.0.1:8529';
/** /**
* Хранилище (название) * Хранилище (название)
*/ */
protected string $storage = 'root'; protected string $storage = 'root';
/** /**
* Тип аутентификации * Тип аутентификации
*/ */
protected string $auth = 'Basic'; protected string $auth = 'Basic';
/** /**
* Псевдоним пользователя * Псевдоним пользователя
*/ */
protected string $name = 'root'; protected string $name = 'root';
/** /**
* Пароль пользователя * Пароль пользователя
*/ */
protected string $password = ''; protected string $password = '';
/** /**
* Тип соединения * Тип соединения
*/ */
protected string $connection = 'Keep-Alive'; protected string $connection = 'Keep-Alive';
/** /**
* Время ожидания соединения * Время ожидания соединения
*/ */
protected int $timeout_connect = 3; protected int $timeout_connect = 3;
/** /**
* Время ожидания запроса * Время ожидания запроса
*/ */
protected int $timeout_request = 3; protected int $timeout_request = 3;
/** /**
* Переподключиться ли при разрыве соединения * Переподключиться ли при разрыве соединения
*/ */
protected bool $reconnect = true; protected bool $reconnect = true;
/** /**
* Создавать ли коллекцию, если она не существует * Создавать ли коллекцию, если она не существует
*/ */
protected bool $create = true; protected bool $create = true;
/** /**
* Действия при обновлении коллекции * Действия при обновлении коллекции
*/ */
protected string $update = _update::LAST; protected string $update = _update::LAST;
/** /**
* Активация журналирования * Активация журналирования
*/ */
protected bool $journal = false; protected bool $journal = false;
/** /**
* Сессия соединения * Сессия соединения
*/ */
protected _connection $session; public static _connection $session;
/** /**
* Конструктор * Конструктор
* *
* @param array $settings Настройки * @param array $settings Настройки
*/ *
public function __construct(array $settings = null) * @todo ПЕРЕДЕЛАТЬ ПОЛНОСТЬЮ
{ */
// Запись public function __construct(array $settings = null)
@$this->__set('adress', $settings['adress'] ?? $settings['endpoint']); {
@$this->__set('storage', $settings['storage'] ?? $settings['database']); // Запись
@$this->__set('auth', $settings['auth']); @$this->__set('adress', $settings['adress'] ?? $settings['endpoint']);
@$this->__set('name', $settings['name']); @$this->__set('storage', $settings['storage'] ?? $settings['database']);
@$this->__set('password', $settings['password']); @$this->__set('auth', $settings['auth']);
@$this->__set('connection', $settings['connection']); @$this->__set('name', $settings['name']);
@$this->__set('timeout_connect', $settings['timeout_connect']); @$this->__set('password', $settings['password']);
@$this->__set('timeout_request', $settings['timeout_request']); @$this->__set('connection', $settings['connection']);
@$this->__set('reconnect', $settings['reconnect']); @$this->__set('timeout_connect', $settings['timeout_connect']);
@$this->__set('create', $settings['create']); @$this->__set('timeout_request', $settings['timeout_request']);
@$this->__set('update', $settings['update'] ?? $settings['policy']); @$this->__set('reconnect', $settings['reconnect']);
@$this->__set('journal', $settings['journal']); @$this->__set('create', $settings['create']);
@$this->__set('update', $settings['update'] ?? $settings['policy']);
@$this->__set('journal', $settings['journal']);
if ($this->journal) { if ($this->journal) {
// Запрос на активацию журналирования // Запрос на активацию журналирования
_exception::enableLogging(); _exception::enableLogging();
} }
// Подключение // Подключение
$this->session = new _connection([ static::$session = new _connection([
_options::OPTION_ENDPOINT => $this->adress, _options::OPTION_ENDPOINT => $this->adress,
_options::OPTION_DATABASE => $this->storage, _options::OPTION_DATABASE => $this->storage,
_options::OPTION_AUTH_TYPE => $this->auth, _options::OPTION_AUTH_TYPE => $this->auth,
_options::OPTION_AUTH_USER => $this->name, _options::OPTION_AUTH_USER => $this->name,
_options::OPTION_AUTH_PASSWD => $this->password, _options::OPTION_AUTH_PASSWD => $this->password,
_options::OPTION_CONNECTION => $this->connection, _options::OPTION_CONNECTION => $this->connection,
_options::OPTION_CONNECT_TIMEOUT => $this->timeout_connect, _options::OPTION_CONNECT_TIMEOUT => $this->timeout_connect,
_options::OPTION_REQUEST_TIMEOUT => $this->timeout_request, _options::OPTION_REQUEST_TIMEOUT => $this->timeout_request,
_options::OPTION_RECONNECT => $this->reconnect, _options::OPTION_RECONNECT => $this->reconnect,
_options::OPTION_CREATE => $this->create, _options::OPTION_CREATE => $this->create,
_options::OPTION_UPDATE_POLICY => $this->update, _options::OPTION_UPDATE_POLICY => $this->update,
]); ]);
} }
/** /**
* Записать свойство * Записать свойство
* *
* @param mixed $name Название * @param mixed $name Название
* @param mixed $value Значение * @param mixed $value Значение
*/ */
public function __set(string $name, mixed $value): void public function __set(string $name, mixed $value): void
{ {
match ($name) { match ($name) {
'adress', 'endpoint' => $this->adress = $value ?? throw new exception("Свойство \"$name\" не может быть пустым", 500), 'adress', 'endpoint' => $this->adress = $value ?? throw new exception("Свойство \"$name\" не может быть пустым", 500),
'storage', 'database', 'db' => $this->storage = $value ?? throw new exception("Свойство \"$name\" не может быть пустым", 500), 'storage', 'database', 'db' => $this->storage = $value ?? throw new exception("Свойство \"$name\" не может быть пустым", 500),
'auth' => !$value ?: $this->auth = $value, 'auth' => !$value ?: $this->auth = $value,
'name' => !$value ?: $this->name = $value, 'name' => !$value ?: $this->name = $value,
'password' => !$value ?: $this->password = $value, 'password' => !$value ?: $this->password = $value,
'connection' => !$value ?: $this->connection = $value, 'connection' => !$value ?: $this->connection = $value,
'timeout_connect' => !$value ?: $this->timeout_connect = $value, 'timeout_connect' => !$value ?: $this->timeout_connect = $value,
'timeout_request' => !$value ?: $this->timeout_request = $value, 'timeout_request' => !$value ?: $this->timeout_request = $value,
'reconnect' => !$value ?: $this->reconnect = $value, 'reconnect' => !$value ?: $this->reconnect = $value,
'create' => !$value ?: $this->create = $value, 'create' => !$value ?: $this->create = $value,
'update', 'policy' => !$value ?: $this->update = $value, 'update', 'policy' => !$value ?: $this->update = $value,
'journal' => !$value ?: $this->journal = $value, 'journal' => !$value ?: $this->journal = $value,
default => throw new exception("Свойство \"$name\" не найдено", 404) default => throw new exception("Свойство \"$name\" не найдено", 404)
}; };
} }
/** /**
* Прочитать свойство * Прочитать свойство
* *
* @param mixed $name Название * @param mixed $name Название
*/ */
public function __get(string $name): mixed public function __get(string $name): mixed
{ {
return match ($name) { return match ($name) {
'adress', 'endpoint' => $this->adress, 'adress', 'endpoint' => $this->adress,
'storage', 'database', 'db' => $this->storage, 'storage', 'database', 'db' => $this->storage,
'auth' => $this->auth, 'auth' => $this->auth,
'name' => $this->name, 'name' => $this->name,
'password' => $this->password, 'password' => $this->password,
'connection' => $this->connection, 'connection' => $this->connection,
'timeout_connect' => $this->timeout_connect, 'timeout_connect' => $this->timeout_connect,
'timeout_request' => $this->timeout_request, 'timeout_request' => $this->timeout_request,
'reconnect' => $this->reconnect, 'reconnect' => $this->reconnect,
'create' => $this->create, 'create' => $this->create,
'update', 'policy' => $this->update, 'update', 'policy' => $this->update,
'session' => $this->session, 'journal' => $this->journal,
'journal' => $this->journal, default => throw new exception("Свойство \"$name\" не найдено", 404)
default => throw new exception("Свойство \"$name\" не найдено", 404) };
}; }
}
/** /**
* Проверить свойство на инициализированность * Проверить свойство на инициализированность
* *
* @param mixed $name Название * @param mixed $name Название
*/ */
public function __isset(string $name): bool public function __isset(string $name): bool
{ {
return match ($name) { return match ($name) {
'adress', 'endpoint' => isset($this->adress), 'adress', 'endpoint' => isset($this->adress),
'storage', 'database', 'db' => isset($this->storage), 'storage', 'database', 'db' => isset($this->storage),
'auth' => isset($this->auth), 'auth' => isset($this->auth),
'name' => isset($this->name), 'name' => isset($this->name),
'password' => isset($this->password), 'password' => isset($this->password),
'connection' => isset($this->connection), 'connection' => isset($this->connection),
'timeout_connect' => isset($this->timeout_connect), 'timeout_connect' => isset($this->timeout_connect),
'timeout_request' => isset($this->timeout_request), 'timeout_request' => isset($this->timeout_request),
'reconnect' => isset($this->reconnect), 'reconnect' => isset($this->reconnect),
'create' => isset($this->create), 'create' => isset($this->create),
'update', 'policy' => isset($this->update), 'update', 'policy' => isset($this->update),
'session' => isset($this->session), 'journal' => isset($this->journal),
'journal' => isset($this->journal), default => throw new exception("Свойство \"$name\" не найдено", 404)
default => throw new exception("Свойство \"$name\" не найдено", 404) };
}; }
}
} }

View File

@ -4,105 +4,186 @@ declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
use mirzaev\arangodb\terminal; // Files of the project
use mirzaev\arangodb\terminal,
mirzaev\arangodb\connection,
mirzaev\arangodb\enumerations\collection\type;
use ArangoDBClient\Connection as _connection; // Librsry for ArangoDB
use ArangoDBClient\Document as _document; use ArangoDBClient\Connection as _connection,
use ArangoDBClient\Edge as _edge; ArangoDBClient\Document as _document,
use ArangoDBClient\DocumentHandler as _document_handler; ArangoDBClient\Edge as _edge,
use ArangoDBClient\EdgeHandler as _edge_handler; ArangoDBClient\DocumentHandler as _document_handler,
ArangoDBClient\EdgeHandler as _edge_handler;
// Built-in libraries
use exception;
/** /**
* Документ * Document
*
* Handlers of document in ArangoDB
* *
* @package mirzaev\arangodb * @package mirzaev\arangodb
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/ */
class document class document
{ {
/** /**
* Записать * Write
* *
* @param _connection $session Сессия соединения с базой данных * @param string $collection Коллекция
* @param string $collection Коллекция * @param ?array $data Данные
* @param ?array $data Данные * @param bool $check Проверка на запись в базу данных
* @param bool $check Проверка на запись в базу данных * @param ?terminal $terminal Instance of the terminal
* @param ?terminal $terminal Инстанция терминала * @param array &$errors Registry of errors
* *
* @return string|null Идентификатор * @return string|null Идентификатор
*/ *
public static function write(_connection $session, string $collection, ?array $data = [], bool $check = false, ?terminal $terminal = null): ?string * @todo
{ * 1. Bind parameters
// Инициализация коллекции */
collection::init($session, $collection, isset($data['_from'], $data['_to'])); public static function write(
string $collection,
?array $data = [],
bool $check = false,
?terminal $terminal = null,
array &$errors = []
): string|null|false {
try {
// Инициализация коллекции
collection::initialize($collection, isset($data['_from'], $data['_to']) ? type::edge : type::document);
if (isset($data['_from'], $data['_to'])) { if (isset($data['_from'], $data['_to'])) {
// Ребро // Ребро
// Инициализация обработчика рёбер // Инициализация обработчика рёбер
$documents = new _edge_handler($session); $documents = new _edge_handler(connection::$session);
// Инициализация ребра // Инициализация ребра
$document = new _edge(); $document = new _edge();
// Инициализация вершин // Инициализация вершин
$_from = $data['_from']; $_from = $data['_from'];
$_to = $data['_to']; $_to = $data['_to'];
// Деинициализация из входных данных // Деинициализация из входных данных
unset($data['_from'], $data['_to']); unset($data['_from'], $data['_to']);
} else { } else {
// Вершина // Вершина
// Инициализация обработчика вершин // Инициализация обработчика вершин
$documents = new _document_handler($session); $documents = new _document_handler(connection::$session);
// Инициализация вершины // Инициализация вершины
$document = new _document(); $document = new _document();
} }
foreach (['created' => time()] + $data as $key => $value) { // Инициализация даты создания
// Перебор параметров $created = time();
// Запись в инстанцию документа foreach (['created' => $created, 'updated' => $created] + $data as $key => $value) {
$document->set($key, $value); // Перебор параметров
}
// Запись на сервер и его ответ в буфер возврата // Запись в инстанцию документа
$id = isset($_from, $_to) ? $documents->saveEdge($collection, $_from, $_to, $document) : $documents->insert($collection, $document); $document->set($key, $value);
}
if ($check && $documents->has($collection, $id)) { // Запись на сервер и его ответ в буфер возврата
// Найден записанный документ $id = isset($_from, $_to) ? $documents->saveEdge($collection, $_from, $_to, $document) : $documents->insert($collection, $document);
// Запись в вывод if ($check && $documents->has($collection, $id)) {
if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" создан документ \"$id\""); // Найден записанный документ
} else if ($check) {
// Не найден записанный документ
// Запись в вывод // Запись в вывод
if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" не удалось найти созданный или создать документ"); if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" создан документ \"$id\"");
} else if ($check) {
// Не найден записанный документ
return null; // Запись в вывод
} if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" не удалось найти созданный или создать документ");
// Возврат идентификатора коллекции return null;
return $id; }
}
/** // Возврат идентификатора коллекции
* Обновить return $id;
* } catch (exception $e) {
* @param _connection $session Сессия соединения с базой данных // Writing to registry of errors
* @param _document $document Инстанция документа вершины $errors[] = [
* 'text' => $e->getMessage(),
* @return bool Статус обработки 'file' => $e->getFile(),
*/ 'line' => $e->getLine(),
public static function update(_connection $session, _document $document): bool 'stack' => $e->getTrace()
{ ];
// Инициализация обработчика вершин }
$documents = new _document_handler($session);
// Запись в базу данных // Exit (fail)
return $documents->update($document); return false;
} }
/**
* Update
*
* @param array &$errors Registry of errors
* @param _document $document Instance of the document
*
* @return bool Has the document been updated?
*/
public static function update(_document $document, array &$errors = []): bool
{
try {
// Initialize the handler of documents
$documents = new _document_handler(connection::$session);
// Writing date of the updating to the updating document
$document->set('updated', time());
// Writing and exit (success)
return $documents->update($document);
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
// Exit (fail)
return false;
}
/**
* Delete
*
* @param _document $document Instance of the document
* @param array &$errors Registry of errors
*
* @return bool Has the document been deleted?
*/
public static function delete(_document $document, array &$errors = []): bool
{
try {
// Initialize the handler of documents
$documents = new _document_handler(connection::$session);
// Delete abd exit (success)
return $documents->remove($document);
} catch (exception $e) {
// Writing to registry of errors
$errors[] = [
'text' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'stack' => $e->getTrace()
];
}
// Exit (fail)
return false;
}
} }

View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace mirzaev\arangodb\enumerations\collection;
// Library for ArangoDB
use ArangoDBClient\Collection as _collection;
/**
* Types of collections
*
* @package mirzaev\arangodb\enumerations\collection
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
enum type
{
case document;
case edge;
/**
* Read code of the type from library for ArangoDB
*
* @return int Code of the type
*/
public function code(): int
{
// Exit (success)
return match ($this) {
type::document => _collection::TYPE_DOCUMENT,
type::edge => _collection::TYPE_EDGE
};
}
}

View File

@ -4,12 +4,26 @@ declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
// Built-in libraries
use exception;
/**
* Terminal
*
* lol sorry
* i did not want to do this
*
* @package mirzaev\arangodb
*
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
class terminal class terminal
{ {
/** /**
* Префикс * Префикс
*/ */
protected const PREFIX = 'arangodb'; protected const string PREFIX = 'arangodb';
/** /**
* Запись в вывод * Запись в вывод