summaryrefslogtreecommitdiff
path: root/libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php
blob: 300ea9b0facc123763f7a0e9e845583accf4cc6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php

namespace PicoDb\Builder;

/**
 * Class UpdateBuilder
 *
 * @package PicoDb\Builder
 * @author  Frederic Guillot
 */
class UpdateBuilder extends BaseBuilder
{
    /**
     * @var string[]
     */
    protected $sumColumns = array();

    /**
     * Set columns name
     *
     * @access public
     * @param  string[] $columns
     * @return $this
     */
    public function withSumColumns(array $columns)
    {
        $this->sumColumns = $columns;
        return $this;
    }

    /**
     * Build SQL
     *
     * @access public
     * @return string
     */
    public function build()
    {
        $columns = array();

        foreach ($this->columns as $column) {
            $columns[] = $this->db->escapeIdentifier($column).'=?';
        }

        foreach ($this->sumColumns as $column) {
            $columns[] = $this->db->escapeIdentifier($column).'='.$this->db->escapeIdentifier($column).' + ?';
        }

        return sprintf(
            'UPDATE %s SET %s %s',
            $this->db->escapeIdentifier($this->table),
            implode(', ', $columns),
            $this->conditionBuilder->build()
        );
    }
}