diff --git a/mirzaev/arangodb/system/collection.php b/mirzaev/arangodb/system/collection.php index cd2c9a9..a1a9f30 100755 --- a/mirzaev/arangodb/system/collection.php +++ b/mirzaev/arangodb/system/collection.php @@ -20,99 +20,106 @@ use ArangoDBClient\CollectionHandler as _collection_handler; */ class collection { - /** - * Инициализация - * - * @param _connection $session Сессия соединения с базой данных - * @param string $name Название - * @param bool $edge Обрабатывать как ребро? (иначе: вершина) - * @param ?terminal $terminal Инстанция терминала - * - * @return string|null Идентификатор коллекции - */ - public static function init(_connection $session, string $name, bool $edge = false, ?terminal $terminal = null): ?string - { - // Инициализация - $collections = new _collection_handler($session); + /** + * Инициализация + * + * @param _connection $session Сессия соединения с базой данных + * @param string $name Название + * @param bool $edge Обрабатывать как ребро? (иначе: вершина) + * @param ?terminal $terminal Инстанция терминала + * + * @return string|null Идентификатор коллекции + */ + public static function init(_connection $session, string $name, bool $edge = false, ?terminal $terminal = null): ?string + { + // Инициализация + $collections = new _collection_handler($session); - if (!$collections->has($name)) { - // Не найдана коллекция + if (!$collections->has($name)) { + // Не найдана коллекция - // Запись в вывод - if ($terminal instanceof terminal) $terminal::write("Коллекция \"$name\" не найдена"); + // Запись в вывод + if ($terminal instanceof terminal) $terminal::write("Коллекция \"$name\" не найдена"); - // Запись коллекции на сервер и его ответ в буфер возврата - $id = $collections->create($name, ['type' => $edge ? _collection::TYPE_EDGE : _collection::TYPE_DOCUMENT]); + // Запись коллекции на сервер и его ответ в буфер возврата + $id = $collections->create($name, ['type' => $edge ? _collection::TYPE_EDGE : _collection::TYPE_DOCUMENT]); - if ($collections->has($name)) { - // Коллекция найдена (записана) + if ($collections->has($name)) { + // Коллекция найдена (записана) - // Запись в вывод - if ($terminal instanceof terminal) $terminal::write("Создана коллекция \"$name\" с типом " . ($edge ? 'ребро' : 'документ')); + // Запись в вывод + if ($terminal instanceof terminal) $terminal::write("Создана коллекция \"$name\" с типом " . ($edge ? 'ребро' : 'документ')); - // Возврат идентификатора коллекции - return $id; - } - } else { - // Найдена коллекция + // Возврат идентификатора коллекции + return $id; + } + } else { + // Найдена коллекция - // Возврат идентификатора коллекции - return $name; - } + // Возврат идентификатора коллекции + return $name; + } - return null; - } + return null; + } - /** - * Поиск - * - * @param _connection $session Сессия соединения с базой данных - * @param string $query AQL-запрос - * - * @return _document|array|string|int|null Инстанция документа - */ - public static function search(_connection $session, string $query): _document|string|array|int|null - { - // Поиск журнала - $journal = (new _statement( - $session, - [ - 'query' => $query, - "batchSize" => 1000, - "sanitize" => true - ] - ))->execute(); + /** + * Поиск + * + * @param _connection $session Сессия соединения с базой данных + * @param string $query AQL-запрос + * @param array $binds Binds for query [bind => value] + * + * @return _document|array|string|int|null Инстанция документа + */ + public static function search(_connection $session, string $query, array $binds = []): _document|string|array|int|null + { + // Statement instance initialization + $instance = new _statement( + $session, + [ + 'query' => $query, + "batchSize" => 1000, + "sanitize" => true + ] + ); - // Инициализация буфера вывода - $buffer = []; + // Binds application + $instance->bind($binds); - foreach ($journal as $key => $value) { - $buffer[$key] = $value; - } + // Sending the request + $response = $instance->execute(); - return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null; - } + // Инициализация буфера вывода + $buffer = []; - /** - * Очистка - * - * @param _connection $session Сессия соединения с базой данных - * @param string $name Название - * - * @return bool Статус выполнения - */ - public static function truncate(_connection $session, string $name): bool - { - // Инициализация - $collections = new _collection_handler($session); + foreach ($response->getAll() as $key => $value) { + $buffer[$key] = $value; + } - if ($collections->has($name)) { - // Найдена коллекция + return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null; + } - // Очистка - return $collections->truncate($name); - } + /** + * Очистка + * + * @param _connection $session Сессия соединения с базой данных + * @param string $name Название + * + * @return bool Статус выполнения + */ + public static function truncate(_connection $session, string $name): bool + { + // Инициализация + $collections = new _collection_handler($session); - return false; - } + if ($collections->has($name)) { + // Найдена коллекция + + // Очистка + return $collections->truncate($name); + } + + return false; + } } diff --git a/mirzaev/arangodb/system/document.php b/mirzaev/arangodb/system/document.php index 36ff22d..e1801c6 100755 --- a/mirzaev/arangodb/system/document.php +++ b/mirzaev/arangodb/system/document.php @@ -20,89 +20,95 @@ use ArangoDBClient\EdgeHandler as _edge_handler; */ class document { - /** - * Записать - * - * @param _connection $session Сессия соединения с базой данных - * @param string $collection Коллекция - * @param ?array $data Данные - * @param bool $check Проверка на запись в базу данных - * @param ?terminal $terminal Инстанция терминала - * - * @return string|null Идентификатор - */ - public static function write(_connection $session, string $collection, ?array $data = [], bool $check = false, ?terminal $terminal = null): ?string - { - // Инициализация коллекции - collection::init($session, $collection, isset($data['_from'], $data['_to'])); + /** + * Записать + * + * @param _connection $session Сессия соединения с базой данных + * @param string $collection Коллекция + * @param ?array $data Данные + * @param bool $check Проверка на запись в базу данных + * @param ?terminal $terminal Инстанция терминала + * + * @return string|null Идентификатор + */ + public static function write(_connection $session, string $collection, ?array $data = [], bool $check = false, ?terminal $terminal = null): ?string + { + // Инициализация коллекции + collection::init($session, $collection, isset($data['_from'], $data['_to'])); - if (isset($data['_from'], $data['_to'])) { - // Ребро + if (isset($data['_from'], $data['_to'])) { + // Ребро - // Инициализация обработчика рёбер - $documents = new _edge_handler($session); + // Инициализация обработчика рёбер + $documents = new _edge_handler($session); - // Инициализация ребра - $document = new _edge(); + // Инициализация ребра + $document = new _edge(); - // Инициализация вершин - $_from = $data['_from']; - $_to = $data['_to']; + // Инициализация вершин + $_from = $data['_from']; + $_to = $data['_to']; - // Деинициализация из входных данных - unset($data['_from'], $data['_to']); - } else { - // Вершина + // Деинициализация из входных данных + unset($data['_from'], $data['_to']); + } else { + // Вершина - // Инициализация обработчика вершин - $documents = new _document_handler($session); + // Инициализация обработчика вершин + $documents = new _document_handler($session); - // Инициализация вершины - $document = new _document(); - } + // Инициализация вершины + $document = new _document(); + } - foreach (['created' => time()] + $data as $key => $value) { - // Перебор параметров + // Инициализация даты создания + $created = time(); - // Запись в инстанцию документа - $document->set($key, $value); - } + foreach (['created' => $created, 'updated' => $created] + $data as $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 ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" создан документ \"$id\""); - } else if ($check) { - // Не найден записанный документ + if ($check && $documents->has($collection, $id)) { + // Найден записанный документ - // Запись в вывод - 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 $id; - } + return null; + } - /** - * Обновить - * - * @param _connection $session Сессия соединения с базой данных - * @param _document $document Инстанция документа вершины - * - * @return bool Статус обработки - */ - public static function update(_connection $session, _document $document): bool - { - // Инициализация обработчика вершин - $documents = new _document_handler($session); + // Возврат идентификатора коллекции + return $id; + } - // Запись в базу данных - return $documents->update($document); - } + /** + * Обновить + * + * @param _connection $session Сессия соединения с базой данных + * @param _document $document Инстанция документа вершины + * + * @return bool Статус обработки + */ + public static function update(_connection $session, _document $document): bool + { + // Инициализация обработчика вершин + $documents = new _document_handler($session); + + // Запись даты обновления в инстанцию документа + $document->set('updated', time()); + + // Запись в базу данных + return $documents->update($document); + } }