Passed
Push — master ( cfb65e...9c8e10 )
by 世昌
03:13
created

TableAccess::run()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
namespace suda\orm;
3
4
use function array_keys;
5
use function func_get_args;
6
use function func_num_args;
7
use ReflectionException;
8
use suda\orm\statement\Statement;
9
use suda\orm\struct\ReadStatement;
10
use suda\orm\middleware\Middleware;
11
use suda\orm\statement\QueryAccess;
12
use suda\orm\struct\QueryStatement;
13
use suda\orm\struct\TableStruct;
14
use suda\orm\struct\WriteStatement;
15
16
/**
17
 * 提供了对数据表的操作
18
 */
19
class TableAccess extends QueryAccess
20
{
21
22
    /**
23
     * 数据源
24
     *
25
     * @var DataSource
26
     */
27
    protected $source;
28
29
    /**
30
     * 表结构
31
     *
32
     * @var TableStruct
33
     */
34
    protected $struct;
35
36
    /**
37
     * 创建数据表
38
     *
39
     * @param DataSource $source
40
     * @param TableStruct $struct
41
     * @param Middleware $middleware
42
     */
43
    public function __construct(TableStruct $struct, DataSource $source, ?Middleware $middleware = null)
44
    {
45
        parent::__construct($source, $middleware);
46
        $this->struct = $struct;
47
    }
48
49
    /**
50
     * 设置中间件
51
     *F
52
     * @param Middleware $middleware
53
     * @return $this
54
     */
55
    public function middleware(Middleware $middleware)
56
    {
57
        return $this->setMiddleware($middleware);
58
    }
59
60
    /**
61
     * 获取表结构
62
     *
63
     * @return TableStruct
64
     */
65
    public function getStruct():TableStruct
66
    {
67
        return $this->struct;
68
    }
69
70
    /**
71
     * 获取表名
72
     *
73
     * @return string
74
     */
75
    public function getName():string
76
    {
77
        return $this->struct->getName();
78
    }
79
80
    /**
81
     * 写
82
     *
83
     * @param string|array $name
84
     * @param mixed $value
85
     * @return WriteStatement
86
     * @throws exception\SQLException
87
     */
88
    public function write($name, $value = null):WriteStatement
89
    {
90
        return (new WriteStatement($this))->write($name, $value);
91
    }
92
93
94
    /**
95
     * 删
96
     *
97
     * @param string|array $where
98
     * @param array $whereParameter
99
     * @return WriteStatement
100
     * @throws exception\SQLException
101
     */
102
    public function delete($where = null, ...$whereParameter):WriteStatement
103
    {
104
        if ($where !== null) {
105
            return (new WriteStatement($this))->delete()->where($where, ...$whereParameter);
106
        }
107
        return (new WriteStatement($this))->delete();
108
    }
109
110
    /**
111
     * 读
112
     *
113
     * @param mixed $fields
114
     * @return ReadStatement
115
     */
116
    public function read($fields):ReadStatement
117
    {
118
        if ($fields === null) {
119
            $fields = array_keys($this->getStruct()->all());
120
        } elseif (func_num_args() > 1) {
121
            $fields = func_get_args();
122
        }
123
        return (new ReadStatement($this))->read($fields);
124
    }
125
126
    /**
127
     * 原始查询
128
     *
129
     * @param string $query
130
     * @param mixed ...$parameter
131
     * @return QueryStatement
132
     */
133
    public function query(string $query, ...$parameter):QueryStatement
134
    {
135
        return (new QueryStatement($this, $query, ...$parameter));
136
    }
137
138
    /**
139
     * 获取数据源
140
     *
141
     * @return  DataSource
142
     */
143
    public function getSource():DataSource
144
    {
145
        return $this->source;
146
    }
147
148
149
    /**
150
     * 设置数据源
151
     *
152
     * @param DataSource $source
153
     * @return  DataSource
154
     */
155
    public function setSource(DataSource $source)
156
    {
157
        return $this->source = $source;
158
    }
159
}
160