Skip to content

Commit 7287726

Browse files
author
Alexander Miertsch
authored
Merge pull request #1 from event-engine/feature/metadata
Store metadata in dedicated columns
2 parents b824255 + 46ff177 commit 7287726

File tree

8 files changed

+666
-21
lines changed

8 files changed

+666
-21
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"require": {
1919
"php": "^7.1",
2020
"ext-pdo": "*",
21-
"event-engine/php-persistence": "^0.3"
21+
"event-engine/php-persistence": "^0.4"
2222
},
2323
"require-dev": {
2424
"roave/security-advisories": "dev-master",

src/Index/RawSqlIndexCmd.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace EventEngine\DocumentStore\Postgres\Index;
5+
6+
use EventEngine\DocumentStore\Index;
7+
use EventEngine\DocumentStore\Postgres\Exception\InvalidArgumentException;
8+
9+
final class RawSqlIndexCmd implements Index
10+
{
11+
/**
12+
* @var string|null
13+
*/
14+
private $name;
15+
16+
/**
17+
* @var string
18+
*/
19+
private $sql;
20+
21+
public static function fromArray(array $data): Index
22+
{
23+
if(!array_key_exists('sql', $data)) {
24+
throw new InvalidArgumentException("Data array misses raw sql stmt!");
25+
}
26+
27+
return new self($data['sql'], $data['name'] ?? null);
28+
}
29+
30+
public function __construct(string $sql, string $name = null)
31+
{
32+
$this->sql = $sql;
33+
$this->name = $name;
34+
}
35+
36+
37+
public function toArray()
38+
{
39+
return [
40+
'sql' => $this->sql,
41+
'name' => $this->name,
42+
];
43+
}
44+
45+
public function sql(): string
46+
{
47+
return $this->sql;
48+
}
49+
50+
public function name(): ?string
51+
{
52+
return $this->name;
53+
}
54+
}

src/Metadata/Column.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace EventEngine\DocumentStore\Postgres\Metadata;
5+
6+
final class Column
7+
{
8+
private $sql;
9+
10+
public function __construct(string $sql)
11+
{
12+
$this->sql = $sql;
13+
}
14+
15+
public function sql(): string
16+
{
17+
return $this->sql;
18+
}
19+
}

src/Metadata/MetadataColumnIndex.php

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace EventEngine\DocumentStore\Postgres\Metadata;
5+
6+
use EventEngine\DocumentStore\Index;
7+
use EventEngine\DocumentStore\Postgres\Exception\InvalidArgumentException;
8+
9+
final class MetadataColumnIndex implements Index
10+
{
11+
/**
12+
* @var Column[]
13+
*/
14+
private $columns;
15+
16+
/**
17+
* @var Index
18+
*/
19+
private $indexCmd;
20+
21+
public static function fromArray(array $data): Index
22+
{
23+
if(!array_key_exists('column', $data)) {
24+
throw new InvalidArgumentException('Missing key columns in index data');
25+
}
26+
27+
if(!array_key_exists('index', $data)) {
28+
throw new InvalidArgumentException('Missing key index in data');
29+
}
30+
31+
if(!array_key_exists('indexClass', $data)) {
32+
throw new InvalidArgumentException('Missing key indexClass in data');
33+
}
34+
35+
$indexClass = $data['indexClass'];
36+
$index = $indexClass::fromArray($data['index']);
37+
38+
return new self($index, ...array_map(function (string $columnSql) {
39+
return new Column($columnSql);
40+
}, $data['columns']));
41+
}
42+
43+
public function __construct(Index $indexCmd, Column ...$columns)
44+
{
45+
$this->columns = $columns;
46+
$this->indexCmd = $indexCmd;
47+
}
48+
49+
/**
50+
* @return Column[]
51+
*/
52+
public function columns(): array
53+
{
54+
return $this->columns;
55+
}
56+
57+
/**
58+
* @return Index
59+
*/
60+
public function indexCmd(): Index
61+
{
62+
return $this->indexCmd;
63+
}
64+
65+
public function toArray()
66+
{
67+
return [
68+
'columns' => array_map(function (Column $column) {
69+
return $column->sql();
70+
}, $this->columns),
71+
'index' => $this->indexCmd->toArray(),
72+
'indexClass' => get_class($this->indexCmd),
73+
];
74+
}
75+
}

0 commit comments

Comments
 (0)