Test Failed
Push — master ( a8d324...004bd9 )
by Def
33:17 queued 29:47
created

CommandPDO::insertWithReturningPks()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 2
dl 0
loc 12
ccs 7
cts 7
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Db\Pgsql;
6
7
use Exception;
8
use Throwable;
9
use Yiisoft\Db\Driver\PDO\AbstractCommandPDO;
10
use Yiisoft\Db\Driver\PDO\ConnectionPDOInterface;
11
use Yiisoft\Db\Exception\ConvertException;
12
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;
13
14
use function is_array;
15
16
final class CommandPDO extends AbstractCommandPDO
17
{
18
    /**
19
     * @inheritDoc
20
     */
21 2
    public function insertWithReturningPks(string $table, array $columns): bool|array
22
    {
23 2
        $params = [];
24 2
        $sql = $this->queryBuilder()->insertWithReturningPks($table, $columns, $params);
0 ignored issues
show
Bug introduced by
The method insertWithReturningPks() does not exist on Yiisoft\Db\QueryBuilder\QueryBuilderInterface. Did you maybe mean insert()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

24
        $sql = $this->queryBuilder()->/** @scrutinizer ignore-call */ insertWithReturningPks($table, $columns, $params);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
25
26 2
        $this->setSql($sql)->bindValues($params);
27 2
        $this->prepare(false);
28
29
        /** @var mixed $queryOne */
30 2
        $queryOne = $this->queryOne();
31
32 2
        return is_array($queryOne) ? $queryOne : false;
33
    }
34
35 267
    public function queryBuilder(): QueryBuilderInterface
36
    {
37 267
        return $this->db->getQueryBuilder();
38
    }
39
40
    /**
41
     * @psalm-suppress UnusedClosureParam
42
     *
43
     * @throws \Yiisoft\Db\Exception\Exception
44
     * @throws Throwable
45
     */
46 244
    protected function internalExecute(string|null $rawSql): void
47
    {
48 244
        $attempt = 0;
49
50 244
        while (true) {
51
            try {
52
                if (
53 244
                    ++$attempt === 1
54 244
                    && $this->isolationLevel !== null
55 244
                    && $this->db->getTransaction() === null
56
                ) {
57 1
                    $this->db->transaction(
58 1
                        fn (ConnectionPDOInterface $db) => $this->internalExecute($rawSql),
0 ignored issues
show
Unused Code introduced by
The parameter $db is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

58
                        fn (/** @scrutinizer ignore-unused */ ConnectionPDOInterface $db) => $this->internalExecute($rawSql),

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
59 1
                        $this->isolationLevel
60 1
                    );
61
                } else {
62 244
                    $this->pdoStatement?->execute();
63
                }
64 244
                break;
65 8
            } catch (Exception $e) {
66 8
                $rawSql = $rawSql ?: $this->getRawSql();
67 8
                $e = (new ConvertException($e, $rawSql))->run();
68
69 8
                if ($this->retryHandler === null || !($this->retryHandler)($e, $attempt)) {
70 8
                    throw $e;
71
                }
72
            }
73
        }
74
    }
75
}
76