1: <?php
2:
3: namespace PHPixie\Database\Type\SQL\Parser;
4:
5: abstract class Conditions
6: {
7: protected $database;
8: protected $operatorParser;
9:
10: public function __construct($database, $operatorParser)
11: {
12: $this->database = $database;
13: $this->operatorParser = $operatorParser;
14: }
15:
16: public function parse($group)
17: {
18: $expr = $this->database->sqlExpression();
19: $this->appendGroup($group, $expr);
20:
21: return $expr;
22: }
23:
24: protected function appendCondition($condition, $expr)
25: {
26: if ($condition->isNegated()) {
27: $expr->sql .= 'NOT ';
28: }
29:
30: if ($condition instanceof \PHPixie\Database\Conditions\Condition\Field\Operator) {
31: $expr->append($this->operatorParser->parse($condition));
32:
33: } elseif ($condition instanceof \PHPixie\Database\Conditions\Condition\Collection\Group || $condition instanceof \PHPixie\Database\Conditions\Condition\Collection\Placeholder) {
34: $expr->sql.= "( ";
35: $this->appendGroup($condition->conditions(), $expr);
36: $expr->sql.= " )";
37:
38: } else {
39: throw new \PHPixie\Database\Exception\Parser("Unexpected condition type encountered");
40: }
41: }
42:
43: protected function appendGroup($group, $expr)
44: {
45: foreach ($group as $key=>$condition) {
46: if ($key > 0)
47: $expr->sql.= ' '.strtoupper($condition->logic()).' ';
48: $this->appendCondition($condition, $expr);
49: }
50: }
51:
52: }
53: