Passed
Push — dbal ( 52c0e6...62c715 )
by Greg
05:49
created

Schema::date()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2022 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\DB\Schema;
21
22
/**
23
 * Factory class for creating columns.
24
 */
25
class Schema
26
{
27
    public function __construct(private array $tables = [])
28
    {
29
    }
30
31
    public function addTable(Table $table): self
32
    {
33
        $this->tables[] = $table;
34
35
        return $this;
36
    }
37
38
    /**
39
     * @param string $name
40
     * @param array  $components
41
     *
42
     * @return Table
43
     */
44
    public static function table(string $name, array $components): Table
45
    {
46
        return new Table(name: $name, components: $components);
47
    }
48
49
    /**
50
     * @param string $name
51
     *
52
     * @return IntegerColumn
53
     */
54
    public static function bigInteger(string $name): IntegerColumn
55
    {
56
        return new IntegerColumn(name: $name, bits: 64);
57
    }
58
59
    /**
60
     * @param string $name
61
     * @param int    $bits
62
     *
63
     * @return IntegerColumn
64
     */
65
    public static function bit(string $name, int $bits = 1): IntegerColumn
66
    {
67
        return new IntegerColumn(name: $name, bits: $bits);
68
    }
69
70
    /**
71
     * @param string $name
72
     * @param int    $length
73
     *
74
     * @return BlobColumn
75
     */
76
    public static function blob(string $name, int $length = 4): BlobColumn
77
    {
78
        return new BlobColumn(name: $name, length: $length);
79
    }
80
81
    /**
82
     * @param string $name
83
     *
84
     * @return BooleanColumn
85
     */
86
    public static function boolean(string $name): BooleanColumn
87
    {
88
        return new BooleanColumn(name: $name);
89
    }
90
91
    /**
92
     * @param string $name
93
     * @param int    $length
94
     *
95
     * @return CharacterColumn
96
     */
97
    public static function char(string $name, int $length): CharacterColumn
98
    {
99
        return new CharacterColumn(name: $name, length: $length, varying: false, national: false);
100
    }
101
102
    /**
103
     * @param string $name
104
     *
105
     * @return DateColumn
106
     */
107
    public static function date(string $name): DateColumn
108
    {
109
        return new DateColumn(name: $name);
110
    }
111
112
    /**
113
     * @param string $name
114
     * @param int    $length
115
     *
116
     * @return DatetimeColumn
117
     */
118
    public static function datetime(string $name, int $length = 0): DatetimeColumn
119
    {
120
        return new DatetimeColumn(name: $name, length: $length);
121
    }
122
123
    /**
124
     * @param string $name
125
     * @param int    $precision
126
     * @param int    $scale
127
     *
128
     * @return DecimalColumn
129
     */
130
    public static function decimal(string $name, int $precision, int $scale): DecimalColumn
131
    {
132
        return new DecimalColumn(name: $name, precision: $precision, scale: $scale);
133
    }
134
135
    /**
136
     * @param string $name
137
     * @param int    $precision_bits
138
     *
139
     * @return FloatColumn
140
     */
141
    public static function double(string $name, int $precision_bits=53): FloatColumn
142
    {
143
        return new FloatColumn(name: $name, precision_bits: $precision_bits);
144
    }
145
146
    /**
147
     * @param string $name
148
     * @param int    $precision_bits
149
     *
150
     * @return FloatColumn
151
     */
152
    public static function float(string $name, int $precision_bits = 23): FloatColumn
153
    {
154
        return new FloatColumn(name: $name, precision_bits: $precision_bits);
155
    }
156
157
    /**
158
     * @param string $name
159
     * @param int    $srid
160
     *
161
     * @return GeometryColumn
162
     */
163
    public static function geometry(string $name, int $srid = 0): GeometryColumn
164
    {
165
        return new GeometryColumn(name: $name, srid: $srid);
166
    }
167
168
    /**
169
     * @param string $name
170
     * @param int    $srid
171
     *
172
     * @return GeometrycollectionColumn
173
     */
174
    public static function geometrycollection(string $name, int $srid = 0): GeometrycollectionColumn
175
    {
176
        return new GeometrycollectionColumn(name: $name, srid: $srid);
177
    }
178
179
    /**
180
     * @param string $name
181
     *
182
     * @return IntegerColumn
183
     */
184
    public static function integer(string $name): IntegerColumn
185
    {
186
        return new IntegerColumn(name: $name, bits: 32);
187
    }
188
189
    /**
190
     * @param string $name
191
     *
192
     * @return JsonColumn
193
     */
194
    public static function json(string $name): JsonColumn
195
    {
196
        return new JsonColumn(name: $name);
197
    }
198
199
    /**
200
     * @param string $name
201
     * @param int    $srid
202
     *
203
     * @return LinestringColumn
204
     */
205
    public static function linestring(string $name, int $srid = 0): LinestringColumn
206
    {
207
        return new LinestringColumn(name: $name, srid: $srid);
208
    }
209
210
    /**
211
     * @param string $name
212
     *
213
     * @return IntegerColumn
214
     */
215
    public static function mediumInteger(string $name): IntegerColumn
216
    {
217
        return new IntegerColumn(name: $name, bits: 24);
218
    }
219
220
    /**
221
     * @param string $name
222
     * @param int    $srid
223
     *
224
     * @return MultilinestringColumn
225
     */
226
    public static function multilinestring(string $name, int $srid = 0): MultilinestringColumn
227
    {
228
        return new MultilinestringColumn(name: $name, srid: $srid);
229
    }
230
231
    /**
232
     * @param string $name
233
     * @param int    $srid
234
     *
235
     * @return MultipointColumn
236
     */
237
    public static function multipoint(string $name, int $srid = 0): MultipointColumn
238
    {
239
        return new MultipointColumn(name: $name, srid: $srid);
240
    }
241
242
    /**
243
     * @param string $name
244
     * @param int    $srid
245
     *
246
     * @return MultipolygonColumn
247
     */
248
    public static function multipolygon(string $name, int $srid = 0): MultipolygonColumn
249
    {
250
        return new MultipolygonColumn(name: $name, srid: $srid);
251
    }
252
253
    /**
254
     * @param string $name
255
     * @param int    $length
256
     *
257
     * @return CharacterColumn
258
     */
259
    public static function nChar(string $name, int $length): CharacterColumn
260
    {
261
        return new CharacterColumn(name: $name, length: $length, varying: false, national: true);
262
    }
263
264
    /**
265
     * @param string $name
266
     * @param int    $length
267
     *
268
     * @return CharacterColumn
269
     */
270
    public static function nVarchar(string $name, int $length): CharacterColumn
271
    {
272
        return new CharacterColumn(name: $name, length: $length, varying: true, national: true);
273
    }
274
275
    /**
276
     * @param string $name
277
     * @param int    $srid
278
     *
279
     * @return PointColumn
280
     */
281
    public static function point(string $name, int $srid = 0): PointColumn
282
    {
283
        return new PointColumn(name: $name, srid: $srid);
284
    }
285
286
    /**
287
     * @param string $name
288
     * @param int    $srid
289
     *
290
     * @return PolygonColumn
291
     */
292
    public static function polygon(string $name, int $srid = 0): PolygonColumn
293
    {
294
        return new PolygonColumn(name: $name, srid: $srid);
295
    }
296
297
    /**
298
     * @param string $name
299
     *
300
     * @return IntegerColumn
301
     */
302
    public static function smallInteger(string $name): IntegerColumn
303
    {
304
        return new IntegerColumn(name: $name, bits: 16);
305
    }
306
307
    /**
308
     * @param string $name
309
     * @param int    $length
310
     *
311
     * @return TextColumn
312
     */
313
    public static function text(string $name, int $length = 4): TextColumn
314
    {
315
        return new TextColumn(name: $name, length: $length);
316
    }
317
318
    /**
319
     * @param string $name
320
     *
321
     * @return TimeColumn
322
     */
323
    public static function time(string $name): TimeColumn
324
    {
325
        return new TimeColumn(name: $name);
326
    }
327
328
    /**
329
     * @param string $name
330
     * @param int    $length
331
     *
332
     * @return TimestampColumn
333
     */
334
    public static function timestamp(string $name, int $length = 0): TimestampColumn
335
    {
336
        return new TimestampColumn(name: $name, length: $length);
337
    }
338
339
    /**
340
     * @param string $name
341
     *
342
     * @return IntegerColumn
343
     */
344
    public static function tinyInteger(string $name): IntegerColumn
345
    {
346
        return new IntegerColumn(name: $name, bits: 8);
347
    }
348
349
    /**
350
     * @param string $name
351
     * @param int    $length
352
     *
353
     * @return CharacterColumn
354
     */
355
    public static function varchar(string $name, int $length): CharacterColumn
356
    {
357
        return new CharacterColumn(name: $name, length: $length, varying: true, national: false);
358
    }
359
360
    /**
361
     * @param string $name
362
     *
363
     * @return YearColumn
364
     */
365
    public static function year(string $name): YearColumn
366
    {
367
        return new YearColumn(name: $name);
368
    }
369
370
    /**
371
     * @param array  $columns
372
     * @param string $name
373
     *
374
     * @return PrimaryKey
375
     */
376
    public static function primaryKey(array $columns, string $name = ''): PrimaryKey
377
    {
378
        return new PrimaryKey(name: $name, columns: $columns);
379
    }
380
381
    /**
382
     * @param array  $columns
383
     * @param string $name
384
     *
385
     * @return Index
386
     */
387
    public static function index(array $columns, string $name = ''): Index
388
    {
389
        return new Index(name: $name, columns: $columns);
390
    }
391
392
    /**
393
     * @param array  $columns
394
     * @param string $name
395
     *
396
     * @return UniqueIndex
397
     */
398
    public static function uniqueIndex(array $columns, string $name = ''): UniqueIndex
399
    {
400
        return new UniqueIndex(name: $name, columns: $columns);
401
    }
402
403
    /**
404
     * @param array  $local_columns
405
     * @param string $foreign_table
406
     * @param array  $foreign_columns
407
     *
408
     * @return ForeignKey
409
     */
410
    public static function foreignKey(array $local_columns, string $foreign_table, array $foreign_columns): ForeignKey
411
    {
412
        return new ForeignKey(local_columns: $local_columns, foreign_table: $foreign_table, foreign_columns: $foreign_columns);
413
    }
414
}
415