Completed
Push — master ( b0b60e...78477d )
by Beniamin
02:33
created

SelectQueryCompiler::compile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 1

Importance

Changes 11
Bugs 0 Features 6
Metric Value
c 11
b 0
f 6
dl 0
loc 19
ccs 14
cts 14
cp 1
rs 9.4285
cc 1
eloc 13
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Phuria\QueryBuilder\QueryCompiler;
4
5
use Phuria\QueryBuilder\Parser\QueryClausesParser;
6
use Phuria\QueryBuilder\Parser\ReferenceParser;
7
use Phuria\QueryBuilder\QueryBuilder;
8
use Phuria\QueryBuilder\QueryClauses;
9
10
/**
11
 * @author Beniamin Jonatan Šimko <[email protected]>
12
 */
13
class SelectQueryCompiler implements QueryCompilerInterface
14
{
15
    /**
16
     * @inheritdoc
17
     */
18 20
    public function canHandleQuery(QueryBuilder $qb)
19
    {
20 20
        return QueryClauses::QUERY_SELECT === $qb->getQueryClauses()->guessQueryType();
21
    }
22
23
    /**
24
     * @inheritdoc
25
     */
26 19
    public function compile(QueryBuilder $qb)
27
    {
28 19
        $clausesParser = new QueryClausesParser($qb);
29
30 19
        $rawSQL = implode(' ', array_filter([
31 19
            $clausesParser->parseSelectClause(),
32 19
            $clausesParser->parseFromClause(),
33 19
            $clausesParser->parseJoinClause(),
34 19
            $clausesParser->parseWhereClause(),
35 19
            $clausesParser->parseGroupByClause(),
36 19
            $clausesParser->parseHavingClause(),
37 19
            $clausesParser->parseOrderByClause(),
38 19
            $clausesParser->parseLimitClause()
39 19
        ]));
40
41 19
        $referenceParser = new ReferenceParser($rawSQL, $qb->getReferenceManager());
42
43 19
        return $referenceParser->parseSQL();
44
    }
45
}