DebugStack.php 1.11 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\DBAL\Logging;

5 6
use function microtime;

7
/**
Benjamin Morel's avatar
Benjamin Morel committed
8
 * Includes executed SQLs in a Debug Stack.
9 10
 */
class DebugStack implements SQLLogger
11
{
Benjamin Morel's avatar
Benjamin Morel committed
12 13 14
    /**
     * Executed SQL queries.
     *
15
     * @var array<int, array<string, mixed>>
Benjamin Morel's avatar
Benjamin Morel committed
16
     */
17
    public $queries = [];
18

Benjamin Morel's avatar
Benjamin Morel committed
19 20 21
    /**
     * If Debug Stack is enabled (log queries) or not.
     *
22
     * @var bool
Benjamin Morel's avatar
Benjamin Morel committed
23
     */
24 25
    public $enabled = true;

26
    /** @var float|null */
27 28
    public $start = null;

29
    /** @var int */
30 31
    public $currentQuery = 0;

32 33 34
    /**
     * {@inheritdoc}
     */
35
    public function startQuery($sql, ?array $params = null, ?array $types = null)
36
    {
37 38
        if (! $this->enabled) {
            return;
39
        }
40 41 42

        $this->start                          = microtime(true);
        $this->queries[++$this->currentQuery] = ['sql' => $sql, 'params' => $params, 'types' => $types, 'executionMS' => 0];
43
    }
44 45 46 47 48 49

    /**
     * {@inheritdoc}
     */
    public function stopQuery()
    {
50 51
        if (! $this->enabled) {
            return;
52
        }
53 54

        $this->queries[$this->currentQuery]['executionMS'] = microtime(true) - $this->start;
55
    }
56
}