Completed
Push — master ( 3ffd7e...e292fe )
by Ron
02:37
created

ConditionBuilder::buildCondition()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 4
nc 1
nop 4
1
<?php
2
namespace Kir\MySQL\Builder\Internal;
3
4
use Kir\MySQL\Database;
5
6
final class ConditionBuilder {
7
	/**
8
	 * @param Database $db
9
	 * @param string $query
10
	 * @param array $conditions
11
	 * @param string $token
12
	 * @return string
13
	 */
14
	public static function build(Database $db, $query, array $conditions, $token) {
15
		if(!count($conditions)) {
16
			return $query;
17
		}
18
		$query .= "{$token}\n";
19
		$arr = [];
20
		foreach($conditions as $condition) {
21
			list($expression, $arguments) = $condition;
22
			if(is_array($expression)) {
23
				foreach($expression as $key => $value) {
24
					$arr = self::buildCondition($arr, "`{$key}`=?", [$value], $db);
25
				}
26
			} else {
27
				$arr = self::buildCondition($arr, $expression, $arguments, $db);
28
			}
29
		}
30
		$query .= join("\n\tAND\n", $arr);
31
		return "{$query}\n";
32
	}
33
34
	/**
35
	 * @param array $conditions
36
	 * @param mixed $expression
37
	 * @param mixed $arguments
38
	 * @param Database $db
39
	 * @return array
40
	 */
41
	private static function buildCondition(array $conditions, $expression, $arguments, Database $db) {
42
		$expr = $db->quoteExpression($expression, $arguments);
43
		$conditions[] = "\t({$expr})";
44
		return $conditions;
45
	}
46
}
47