14 Commits
0.2.0 ... 1.2.3

Author SHA1 Message Date
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
0012a31e6b Механизм деления на данные и метаданные был порублен на мелкие кусочки 2022-10-26 06:16:30 +10:00
c5d83ceee5 Отключена проверка по умолчанию 2022-10-23 08:08:56 +10:00
d21e421b2e Доработка того же самого 2022-10-23 08:08:31 +10:00
0feecd605f Исправление записи в буфер вывода при проверке 2022-10-23 08:06:02 +10:00
2947dd694a ВАЖНОЕ ИСПРАВЛЕНИЕ СОЗДАНИЯ РЕБРА 2022-10-23 07:36:20 +10:00
b70d384053 Исправление генерации data и metadata 2022-10-23 05:25:59 +10:00
3efe35fd30 Доработка терминала 2022-10-21 23:01:47 +10:00
9 changed files with 312 additions and 2381 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

16
composer.json Normal file → Executable file
View File

@@ -1,6 +1,7 @@
{ {
"name": "mirzaev/arangodb", "name": "mirzaev/arangodb",
"description": "Реализация управления хранилищем данных ArangoDB", "description": "Simple PHP-framework for ArangoDB",
"readme": "README.md",
"keywords": [ "keywords": [
"ArangoDB" "ArangoDB"
], ],
@@ -15,8 +16,19 @@
"role": "Developer" "role": "Developer"
} }
], ],
"support": {
"email": "arsen@mirzaev.sexy",
"wiki": "https://git.mirzaev.sexy/mirzaev/arangodb/manual",
"issues": "https://git.mirzaev.sexy/mirzaev/arangodb/issues"
},
"funding": [
{
"type": "funding",
"url": "https://fund.mirzaev.sexy"
}
],
"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

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

@@ -25,11 +25,12 @@ class collection
* *
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $name Название * @param string $name Название
* @param bool $edge Это ребро? (иначе: вершина) * @param bool $edge Обрабатывать как ребро? (иначе: вершина)
* @param ?terminal $terminal Инстанция терминала
* *
* @return string|null Идентификатор коллекции * @return string|null Идентификатор коллекции
*/ */
public static function init(_connection $session, string $name, bool $edge = false): ?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);
@@ -38,7 +39,7 @@ class collection
// Не найдана коллекция // Не найдана коллекция
// Запись в вывод // Запись в вывод
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]);
@@ -47,7 +48,7 @@ class collection
// Коллекция найдена (записана) // Коллекция найдена (записана)
// Запись в вывод // Запись в вывод
terminal::write("Создана коллекция \"$name\" с типом " . ($edge ? 'ребро' : 'документ')); if ($terminal instanceof terminal) $terminal::write("Создана коллекция \"$name\" с типом " . ($edge ? 'ребро' : 'документ'));
// Возврат идентификатора коллекции // Возврат идентификатора коллекции
return $id; return $id;
@@ -68,9 +69,9 @@ class collection
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $query AQL-запрос * @param string $query AQL-запрос
* *
* @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): _document|string|array|int|null
{ {
// Поиск журнала // Поиск журнала
$journal = (new _statement( $journal = (new _statement(
@@ -89,7 +90,7 @@ class collection
$buffer[$key] = $value; $buffer[$key] = $value;
} }
return $buffer[0] ?? null; return is_array($buffer) && count($buffer) > 1 ? $buffer : $buffer[0] ?? null;
} }
/** /**

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

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

@@ -26,17 +26,17 @@ class document
* @param _connection $session Сессия соединения с базой данных * @param _connection $session Сессия соединения с базой данных
* @param string $collection Коллекция * @param string $collection Коллекция
* @param ?array $data Данные * @param ?array $data Данные
* @param ?array $metadata Метаданные
* @param bool $check Проверка на запись в базу данных * @param bool $check Проверка на запись в базу данных
* @param ?terminal $terminal Инстанция терминала
* *
* @return string|null Идентификатор * @return string|null Идентификатор
*/ */
public static function write(_connection $session, string $collection, ?array $data = null, ?array $metadata = null, bool $check = true): ?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($metadata['_from'], $metadata['_to'])) { if (isset($data['_from'], $data['_to'])) {
// Ребро // Ребро
// Инициализация обработчика рёбер // Инициализация обработчика рёбер
@@ -46,11 +46,11 @@ class document
$document = new _edge(); $document = new _edge();
// Инициализация вершин // Инициализация вершин
$_from = $metadata['_from']; $_from = $data['_from'];
$_to = $metadata['_to']; $_to = $data['_to'];
// Деинициализация из входных данных // Деинициализация из входных данных
unset($metadata['_from'], $metadata['_to']); unset($data['_from'], $data['_to']);
} else { } else {
// Вершина // Вершина
@@ -61,7 +61,7 @@ class document
$document = new _document(); $document = new _document();
} }
foreach (['data' => $data, 'metadata' => ($metadata ?? []) + ['created' => time()]] as $key => $value) { foreach (['created' => time()] + $data as $key => $value) {
// Перебор параметров // Перебор параметров
// Запись в инстанцию документа // Запись в инстанцию документа
@@ -72,10 +72,17 @@ class document
$id = isset($_from, $_to) ? $documents->saveEdge($collection, $_from, $_to, $document) : $documents->insert($collection, $document); $id = isset($_from, $_to) ? $documents->saveEdge($collection, $_from, $_to, $document) : $documents->insert($collection, $document);
if ($check && $documents->has($collection, $id)) { if ($check && $documents->has($collection, $id)) {
// Документ записан // Найден записанный документ
// Запись в вывод // Запись в вывод
terminal::write("В коллекции \"$collection\" создан документ \"$id\""); if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" создан документ \"$id\"");
} else if ($check) {
// Не найден записанный документ
// Запись в вывод
if ($terminal instanceof terminal) $terminal::write("В коллекции \"$collection\" не удалось найти созданный или создать документ");
return null;
} }
// Возврат идентификатора коллекции // Возврат идентификатора коллекции
@@ -90,7 +97,8 @@ class document
* *
* @return bool Статус обработки * @return bool Статус обработки
*/ */
public static function update(_connection $session, _document $document): bool { public static function update(_connection $session, _document $document): bool
{
// Инициализация обработчика вершин // Инициализация обработчика вершин
$documents = new _document_handler($session); $documents = new _document_handler($session);

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

@@ -18,14 +18,6 @@ class terminal
*/ */
public static function write(string $text): void public static function write(string $text): void
{ {
echo self::generate_prefix() . ' ' . $text . PHP_EOL; echo sprintf("[%s] $text\n", self::PREFIX);
}
/**
* Генерация префикса
*/
public static function generate_prefix(): string
{
return '[' . self::PREFIX . ']';
} }
} }