Skip to content
parserpro edited this page May 15, 2014 · 6 revisions

Зачем?

Для того, чтобы всегда иметь возможность:

  • узнать, кто внёс изменения в БД
  • иметь возможность тиражировать изменения в БД на множество хостов

Принцип

Очевидно, что вносить изменения в БД надо только тогда, если их там ещё нет. Значит нам нужен простой способ узнать, есть ли в БД интересующие нас объекты и обладают ли они заданными характеристиками. Отсюда, создаём скрипт с проверками вида:

unless ( table("example")->exists ) {
    alter("example", "CREATE TABLE example (id int)");
}

что означает:

если таблица "example" не существует, то запустить код, который её создаст

Объекты

  • Таблица (Table)
  • Колонка (Column)
  • Индекс (Index)

Общие методы

  • exists - проверяет существование объекта. Возвращает: 1 - объект существует, 0 - объект не существует (справедливо для всех методов проверяющих наличие объекта)

    Пример:

    table("example")->exists;

    table("example")->column("id")->exists;

  • invalidate - убирает из кеша данные об объекте. Вызывается автоматически.

Методы таблицы

  • has_column - проверяет наличие колонки в таблице.

    table("example")->has_column('id');

  • columns - возвращает список из имен колонок, отсортированный в том порядке, в каком эти колонки определены в таблице

    my @columns = table("example")->columns;

  • has_index - проверяет наличие индекса в таблице.

    table("example")->has_index('PRIMARY');

  • column - возвращает объект колонки.

    my $column = table("example")->column("id");

Методы колонки

  • has_type - регистронезависимо сравнивает аргумент с типом колонки. 1 - одинаково, 0 - нет.

    table("example")->column("id")->has_type("int");

  • type - возвращает тип колонки.

    my $type = table("example")->column("id")->type("int");

  • default - возвращает значение по-умолчанию для колонки.

    my $def = table("example")->column("id")->default;

Методы индексов

  • has_type
  • type