db

Форк
0
/
ColumnExpression.php 
151 строка · 4.0 Кб
1
<?php
2

3
namespace Upside\Db\SQL;
4

5
class ColumnExpression
6
{
7
    protected SQLStatement $sql;
8

9
    public function __construct(SQLStatement $statement)
10
    {
11
        $this->sql = $statement;
12
    }
13

14
    public function __clone()
15
    {
16
        $this->sql = clone $this->sql;
17
    }
18

19
    public function column(string|\Closure|Expression $name, ?string $alias = null): static
20
    {
21
        $this->sql->add_column($name, $alias);
22

23
        return $this;
24
    }
25

26
    /**
27
     * Add multiple columns at once
28
     */
29
    public function columns(array $columns): static
30
    {
31
        foreach ($columns as $name => $alias) {
32
            if (!\is_string($name)) {
33
                $this->column($alias, null);
34
                continue;
35
            }
36
            if (\is_string($alias)) {
37
                $this->column($name, $alias);
38
            } else {
39
                $this->column($alias, $name);
40
            }
41
        }
42

43
        return $this;
44
    }
45

46
    /**
47
     * Add a `COUNT` expression
48
     */
49
    public function count(array|string|Expression $column = '*', ?string $alias = null, bool $distinct = false): static
50
    {
51
        return $this->column((new Expression())->count($column, $distinct), $alias);
52
    }
53

54
    /**
55
     * Add an `AVG` expression
56
     */
57
    public function avg(string|Expression $column, ?string $alias = null, bool $distinct = false): static
58
    {
59
        return $this->column((new Expression())->avg($column, $distinct), $alias);
60
    }
61

62
    /**
63
     * Add a `SUM` expression
64
     */
65
    public function sum(string|\Closure|Expression $column, ?string $alias = null, bool $distinct = false): static
66
    {
67
        return $this->column((new Expression())->sum($column, $distinct), $alias);
68
    }
69

70
    /**
71
     * Add a `MIN` expression
72
     */
73
    public function min(string|Expression $column, ?string $alias = null, bool $distinct = false): static
74
    {
75
        return $this->column((new Expression())->min($column, $distinct), $alias);
76
    }
77

78
    /**
79
     * Add a `MAX` expression
80
     */
81
    public function max(string|Expression $column, ?string $alias = null, bool $distinct = false): static
82
    {
83
        return $this->column((new Expression())->max($column, $distinct), $alias);
84
    }
85

86
    /**
87
     * Add a `UCASE` expression
88
     */
89
    public function ucase(string|Expression $column, ?string $alias = null): static
90
    {
91
        return $this->column((new Expression())->ucase($column), $alias);
92
    }
93

94
    /**
95
     * Add a `LCASE` expression
96
     */
97
    public function lcase(string|Expression $column, ?string $alias = null): static
98
    {
99
        return $this->column((new Expression())->lcase($column), $alias);
100
    }
101

102
    /**
103
     * Add a `MID` expression
104
     *
105
     * @param string|Expression $column Column
106
     * @param int $start (optional) Substring start
107
     * @param int $length (optional) Substring length
108
     */
109
    public function mid($column, int $start = 1, ?string $alias = null, int $length = 0): static
110
    {
111
        return $this->column((new Expression())->mid($column, $start, $length), $alias);
112
    }
113

114
    /**
115
     * Add a `LEN` expression
116
     *
117
     * @param string|Expression $column Column
118
     */
119
    public function len($column, ?string $alias = null): static
120
    {
121
        return $this->column((new Expression())->len($column), $alias);
122
    }
123

124
    /**
125
     * Add a `FORMAT` expression
126
     *
127
     * @param string|Expression $column Column
128
     */
129
    public function round($column, int $decimals = 0, ?string $alias = null): static
130
    {
131
        return $this->column((new Expression())->format($column, $decimals), $alias);
132
    }
133

134
    /**
135
     * Add a `FORMAT` expression
136
     *
137
     * @param string|Expression $column Column
138
     */
139
    public function format($column, int $format, ?string $alias = null): static
140
    {
141
        return $this->column((new Expression())->format($column, $format), $alias);
142
    }
143

144
    /**
145
     * Add a `NOW` expression
146
     */
147
    public function now(?string $alias = null): static
148
    {
149
        return $this->column((new Expression())->now(), $alias);
150
    }
151
}
152

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.