Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
GeneralizedSql
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 stringify
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 getRawSql
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 newFromQuery
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3 * @license GPL-2.0-or-later
4 * @file
5 */
6namespace Wikimedia\Rdbms;
7
8/**
9 * Lazy-loaded wrapper for simplification and scrubbing of SQL queries for profiling
10 *
11 * @since 1.34
12 * @ingroup Profiler
13 * @ingroup Database
14 */
15class GeneralizedSql {
16    /** @var string */
17    private $rawSql;
18    /** @var string */
19    private $prefix;
20
21    /** @var string|null */
22    private $genericSql;
23
24    /**
25     * @param string $rawSql
26     * @param string $prefix
27     */
28    public function __construct( $rawSql, $prefix ) {
29        $this->rawSql = $rawSql;
30        $this->prefix = $prefix;
31    }
32
33    /**
34     * @return string
35     */
36    public function stringify() {
37        if ( $this->genericSql !== null ) {
38            return $this->genericSql;
39        }
40
41        $this->genericSql = $this->prefix .
42            substr( QueryBuilderFromRawSql::generalizeSQL( $this->rawSql ), 0, 255 );
43
44        return $this->genericSql;
45    }
46
47    /**
48     * @return string
49     */
50    public function getRawSql() {
51        return $this->rawSql;
52    }
53
54    /**
55     * @param Query $query
56     * @param string $prefix
57     * @return self
58     */
59    public static function newFromQuery( Query $query, $prefix ) {
60        $generalizedSql = new self( $query->getSQL(), $prefix );
61
62        $cleanedSql = $query->getCleanedSql();
63        if ( $cleanedSql != '' ) {
64            // Generalized SQL already provided; no need to use regexes
65            $generalizedSql->genericSql = $prefix . $cleanedSql;
66        }
67
68        return $generalizedSql;
69    }
70}