DBALMysqlResourceInsertNoLoad   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 90.32%

Importance

Changes 0
Metric Value
dl 0
loc 56
c 0
b 0
f 0
wmc 7
lcom 1
cbo 2
ccs 28
cts 31
cp 0.9032
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B loadData() 0 48 7
1
<?php
2
3
namespace Maketok\DataMigration\Storage\Db;
4
5
class DBALMysqlResourceInsertNoLoad extends DBALMysqlResource
6
{
7
    /**
8
     * {@inheritdoc}
9
     * override, add support for inserts
10
     * if server does not support Local Infile option
11
     */
12 2
    public function loadData(
0 ignored issues
show
Complexity introduced by
This method has 10 parameters which exceeds the configured maximum of 10.

A high number of parameters is generally an indication that you should consider creating a dedicated object for the parameters.

Let’s take a look at an example:

<?php

class SomeClass
{
    public function doSomething(A $a, B $b, C $c, D $d, E $e, F $f)
    {
        // ..
    }
}

class AnotherClass
{
    public function doSomething(A $a, B $b, C $c, D $d, E $e, F $f)
    {
        // ...
    }
}

could be refactored to:

class Context
{
    private $a;
    private $b;
    private $c;
    private $d;
    private $e;
    private $f;

    public function __construct(A $a, B $b, C $c, D $d, E $e, F $f)
    {
        // ...
    }
}

class SomeClass
{
    public function doSomething(Context $context)
    {
        // ...
    }
}

class AnotherClass
{
    public function doSomething(Context $context)
    {
        // ...
    }
}
Loading history...
13
        $table,
14
        $file,
15
        $local = false,
16
        array $columns = [],
17
        array $set = [],
18
        $delimiter = ",",
19
        $enclosure = '"',
20
        $escape = '\\',
21
        $termination = '\n',
22
        $optionallyEnclosed = true
23
    ) {
24 2
        $csv = new \SplFileObject($file, 'r');
25 2
        $table = $this->connection->quoteIdentifier($table);
26 2
        $columnsPart = '';
27 2
        if (!empty($columns)) {
28
            $columns = array_map([$this->connection, 'quoteIdentifier'], $columns);
29
            $columnsPart = '(' . implode(',', $columns) . ')';
30
        }
31 2
        $valuesPart = '';
32 2
        $row = $csv->fgetcsv($delimiter, $enclosure, $escape);
33 2
        $csv->rewind();
34 2
        if (!empty($row)) {
35
            $row = array_map(function () {
36 2
                return '?';
37 2
            }, $row);
38 2
            $valuesPart = '(' . implode(',', $row) . ')';
39 2
        }
40
        $sql = <<<MYSQL
41 2
INSERT INTO $table $columnsPart
42 2
VALUES $valuesPart
43 2
MYSQL;
44 2
        $count = 0;
45
        while (
46 2
            ($row = $csv->fgetcsv($delimiter, $enclosure, $escape)) !== null &&
47 2
            $row != [null] &&
48
            $row !== false
49 2
        ) {
50 2
            $row = array_map(function ($var) {
51 2
                if ($var === '\N') {
52 1
                    return null;
53
                }
54 2
                return $var;
55 2
            }, $row);
56 2
            $count += $this->connection->executeUpdate($sql, $row);
57 2
        }
58 2
        return $count;
59
    }
60
}
61