Failed Conditions
Pull Request — 2.10.x (#3977)
by Grégoire
19:24
created

Connection::lastInsertId()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2.032

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 7
dl 0
loc 12
ccs 8
cts 10
cp 0.8
rs 10
c 1
b 0
f 0
cc 2
nc 2
nop 1
crap 2.032
1
<?php
2
3
namespace Doctrine\DBAL\Driver\PDOSqlsrv;
4
5
use Doctrine\DBAL\Driver\PDOConnection;
6
use Doctrine\DBAL\ParameterType;
7
use PDO;
8
use function assert;
9
use function is_string;
10
use function strpos;
11
use function substr;
12
13
/**
14
 * Sqlsrv Connection implementation.
15
 */
16
class Connection extends PDOConnection
17
{
18
    /**
19
     * {@inheritdoc}
20
     */
21 42
    public function __construct($dsn, $user = null, $password = null, ?array $options = null)
22
    {
23 42
        parent::__construct($dsn, $user, $password, $options);
24 42
        $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Statement::class, []]);
25 42
    }
26
27
    /**
28
     * {@inheritDoc}
29
     */
30 3
    public function lastInsertId($name = null)
31
    {
32 3
        if ($name === null) {
33 3
            return parent::lastInsertId($name);
34
        }
35
36 2
        $stmt = $this->prepare('SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?');
37 2
        $stmt->execute([$name]);
38 2
        $lastInsertId = $stmt->fetchColumn();
39 2
        assert(is_string($lastInsertId));
40
41 2
        return $lastInsertId;
42
    }
43
44
    /**
45
     * {@inheritDoc}
46
     */
47 31
    public function quote($value, $type = ParameterType::STRING)
48
    {
49 31
        $val = parent::quote($value, $type);
50
51
        // Fix for a driver version terminating all values with null byte
52 31
        if (strpos($val, "\0") !== false) {
53
            $val = substr($val, 0, -1);
54
        }
55
56 31
        return $val;
57
    }
58
}
59