ЧТО ЭТО
=======

Этот код генерирует (и обновляет сгенерированные) классы jooq для работы с базами директа.
Кроме этого, он создает слепок пустой базы директа для использования в тестах.
Слепок базы создается в двух видах: docker-образ, для работы тестов в macos и под IDEA,
и в виде sandbox-ресурсов, для работы тестов в аркадийном CI и в Linux  через ya make.

Типовое использование - обновиться до последней ревизии директа:

  ./dbschema_update_svn.sh

Этот скрипт нужно запускать в рабочей копии аркадии из корня папки, в которой скрипт расположен,
при этом нужен полный чекаут проекта direct (trunk/direct). Кроме этого, для работы нужны
установленные subversion и docker.

  * Под макосью работает, как минимум, начиная с Docker 1.12.0-rc2-beta17

Скрипт делает следующее:

  1. Качает из svn/direct каталог trunk/db_schema (можно указать конкретную ревизию,
     подробности в --help)

  2. Создает в докере mysql-базы используя SQL из db_schema и запускает на них jooq-codegen

  3. Обновляет в рабочей копии svn каталог direct/libs/dbschema (сгенерированные jooq-классы,
     для работы с базой директа), делая svn add на новые файлы и svn remove на удаленные.

  4. Записывает в файл direct/libs/dbschema/source_info.json информацию о том,
     с какого урла и какой ревизии была взята схема БД. А так же ревизию генератора.
     Если использовался генератор с локальными изменениями - это будет отражено в строке с
     ревизией. Коммитить такое не надо.

  5. В том же докерном контейнере база ppc копируется в ppc1 и ppc2 (имитация шардов
     в тестах). После этого из контейнера делается слепок базы и загружается в яндексовый
     docker-registry и в sandbox.

Список директовских баз, для которых генерируются схемы, умышленно захардкожен, во избежание
бардака. Если нужно добавить в список новую базу, нужно добавить ее в DbSchemaUpdateSvn.DB_NAMES.

При добавлении новых баз, полезно так же обновить список DbSchemaUpdateSvn.ARTIFICIAL_BIGINT_COLUMNS.
Это список колонок в таблицах, для которых тип bigint unsigned нужно подменить на просто bigint.
На этот случай есть хелпер. Нужно счекаутить из svn/direct/db_schema соответствующую базу и сделать так:

  ./dbschemagen.sh -G -p ru.yandex.direct.dbschema db_schema/<target-database-name>/

Для генерации моделей из бранча:
    ./dbschema_update_svn.sh --force-generate --url svn+ssh://arcadia.yandex.ru/arc/branches/direct/perl/<branch>/db_schema


ДЛЯ ЭКСПЕРИМЕНТОВ
=================
Если нужно попробовать какой-то код и для него нужна изменненная база данных, то получить ее можно следующим образом.
  1. Создаем нужные таблицы на devtest

  2. Генерируем по ним новые файлы в db_schema, проще всего на devtest-бете сделать
     ./protected/maintenance/db_schema_direct.pl -i

  3. Из полученных файлов в db_schema берем нужные и (например через svn diff + patch) привозим в локальное акрадийноое дерево

  4. Локально запускаем DbSchemaGen main прямо из Idea, у метода есть коментарий с параметрами запуска, получаем нужные нам модели в проекте

ТЕСТЫ
=====

Запускаются как обычно: ya make -t

Если тесты провалились, то нужно вручную сгенерировать код для тестовой схемы,
и с помощью программы diff посмотреть чем оно отличается от эталона.

Это можно сделать из IDEA выполнив ru.yandex.direct.dbschemagen.TestGen.main()

Если изменения ожидаемые, можно заменить ими эталон.

