Issues (3641)

Business/Collector/AbstractPdoCollector.php (2 issues)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Zed\Collector\Business\Collector;
9
10
use Generated\Shared\Transfer\LocaleTransfer;
11
use Orm\Zed\Touch\Persistence\SpyTouchQuery;
12
use Propel\Runtime\ActiveQuery\Criteria;
13
use Spryker\Service\UtilDataReader\UtilDataReaderServiceInterface;
14
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface;
15
use Spryker\Zed\Collector\Business\Exporter\Exception\DependencyException;
16
use Spryker\Zed\Collector\CollectorConfig;
17
use Spryker\Zed\Collector\Persistence\Collector\AbstractPdoCollectorQuery;
18
19
abstract class AbstractPdoCollector extends AbstractDatabaseCollector
20
{
21
    /**
22
     * @var \Spryker\Zed\Collector\Persistence\Collector\AbstractPdoCollectorQuery
23
     */
24
    protected $queryBuilder;
25
26
    /**
27
     * @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
28
     */
29
    protected $criteriaBuilder;
30
31
    /**
32
     * @var \Spryker\Service\UtilDataReader\UtilDataReaderServiceInterface
33
     */
34
    protected $utilDataReaderService;
35
36
    /**
37
     * @param \Spryker\Service\UtilDataReader\UtilDataReaderServiceInterface $utilDataReaderService
38
     */
39
    public function __construct(UtilDataReaderServiceInterface $utilDataReaderService)
40
    {
41
        $this->utilDataReaderService = $utilDataReaderService;
42
    }
43
44
    /**
45
     * @param \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface $criteriaBuilder
46
     *
47
     * @return void
48
     */
49
    public function setCriteriaBuilder(CriteriaBuilderInterface $criteriaBuilder)
50
    {
51
        $this->criteriaBuilder = $criteriaBuilder;
52
    }
53
54
    /**
55
     * @throws \Spryker\Zed\Collector\Business\Exporter\Exception\DependencyException
56
     *
57
     * @return void
58
     */
59
    protected function validateDependencies()
60
    {
61
        parent::validateDependencies();
62
        if (!($this->criteriaBuilder instanceof CriteriaBuilderInterface)) {
0 ignored issues
show
$this->criteriaBuilder is always a sub-type of Spryker\Shared\SqlCriter...riteriaBuilderInterface.
Loading history...
63
            throw new DependencyException(sprintf(
64
                'criteriaBuilder does not implement CriteriaBuilder\CriteriaBuilderInterface in %s',
65
                static::class,
66
            ));
67
        }
68
69
        if (!($this->queryBuilder instanceof AbstractPdoCollectorQuery)) {
0 ignored issues
show
$this->queryBuilder is always a sub-type of Spryker\Zed\Collector\Pe...stractPdoCollectorQuery.
Loading history...
70
            throw new DependencyException(sprintf(
71
                'queryBuilder does not implement AbstractPdoCollectorQuery in %s',
72
                static::class,
73
            ));
74
        }
75
    }
76
77
    /**
78
     * @return \Spryker\Service\UtilDataReader\Model\BatchIterator\CountableIteratorInterface
79
     */
80
    protected function generateBatchIterator()
81
    {
82
        return $this->utilDataReaderService->getBatchIteratorOrdered(
83
            $this->criteriaBuilder,
84
            $this->touchQueryContainer,
85
            $this->chunkSize,
86
            CollectorConfig::COLLECTOR_TOUCH_ID,
87
            Criteria::ASC,
88
        );
89
    }
90
91
    /**
92
     * @param \Orm\Zed\Touch\Persistence\SpyTouchQuery $touchQuery
93
     * @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
94
     *
95
     * @return void
96
     */
97
    protected function prepareCollectorScope(SpyTouchQuery $touchQuery, LocaleTransfer $localeTransfer)
98
    {
99
        $this->locale = $localeTransfer;
100
101
        $touchParameters = $this->getTouchQueryParameters($touchQuery);
102
103
        $this->criteriaBuilder
104
            ->setParameterCollection($touchParameters);
105
106
        $this->queryBuilder
107
            ->setStoreTransfer($this->getCurrentStore())
108
            ->setCriteriaBuilder($this->criteriaBuilder)
109
            ->setLocale($localeTransfer)
110
            ->prepare();
111
112
        $this->ensureCollectorColumnsAreSelected();
113
    }
114
115
    /**
116
     * @return void
117
     */
118
    protected function ensureCollectorColumnsAreSelected()
119
    {
120
        $sql = sprintf(
121
            $this->criteriaBuilder->getSqlTemplate(),
122
            CollectorConfig::COLLECTOR_TOUCH_ID,
123
            CollectorConfig::COLLECTOR_RESOURCE_ID,
124
            CollectorConfig::COLLECTOR_STORAGE_KEY,
125
            CollectorConfig::COLLECTOR_SEARCH_KEY,
126
        );
127
128
        $this->criteriaBuilder->sql($sql);
129
    }
130
}
131