9 Commits
1.0.0 ... 1.3.0

Author SHA1 Message Date
d0ce9e47af удалили компосер лок 2023-12-21 23:26:50 +07:00
b2088df8fb забыл что сделал 2023-12-21 23:20:32 +07:00
cb1388722c added to .gitignore 2023-07-10 06:47:42 +07:00
root
11be80b0ad remove composer.lock 2023-07-09 16:45:49 +00:00
root
48a8908afd PHP 8.2 2023-07-09 16:42:01 +00:00
root
8f5f5b44de just rules and license 2023-07-09 16:37:43 +00:00
root
8e7972d933 cool patch 2023-07-09 16:24:00 +00:00
e7da9978d0 english description 2022-11-06 10:03:56 +10:00
4daa93799e Update composer.json 2022-11-06 09:57:23 +10:00
9 changed files with 325 additions and 2382 deletions

2
.gitignore vendored Normal file → Executable file
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.2 Framework for working with ArangoDB
🤟 Very simple and flexible, easy to scale and integrate

82
composer.json Normal file → Executable file
View File

@@ -1,35 +1,47 @@
{ {
"name": "mirzaev/arangodb", "name": "mirzaev/arangodb",
"description": "Реализация управления хранилищем данных ArangoDB", "description": "Simple PHP-framework for ArangoDB",
"keywords": [ "readme": "README.md",
"ArangoDB" "keywords": [
], "ArangoDB"
"type": "library", ],
"license": "WTFPL", "type": "library",
"homepage": "https://git.hood.su/mirzaev/arangodb", "license": "WTFPL",
"authors": [ "homepage": "https://git.hood.su/mirzaev/arangodb",
{ "authors": [
"name": "Arsen Mirzaev Tatyano-Muradovich", {
"email": "arsen@mirzaev.sexy", "name": "Arsen Mirzaev Tatyano-Muradovich",
"homepage": "https://mirzaev.sexy", "email": "arsen@mirzaev.sexy",
"role": "Developer" "homepage": "https://mirzaev.sexy",
} "role": "Developer"
], }
"require": { ],
"php": "^8.1", "support": {
"triagens/arangodb": "~3.8" "email": "arsen@mirzaev.sexy",
}, "wiki": "https://git.mirzaev.sexy/mirzaev/arangodb/manual",
"require-dev": { "issues": "https://git.mirzaev.sexy/mirzaev/arangodb/issues"
"phpunit/phpunit": "^9.3.3" },
}, "funding": [
"autoload": { {
"psr-4": { "type": "funding",
"mirzaev\\arangodb\\": "mirzaev/arangodb/system" "url": "https://fund.mirzaev.sexy"
} }
}, ],
"autoload-dev": { "require": {
"psr-4": { "php": "^8.2",
"mirzaev\\arangodb\\tests\\": "mirzaev/arangodb/tests" "triagens/arangodb": "~3.8"
} },
} "require-dev": {
} "phpunit/phpunit": "^9.3.3"
},
"autoload": {
"psr-4": {
"mirzaev\\arangodb\\": "mirzaev/arangodb/system"
}
},
"autoload-dev": {
"psr-4": {
"mirzaev\\arangodb\\tests\\": "mirzaev/arangodb/tests"
}
}
}

2098
composer.lock generated

File diff suppressed because it is too large Load Diff

243
mirzaev/arangodb/system/collection.php Normal file → Executable file
View File

@@ -1,118 +1,125 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
use mirzaev\arangodb\terminal; use mirzaev\arangodb\terminal;
use ArangoDBClient\Connection as _connection; use ArangoDBClient\Connection as _connection;
use ArangoDBClient\Collection as _collection; use ArangoDBClient\Collection as _collection;
use ArangoDBClient\Statement as _statement; use ArangoDBClient\Statement as _statement;
use ArangoDBClient\Document as _document; use ArangoDBClient\Document as _document;
use ArangoDBClient\CollectionHandler as _collection_handler; use ArangoDBClient\CollectionHandler as _collection_handler;
/** /**
* Коллекция * Коллекция
* *
* @package mirzaev\arangodb * @package mirzaev\arangodb
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/ */
class collection class collection
{ {
/** /**
* Инициализация * Инициализация
* *
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $name Название * @param string $name Название
* @param bool $edge Обрабатывать как ребро? (иначе: вершина) * @param bool $edge Обрабатывать как ребро? (иначе: вершина)
* @param ?terminal $terminal Инстанция терминала * @param ?terminal $terminal Инстанция терминала
* *
* @return string|null Идентификатор коллекции * @return string|null Идентификатор коллекции
*/ */
public static function init(_connection $session, string $name, bool $edge = false, ?terminal $terminal = null): ?string public static function init(_connection $session, string $name, bool $edge = false, ?terminal $terminal = null): ?string
{ {
// Инициализация // Инициализация
$collections = new _collection_handler($session); $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; return $id;
} }
} else { } else {
// Найдена коллекция // Найдена коллекция
// Возврат идентификатора коллекции // Возврат идентификатора коллекции
return $name; return $name;
} }
return null; return null;
} }
/** /**
* Поиск * Поиск
* *
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $query AQL-запрос * @param string $query AQL-запрос
* * @param array $binds Binds for query [bind => value]
* @return _document|null Инстанция документа *
*/ * @return _document|array|string|int|null Инстанция документа
public static function search(_connection $session, string $query): ?_document */
{ public static function search(_connection $session, string $query, array $binds = []): _document|string|array|int|null
// Поиск журнала {
$journal = (new _statement( // Statement instance initialization
$session, $instance = new _statement(
[ $session,
'query' => $query, [
"batchSize" => 1000, 'query' => $query,
"sanitize" => true "batchSize" => 1000,
] "sanitize" => true
))->execute(); ]
);
// Инициализация буфера вывода
$buffer = []; // Binds application
$instance->bind($binds);
foreach ($journal as $key => $value) {
$buffer[$key] = $value; // Sending the request
} $response = $instance->execute();
return $buffer[0] ?? null; // Инициализация буфера вывода
} $buffer = [];
/** foreach ($response->getAll() as $key => $value) {
* Очистка $buffer[$key] = $value;
* }
* @param _connection $session Сессия соединения с базой данных
* @param string $name Название return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null;
* }
* @return bool Статус выполнения
*/ /**
public static function truncate(_connection $session, string $name): bool * Очистка
{ *
// Инициализация * @param _connection $session Сессия соединения с базой данных
$collections = new _collection_handler($session); * @param string $name Название
*
if ($collections->has($name)) { * @return bool Статус выполнения
// Найдена коллекция */
public static function truncate(_connection $session, string $name): bool
// Очистка {
return $collections->truncate($name); // Инициализация
} $collections = new _collection_handler($session);
return false; if ($collections->has($name)) {
} // Найдена коллекция
}
// Очистка
return $collections->truncate($name);
}
return false;
}
}

0
mirzaev/arangodb/system/connection.php Normal file → Executable file
View File

222
mirzaev/arangodb/system/document.php Normal file → Executable file
View File

@@ -1,108 +1,114 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
use mirzaev\arangodb\terminal; use mirzaev\arangodb\terminal;
use ArangoDBClient\Connection as _connection; use ArangoDBClient\Connection as _connection;
use ArangoDBClient\Document as _document; use ArangoDBClient\Document as _document;
use ArangoDBClient\Edge as _edge; use ArangoDBClient\Edge as _edge;
use ArangoDBClient\DocumentHandler as _document_handler; use ArangoDBClient\DocumentHandler as _document_handler;
use ArangoDBClient\EdgeHandler as _edge_handler; use ArangoDBClient\EdgeHandler as _edge_handler;
/** /**
* Документ * Документ
* *
* @package mirzaev\arangodb * @package mirzaev\arangodb
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/ */
class document class document
{ {
/** /**
* Записать * Записать
* *
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $collection Коллекция * @param string $collection Коллекция
* @param ?array $data Данные * @param ?array $data Данные
* @param bool $check Проверка на запись в базу данных * @param bool $check Проверка на запись в базу данных
* @param ?terminal $terminal Инстанция терминала * @param ?terminal $terminal Инстанция терминала
* *
* @return string|null Идентификатор * @return string|null Идентификатор
*/ */
public static function write(_connection $session, string $collection, ?array $data = [], bool $check = false, ?terminal $terminal = null): ?string 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'])); 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']; $_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($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); // Перебор параметров
}
// Запись в инстанцию документа
// Запись на сервер и его ответ в буфер возврата $document->set($key, $value);
$id = isset($_from, $_to) ? $documents->saveEdge($collection, $_from, $_to, $document) : $documents->insert($collection, $document); }
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\" создан документ \"$id\"");
// Запись в вывод } else if ($check) {
if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" не удалось найти созданный или создать документ"); // Не найден записанный документ
return null; // Запись в вывод
} if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" не удалось найти созданный или создать документ");
// Возврат идентификатора коллекции return null;
return $id; }
}
// Возврат идентификатора коллекции
/** return $id;
* Обновить }
*
* @param _connection $session Сессия соединения с базой данных /**
* @param _document $document Инстанция документа вершины * Обновить
* *
* @return bool Статус обработки * @param _connection $session Сессия соединения с базой данных
*/ * @param _document $document Инстанция документа вершины
public static function update(_connection $session, _document $document): bool *
{ * @return bool Статус обработки
// Инициализация обработчика вершин */
$documents = new _document_handler($session); public static function update(_connection $session, _document $document): bool
{
// Запись в базу данных // Инициализация обработчика вершин
return $documents->update($document); $documents = new _document_handler($session);
}
} // Запись даты обновления в инстанцию документа
$document->set('updated', time());
// Запись в базу данных
return $documents->update($document);
}
}

46
mirzaev/arangodb/system/terminal.php Normal file → Executable file
View File

@@ -1,23 +1,23 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
namespace mirzaev\arangodb; namespace mirzaev\arangodb;
class terminal class terminal
{ {
/** /**
* Префикс * Префикс
*/ */
protected const PREFIX = 'arangodb'; protected const PREFIX = 'arangodb';
/** /**
* Запись в вывод * Запись в вывод
* *
* @param string $text Текст сообщения * @param string $text Текст сообщения
*/ */
public static function write(string $text): void public static function write(string $text): void
{ {
echo sprintf("[%s] $text\n", self::PREFIX); echo sprintf("[%s] $text\n", self::PREFIX);
} }
} }