IteratorImporter::import()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
c 0
b 0
f 0
rs 9.6666
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
3
namespace Graze\DataDb\Import;
4
5
use Graze\DataDb\Dialect\DialectInterface;
6
use Graze\DataDb\Helper\ChunkedIterator;
7
use Graze\DataDb\TableNodeInterface;
8
use Graze\DataFile\Helper\Builder\BuilderAwareInterface;
9
use Graze\DataFile\Helper\Builder\BuilderTrait;
10
use Traversable;
11
12
class IteratorImporter implements IteratorImporterInterface, BuilderAwareInterface
13
{
14
    use BuilderTrait;
15
16
    /** @var TableNodeInterface */
17
    private $table;
18
    /** @var int */
19
    private $batchSize;
20
    /** @var DialectInterface */
21
    private $dialect;
22
23
    /**
24
     * IteratorImporter constructor.
25
     *
26
     * @param TableNodeInterface $table
27
     * @param int                $batchSize
28
     */
29
    public function __construct(TableNodeInterface $table, $batchSize = 100)
30
    {
31
        $this->table = $table;
32
        $this->batchSize = $batchSize;
33
        $this->dialect = $table->getAdapter()->getDialect();
34
    }
35
36
    /**
37
     * @param Traversable $iterator
38
     *
39
     * @return TableNodeInterface
40
     */
41
    public function import(Traversable $iterator)
42
    {
43
        $chunkIterator = $this->getBuilder()->build(ChunkedIterator::class, $iterator, $this->batchSize);
44
        foreach ($chunkIterator as $rows) {
45
            list ($sql, $bind) = $this->dialect->getInsertSyntax($this->table, $rows);
46
            $this->table->getAdapter()->query($sql, $bind);
47
        }
48
        return $this->table;
49
    }
50
}
51