|
4 | 4 |
|
5 | 5 | use Illuminate\Support\Facades\DB; |
6 | 6 | use Illuminate\Support\Str; |
| 7 | +use LaracraftTech\LaravelSchemaRules\Contracts\SchemaRulesResolverInterface; |
7 | 8 | use stdClass; |
8 | 9 |
|
9 | | -class SchemaRulesResolverPgSql implements SchemaRulesResolverInterface |
| 10 | +class SchemaRulesResolverPgSql extends BaseSchemaRulesResolver implements SchemaRulesResolverInterface |
10 | 11 | { |
11 | | - private string $table; |
12 | | - private array $columns; |
13 | 12 |
|
14 | 13 | public static array $integerTypes = [ |
15 | 14 | 'smallint' => ['-32768', '32767'], |
16 | 15 | 'integer' => ['-2147483648', '2147483647'], |
17 | 16 | 'bigint' => ['-9223372036854775808', '9223372036854775807'], |
18 | 17 | ]; |
19 | 18 |
|
20 | | - public function __construct(string $table, array $columns = []) |
21 | | - { |
22 | | - $this->table = $table; |
23 | | - $this->columns = $columns; |
24 | | - } |
25 | | - |
26 | | - public function generate(): array |
27 | | - { |
28 | | - $tableColumns = $this->getColumnsDefinitionsFromTable(); |
29 | | - |
30 | | - $skip_columns = config('schema-rules.skip_columns'); |
31 | | - |
32 | | - $tableRules = []; |
33 | | - foreach ($tableColumns as $column) { |
34 | | - $field = $column->column_name; |
35 | | - |
36 | | - // If specific columns where supplied only process those... |
37 | | - if (! empty($this->columns) && ! in_array($field, $this->columns)) { |
38 | | - continue; |
39 | | - } |
40 | | - |
41 | | - // If column should be skipped |
42 | | - if (in_array($column, $skip_columns)) { |
43 | | - continue; |
44 | | - } |
45 | | - |
46 | | - // We do not need a rule for auto increments |
47 | | - if (Str::contains($column->column_default, 'nextval')) { |
48 | | - continue; |
49 | | - } |
50 | | - |
51 | | - $tableRules[$field] = $this->generateColumnRules($column); |
52 | | - } |
53 | | - |
54 | | - return $tableRules; |
55 | | - } |
56 | | - |
57 | | - private function getColumnsDefinitionsFromTable() |
| 19 | + protected function getColumnsDefinitionsFromTable() |
58 | 20 | { |
59 | 21 | $databaseName = config('database.connections.mysql.database'); |
60 | | - $tableName = $this->table; |
| 22 | + $tableName = $this->table(); |
61 | 23 |
|
62 | 24 | $tableColumns = collect(DB::select( |
63 | 25 | " |
@@ -93,7 +55,7 @@ private function getColumnsDefinitionsFromTable() |
93 | 55 | return $tableColumns; |
94 | 56 | } |
95 | 57 |
|
96 | | - private function generateColumnRules(stdClass $column): array |
| 58 | + protected function generateColumnRules(stdClass $column): array |
97 | 59 | { |
98 | 60 | $columnRules = []; |
99 | 61 | $columnRules[] = $column->is_nullable === "YES" ? 'nullable' : 'required' ; |
@@ -157,4 +119,15 @@ private function generateColumnRules(stdClass $column): array |
157 | 119 |
|
158 | 120 | return $columnRules; |
159 | 121 | } |
| 122 | + |
| 123 | + protected function isAutoIncrement($column) : bool |
| 124 | + { |
| 125 | + return Str::contains($column->column_default, 'nextval'); |
| 126 | + } |
| 127 | + |
| 128 | + protected function getField($column) : string |
| 129 | + { |
| 130 | + return $column->column_name; |
| 131 | + } |
| 132 | + |
160 | 133 | } |
0 commit comments