Completed
Pull Request — master (#6)
by Kris
02:53
created

Having::count()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 5
rs 10
1
<?php
2
3
/*
4
 *   ____         _          _
5
 *  |  _ \  __ _ | |_  __ _ | |__    __ _  ___   ___
6
 *  | |_) |/ _` || __|/ _` || '_ \  / _` |/ __| / _ \
7
 *  |  __/| (_| || |_| (_| || |_) || (_| |\__ \|  __/
8
 *  |_|    \__,_| \__|\__,_||_.__/  \__,_||___/ \___|
9
 *  
10
 * This file is part of Kristuff\Patabase.
11
 *
12
 * (c) Kristuff <[email protected]>
13
 *
14
 * For the full copyright and license information, please view the LICENSE
15
 * file that was distributed with this source code.
16
 *
17
 * @version    0.5.0
18
 * @copyright  2017-2020 Kristuff
19
 */
20
21
namespace Kristuff\Patabase\Query;
22
23
use Kristuff\Patabase;
24
use Kristuff\Patabase\Query\QueryBuilder;
25
use Kristuff\Patabase\Query\QueryFilter;
26
use Kristuff\Patabase\Query\Select;
27
use Kristuff\Patabase\Driver\DatabaseDriver;
28
29
/**
30
 * Handle SQL HAVING conditions
31
 */
32
class Having extends QueryFilter
33
{
34
35
    /**
36
     * sql base: WHERE or HAVING
37
     *
38
     * @access protected
39
     * @var    string
40
     */
41
    protected $sqlBase = 'HAVING';
42
    
43
    /**
44
     * Add an HAVING function filter 
45
     *
46
     * @access public
47
     * @param  string   $function   The function name without parenthesis  ('SUM', 'COUNT', ...) 
48
     * @param  string   $column     The column name
49
     * @param  string   $operator   The logic operator (example '=', '<', ...)
50
     * @param  mixed    $value      The condition value 
51
     *
52
     * @return $this|QueryBuilder  
53
     */
54
    public function fn($function, $column, $operator, $value)
55
    {
56
        $sql = $function .'('. ($column ? $this->query->escape($column): '') . ') ' . $operator . ' ';
57
        $this->addCondition($function, $sql, $column, $value);
58
        return $this->returnFunction();
59
    }
60
61
    /**
62
     * Add an HAVING COUNT() filter 
63
     *
64
     * @access public
65
     * @param  string   $operator   The logic operator (example '=', '<', ...)
66
     * @param  mixed    $value      The condition value
67
     * 
68
     * @return $this|QueryBuilder  
69
     */
70
    public function count($operator, $value)
71
    {
72
        $sql = 'COUNT(*) '. $operator. ' ';
73
        $this->addCondition('COUNT', $sql, 'COUNT', $value);
74
        return $this->returnFunction();
75
    }
76
77
    /**
78
     * Add an HAVING SUM() filter 
79
     *
80
     * @access public
81
     * @param  string   $column     The column name
82
     * @param  string   $operator   The logic operator (example '=', '<', ...)
83
     * @param  mixed    $value      The condition value
84
     *
85
     * @return $this|QueryBuilder  
86
     */
87
    public function sum($column, $operator, $value)
88
    {
89
        $this->fn('SUM', $column, $operator, $value);
90
        return $this->returnFunction();
91
    }
92
93
}