• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

brick / geo / 14072842519

26 Mar 2025 12:34AM UTC coverage: 62.112% (-0.02%) from 62.13%
14072842519

push

github

BenMorel
Implement PgsqlDriver (pgsql extension)

0 of 52 new or added lines in 1 file covered. (0.0%)

36 existing lines in 4 files now uncovered.

1882 of 3030 relevant lines covered (62.11%)

1695.42 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.75
/src/Engine/Database/Driver/PdoMysqlDriver.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Brick\Geo\Engine\Database\Driver;
6

7
use Brick\Geo\Engine\Database\Driver\Internal\AbstractPdoDriver;
8
use Brick\Geo\Engine\Database\Query\BinaryValue;
9
use Brick\Geo\Engine\Database\Query\ScalarValue;
10
use Brick\Geo\Exception\GeometryEngineException;
11
use Override;
12
use PDO;
13

14
/**
15
 * Database driver using a pdo_mysql connection.
16
 */
17
final class PdoMysqlDriver extends AbstractPdoDriver
18
{
19
    #[Override]
20
    public function convertQuery(string|BinaryValue|ScalarValue ...$query) : array
21
    {
UNCOV
22
        $queryString = '';
1,184✔
23
        $queryParams = [];
1,184✔
24

UNCOV
25
        foreach ($query as $queryPart) {
1,184✔
UNCOV
26
            if ($queryPart instanceof BinaryValue) {
1,184✔
UNCOV
27
                $queryString .= 'BINARY ?';
1,184✔
UNCOV
28
                $queryParams[] = [$queryPart->value, PDO::PARAM_LOB];
1,184✔
UNCOV
29
            } elseif ($queryPart instanceof ScalarValue) {
1,184✔
UNCOV
30
                $queryString .= '?';
1,184✔
31

UNCOV
32
                if (is_int($queryPart->value)) {
1,184✔
UNCOV
33
                    $queryParams[] = [$queryPart->value, PDO::PARAM_INT];
1,184✔
UNCOV
34
                } elseif (is_bool($queryPart->value)) {
292✔
UNCOV
35
                    $queryParams[] = [$queryPart->value, PDO::PARAM_BOOL];
20✔
36
                } else {
UNCOV
37
                    $queryParams[] = [$queryPart->value, PDO::PARAM_STR];
292✔
38
                }
39
            } else {
UNCOV
40
                $queryString .= $queryPart;
1,184✔
41
            }
42
        }
43

UNCOV
44
        return [$queryString, $queryParams];
1,184✔
45
    }
46

47
    #[Override]
48
    public function convertBinaryResult(mixed $value) : string
49
    {
UNCOV
50
        if (is_string($value)) {
236✔
UNCOV
51
            return $value;
230✔
52
        }
53

UNCOV
54
        throw GeometryEngineException::unexpectedDatabaseReturnType('string', $value);
6✔
55
    }
56

57
    #[Override]
58
    public function convertStringResult(mixed $value) : string
59
    {
UNCOV
60
        if (is_string($value)) {
148✔
UNCOV
61
            return $value;
148✔
62
        }
63

UNCOV
64
        throw GeometryEngineException::unexpectedDatabaseReturnType('string', $value);
×
65
    }
66

67
    #[Override]
68
    public function convertIntResult(mixed $value) : int
69
    {
70
        // TODO check that actually returned as int;
71
        //      maybe checks for all types sent & received for each driver?
72

UNCOV
73
        if (is_int($value)) {
230✔
74
            return $value;
230✔
75
        }
76

UNCOV
77
        throw GeometryEngineException::unexpectedDatabaseReturnType('int', $value);
×
78
    }
79

80
    #[Override]
81
    public function convertFloatResult(mixed $value) : float
82
    {
UNCOV
83
        if (is_numeric($value)) {
110✔
UNCOV
84
            return (float) $value;
92✔
85
        }
86

UNCOV
87
        throw GeometryEngineException::unexpectedDatabaseReturnType('number or numeric string', $value);
18✔
88
    }
89

90
    #[Override]
91
    public function convertBoolResult(mixed $value) : bool
92
    {
UNCOV
93
        return match ($value) {
498✔
UNCOV
94
            0 => false,
174✔
UNCOV
95
            1 => true,
236✔
UNCOV
96
            default => throw GeometryEngineException::unexpectedDatabaseReturnType('0 or 1', $value),
498✔
97
        };
498✔
98
    }
99
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc