Skip to content

Commit d95ec57

Browse files
committed
Merge branch 'develop'
* develop: specify next release add Connection::intercept()
2 parents f92c4f2 + 23f5a58 commit d95ec57

3 files changed

Lines changed: 74 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 5.1.0 - 2026-03-21
4+
5+
### Added
6+
7+
- Internal `Formal\AccessLayer\Connection::intercept()`
8+
39
## 5.0.0 - 2026-02-07
410

511
### Added

src/Connection.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
Connection\Implementation,
88
Connection\PDO,
99
Connection\Logger,
10+
Connection\Intercept,
1011
Exception\QueryFailed,
1112
};
1213
use Innmind\Url\Url;
@@ -51,4 +52,19 @@ public static function logger(self $connection, LoggerInterface $logger): self
5152
$logger,
5253
));
5354
}
55+
56+
/**
57+
* @internal
58+
*
59+
* @param callable(callable(Query|Query\Builder): Sequence<Row>, Driver, Query|Query\Builder): Sequence<Row> $intercept
60+
*/
61+
public static function intercept(
62+
self $connection,
63+
callable $intercept,
64+
): self {
65+
return new self(Intercept::of(
66+
$connection->implementation,
67+
\Closure::fromCallable($intercept),
68+
));
69+
}
5470
}

src/Connection/Intercept.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Formal\AccessLayer\Connection;
5+
6+
use Formal\AccessLayer\{
7+
Query,
8+
Driver,
9+
Row,
10+
};
11+
use Innmind\Immutable\Sequence;
12+
13+
/**
14+
* @internal
15+
*/
16+
final class Intercept implements Implementation
17+
{
18+
/**
19+
* @param \Closure(callable(Query|Query\Builder): Sequence<Row>, Driver, Query|Query\Builder): Sequence<Row> $intercept
20+
*/
21+
private function __construct(
22+
private Implementation $connection,
23+
private \Closure $intercept,
24+
) {
25+
}
26+
27+
#[\Override]
28+
public function __invoke(Query|Query\Builder $query): Sequence
29+
{
30+
return ($this->intercept)(
31+
fn(Query|Query\Builder $query) => ($this->connection)($query),
32+
$this->connection->driver(),
33+
$query,
34+
);
35+
}
36+
37+
/**
38+
* @internal
39+
*
40+
* @param \Closure(callable(Query|Query\Builder): Sequence<Row>, Driver, Query|Query\Builder): Sequence<Row> $intercept
41+
*/
42+
public static function of(Implementation $connection, \Closure $intercept): self
43+
{
44+
return new self($connection, $intercept);
45+
}
46+
47+
#[\Override]
48+
public function driver(): Driver
49+
{
50+
return $this->connection->driver();
51+
}
52+
}

0 commit comments

Comments
 (0)