QueryUpdate   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 6
eloc 19
c 2
b 0
f 0
dl 0
loc 88
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A execute() 0 6 3
A getSyntax() 0 53 2
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * Author: Adrian Dumitru
5
 * Date: 4/22/2017 4:18 AM
6
 */
7
8
namespace Qpdb\QueryBuilder\Statements;
9
10
11
use Qpdb\PdoWrapper\PdoWrapperService;
12
use Qpdb\QueryBuilder\Dependencies\QueryException;
13
use Qpdb\QueryBuilder\Dependencies\QueryStructure;
14
use Qpdb\QueryBuilder\QueryBuild;
15
use Qpdb\QueryBuilder\Traits\DefaultPriority;
16
use Qpdb\QueryBuilder\Traits\Ignore;
17
use Qpdb\QueryBuilder\Traits\Limit;
18
use Qpdb\QueryBuilder\Traits\LowPriority;
19
use Qpdb\QueryBuilder\Traits\OrderBy;
20
use Qpdb\QueryBuilder\Traits\Replacement;
21
use Qpdb\QueryBuilder\Traits\SetFields;
22
use Qpdb\QueryBuilder\Traits\Utilities;
23
use Qpdb\QueryBuilder\Traits\Where;
24
use Qpdb\QueryBuilder\Traits\WhereAndHavingBuilder;
25
26
class QueryUpdate extends QueryStatement implements QueryStatementInterface
27
{
28
29
	use Limit, Where, WhereAndHavingBuilder, Replacement, OrderBy, SetFields, Ignore, DefaultPriority, LowPriority, Utilities;
30
31
	/**
32
	 * @var string
33
	 */
34
	protected $statement = self::QUERY_STATEMENT_UPDATE;
35
36
37
	/**
38
	 * QueryUpdate constructor.
39
	 * @param QueryBuild $queryBuild
40
	 * @param string $table
41
	 * @throws QueryException
42
	 */
43
	public function __construct( QueryBuild $queryBuild, $table = null )
44
	{
45
		parent::__construct( $queryBuild, $table );
46
	}
47
48
	public function getSyntax( $replacement = self::REPLACEMENT_NONE )
49
	{
50
51
		$syntax = array();
52
53
		/**
54
		 *  Explain
55
		 */
56
		$syntax[] = $this->getExplainSyntax();
57
58
		/**
59
		 * UPDATE statement
60
		 */
61
		$syntax[] = $this->statement;
62
63
		/**
64
		 * PRIORITY
65
		 */
66
		$syntax[] = $this->queryStructure->getElement( QueryStructure::PRIORITY );
67
68
		/**
69
		 * IGNORE clause
70
		 */
71
		$syntax[] = $this->queryStructure->getElement( QueryStructure::IGNORE ) ? 'IGNORE' : '';
72
73
		/**
74
		 * TABLE update
75
		 */
76
		$syntax[] = $this->queryStructure->getElement( QueryStructure::TABLE );
77
78
		/**
79
		 * FIELDS update
80
		 */
81
		$syntax[] = $this->getSettingFieldsSyntax();
82
83
		/**
84
		 * WHERE clause
85
		 */
86
		$syntax[] = $this->getWhereSyntax();
87
88
		/**
89
		 * ORDER BY clause
90
		 */
91
		$syntax[] = $this->getOrderBySyntax();
92
93
		/**
94
		 * LIMIT clause
95
		 */
96
		$syntax[] = $this->getLimitSyntax();
97
98
		$syntax = implode( ' ', $syntax );
99
100
		return $this->getSyntaxReplace( $syntax, $replacement );
101
102
	}
103
104
	/**
105
	 * @return array|int|null
106
	 * @throws QueryException
107
	 */
108
	public function execute()
109
	{
110
		if ( $this->queryStructure->getElement( ( QueryStructure::WHERE_TRIGGER ) ) && !count( $this->queryStructure->getElement( QueryStructure::WHERE ) ) )
111
			throw new QueryException( 'Where clause is required for this statement!', QueryException::QUERY_ERROR_DELETE_NOT_FILTER );
112
113
		return PdoWrapperService::getInstance()->query($this->getSyntax(), $this->queryStructure->getElement(QueryStructure::BIND_PARAMS))->rowCount();
114
	}
115
}