Skip to content

Commit 88b2caf

Browse files
committed
Connection: calling query() moved here from Result
reverts bc4bebc
1 parent 9d1d4b1 commit 88b2caf

File tree

3 files changed

+31
-31
lines changed

3 files changed

+31
-31
lines changed

src/Database/Connection.php

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public function beginTransaction(): void
200200
throw new \LogicException(__METHOD__ . '() call is forbidden inside a transaction() callback');
201201
}
202202

203-
$this->query('::beginTransaction');
203+
$this->logOperation($this->getConnection()->beginTransaction(...), new SqlLiteral('BEGIN TRANSACTION'));
204204
}
205205

206206

@@ -214,7 +214,7 @@ public function commit(): void
214214
throw new \LogicException(__METHOD__ . '() call is forbidden inside a transaction() callback');
215215
}
216216

217-
$this->query('::commit');
217+
$this->logOperation($this->getConnection()->commit(...), new SqlLiteral('COMMIT'));
218218
}
219219

220220

@@ -228,7 +228,7 @@ public function rollBack(): void
228228
throw new \LogicException(__METHOD__ . '() call is forbidden inside a transaction() callback');
229229
}
230230

231-
$this->query('::rollBack');
231+
$this->logOperation($this->getConnection()->rollBack(...), new SqlLiteral('ROLLBACK'));
232232
}
233233

234234

@@ -269,15 +269,10 @@ public function transaction(callable $callback): mixed
269269
public function query(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): Result
270270
{
271271
[$this->sql, $params] = $this->preprocess($sql, ...$params);
272-
try {
273-
$result = new Result($this, $this->sql, $params);
274-
} catch (DriverException $e) {
275-
Arrays::invoke($this->onQuery, $this, $e);
276-
throw $e;
277-
}
278-
279-
Arrays::invoke($this->onQuery, $this, $result);
280-
return $result;
272+
return $this->logOperation(
273+
fn() => $this->connection->query($this->sql, $params),
274+
new SqlLiteral($this->sql, $params),
275+
);
281276
}
282277

283278

@@ -303,13 +298,31 @@ public function preprocess(string $sql, ...$params): array
303298
}
304299

305300

301+
private function logOperation(\Closure $callback, SqlLiteral $query): Result
302+
{
303+
try {
304+
$time = microtime(true);
305+
$result = $callback();
306+
$time = microtime(true) - $time;
307+
} catch (DriverException $e) {
308+
$e = $this->convertException($e);
309+
Arrays::invoke($this->onQuery, $this, $e);
310+
throw $e;
311+
}
312+
313+
$result = new Result($this, $query->getSql(), $query->getParameters(), $result, $time);
314+
Arrays::invoke($this->onQuery, $this, $result);
315+
return $result;
316+
}
317+
318+
306319
public function getLastQueryString(): ?string
307320
{
308321
return $this->sql;
309322
}
310323

311324

312-
public function convertException(DriverException $e): DriverException
325+
private function convertException(DriverException $e): DriverException
313326
{
314327
$class = $this->getDatabaseEngine()->classifyException($e);
315328
return $class ? $class::from($e) : $e;

src/Database/Result.php

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,21 @@
1818
*/
1919
class Result implements \Iterator
2020
{
21-
private ?Drivers\Result $result = null;
2221
private Row|false|null $lastRow = null;
2322
private int $lastRowKey = -1;
2423

2524
/** @var Row[] */
2625
private array $rows;
27-
private float $time;
2826
private array $meta;
2927

3028

3129
public function __construct(
3230
private readonly Connection $connection,
3331
private readonly string $queryString,
3432
private readonly array $params,
33+
private readonly ?Drivers\Result $result,
34+
private float $time,
3535
) {
36-
$time = microtime(true);
37-
38-
try {
39-
if (str_starts_with($queryString, '::')) {
40-
$connection->getConnection()->{substr($queryString, 2)}();
41-
} else {
42-
$this->result = $connection->getConnection()->query($queryString, $params);
43-
}
44-
} catch (DriverException $e) {
45-
throw $connection->convertException($e);
46-
}
47-
48-
$this->time = microtime(true) - $time;
4936
}
5037

5138

tests/Database.Tracy/panel.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
77
<td %a%>%A%</td>
88

99
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
10-
<pre class="dump">::beginTransaction</pre>
10+
<pre class="dump">BEGIN TRANSACTION</pre>
1111

1212

1313
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
@@ -40,7 +40,7 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
4040
<td %a%>%A%</td>
4141

4242
<td class="nette-DbConnectionPanel-sql nette-DbConnectionPanel-sql-">
43-
<pre class="dump">::commit</pre>
43+
<pre class="dump">COMMIT</pre>
4444

4545

4646
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
@@ -59,7 +59,7 @@ <h1 title="sqlite::memory:">Queries: 4, time: %a% ms, foo</h1>
5959
<pre class="dump"><strong style="color:blue">SELECT</strong></pre>
6060

6161

62-
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Result.php:%d%" class="tracy-editor">%a%<b>Result.php</b>:%d%</a>
62+
<a class="nette-DbConnectionPanel-source" href="%a%" title="%a%Connection.php:%d%" class="tracy-editor">%a%<b>Connection.php</b>:%d%</a>
6363
<table class="tracy-collapsed nette-DbConnectionPanel-trace">%A%</table>
6464
</td>
6565

0 commit comments

Comments
 (0)