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

brick / geo / 14085541468

26 Mar 2025 02:15PM UTC coverage: 63.783% (+0.4%) from 63.411%
14085541468

push

github

BenMorel
Move docker compose to postgis image

1939 of 3040 relevant lines covered (63.78%)

1906.06 hits per line

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

86.49
/src/Engine/Database/Driver/PdoPgsqlDriver.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_pgsql connection.
16
 */
17
final class PdoPgsqlDriver extends AbstractPdoDriver
18
{
19
    #[Override]
20
    public function convertQuery(string|BinaryValue|ScalarValue ...$query) : array
21
    {
22
        $queryString = '';
316✔
23
        $queryParams = [];
316✔
24

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

32
                if (is_int($queryPart->value)) {
80✔
33
                    $queryString .= '::int'; // PARAM_INT seems to have no effect on pdo_pgsql
7✔
34
                    $queryParams[] = [$queryPart->value, PDO::PARAM_INT];
7✔
35
                } elseif (is_float($queryPart->value)) {
73✔
36
                    $queryString .= '::float';
69✔
37
                    $queryParams[] = [$queryPart->value, PDO::PARAM_STR];
69✔
38
                } elseif (is_bool($queryPart->value)) {
9✔
39
                    $queryParams[] = [$queryPart->value, PDO::PARAM_BOOL];
5✔
40
                } else {
41
                    $queryParams[] = [$queryPart->value, PDO::PARAM_STR];
4✔
42
                }
43
            } else {
44
                $queryString .= $queryPart;
316✔
45
            }
46
        }
47

48
        return [$queryString, $queryParams];
316✔
49
    }
50

51
    #[Override]
52
    public function convertBinaryResult(mixed $value) : string
53
    {
54
        if (is_resource($value)) {
124✔
55
            $value = stream_get_contents($value);
124✔
56

57
            if ($value === false) {
124✔
58
                throw new GeometryEngineException('Failed to read stream contents.');
×
59
            }
60

61
            return $value;
124✔
62
        }
63

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

67
    #[Override]
68
    public function convertStringResult(mixed $value) : string
69
    {
70
        if (is_string($value)) {
1✔
71
            return $value;
1✔
72
        }
73

74
        throw GeometryEngineException::unexpectedDatabaseReturnType('string', $value);
×
75
    }
76

77
    #[Override]
78
    public function convertIntResult(mixed $value) : int
79
    {
80
        if (is_int($value)) {
7✔
81
            return $value;
7✔
82
        }
83

84
        throw GeometryEngineException::unexpectedDatabaseReturnType('int', $value);
×
85
    }
86

87
    #[Override]
88
    public function convertFloatResult(mixed $value) : float
89
    {
90
        if (is_numeric($value)) {
46✔
91
            return (float) $value;
45✔
92
        }
93

94
        throw GeometryEngineException::unexpectedDatabaseReturnType('number or numeric string', $value);
1✔
95
    }
96

97
    #[Override]
98
    public function convertBoolResult(mixed $value) : bool
99
    {
100
        if (is_bool($value)) {
163✔
101
            return $value;
163✔
102
        }
103

104
        throw GeometryEngineException::unexpectedDatabaseReturnType('bool', $value);
×
105
    }
106
}
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