db

Форк
0
/
SQLite.php 
102 строки · 2.7 Кб
1
<?php
2

3
namespace Upside\Db\Schema\Compiler;
4

5
use Upside\Db\Schema\AlterTable;
6
use Upside\Db\Schema\BaseColumn;
7
use Upside\Db\Schema\Compiler;
8
use Upside\Db\Schema\CreateTable;
9

10
class SQLite extends Compiler
11
{
12
    /** @var string[] */
13
    protected array $modifiers = ['nullable', 'default', 'autoincrement'];
14
    protected string $autoincrement = 'AUTOINCREMENT';
15

16
    /** No primary key */
17
    private bool $nopk = false;
18

19
    protected function handle_type_integer(BaseColumn $column): string
20
    {
21
        return 'INTEGER';
22
    }
23

24
    protected function handle_type_time(BaseColumn $column): string
25
    {
26
        return 'DATETIME';
27
    }
28

29
    protected function handle_type_timestamp(BaseColumn $column): string
30
    {
31
        return 'DATETIME';
32
    }
33

34
    public function handle_modifier_autoincrement(BaseColumn $column): string
35
    {
36
        $modifier = parent::handle_modifier_autoincrement($column);
37

38
        if ($modifier !== '') {
39
            $this->nopk = true;
40
            $modifier = 'PRIMARY KEY ' . $modifier;
41
        }
42

43
        return $modifier;
44
    }
45

46
    public function handle_primary_key(CreateTable $schema): string
47
    {
48
        if ($this->nopk) {
49
            return '';
50
        }
51

52
        return parent::handle_primary_key($schema);
53
    }
54

55
    protected function handle_engine(CreateTable $schema): string
56
    {
57
        return '';
58
    }
59

60
    protected function handle_add_unique(AlterTable $table, $data): string
61
    {
62
        return 'CREATE UNIQUE INDEX ' . $this->wrap($data['name']) . ' ON ' . $this->wrap($table->get_table_name()) . '(' . $this->wrap_array($data['columns']) . ')';
63
    }
64

65
    protected function handle_add_index(AlterTable $table, $data): string
66
    {
67
        return 'CREATE INDEX ' . $this->wrap($data['name']) . ' ON ' . $this->wrap($table->get_table_name()) . '(' . $this->wrap_array($data['columns']) . ')';
68
    }
69

70
    public function current_database(string $dsn): array
71
    {
72
        return [
73
            'result' => \substr($dsn, \strpos($dsn, ':') + 1),
74
        ];
75
    }
76

77
    public function get_tables(string $database): array
78
    {
79
        $sql = 'SELECT ' . $this->wrap('name') . ' FROM ' . $this->wrap('sqlite_master') . ' WHERE type = ? ORDER BY ' . $this->wrap('name') . ' ASC';
80

81
        return [
82
            'sql' => $sql,
83
            'params' => ['table'],
84
        ];
85
    }
86

87
    public function get_columns(string $database, string $table): array
88
    {
89
        return [
90
            'sql' => 'PRAGMA table_info(' . $this->wrap($table) . ')',
91
            'params' => [],
92
        ];
93
    }
94

95
    public function rename_table(string $current, string $new): array
96
    {
97
        return [
98
            'sql' => 'ALTER TABLE ' . $this->wrap($current) . ' RENAME TO ' . $this->wrap($new),
99
            'params' => [],
100
        ];
101
    }
102
}
103

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

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

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

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