2.21
* добавить под опцией проверку, что хост базы не изменился

2.20
* dbshards_ids - приведение формата лога к java

2.19
* contains_any - проверка на вхождение по списку

2.18
* в db_schema.pl использовать пользователя direct-ro для соединения с продакшен-rbac

2.17
* в db_schema.pl поправить пользователя для соединения с продакшен-БД

2.16
* небольшие уточнения в документации

2.15
* в get_db_config() поддержать более сложную логику определения имени пользователя

2.14
* в get_db_config() добавить возможность переопределять пользователя глобальной переменной

2.13
* has_connection_lock не пригодилась, вместо нее has_broken_lock

2.12
* поправить предупреждение о маскировке переменных в тесте _add_trace_comment.t

2.11
* has_connection_lock для проверки текущего состояния

2.10
* опция skip_pass для Yandex::DBTools::get_db_config: не читать пароль

2.09
* добавлен TRACE_COMMENT_VARS

2.08
* исправление ошибки 'Experimental splice on scalar is now forbidden'

2.07
* DBUnitTest - разрешить указывать engine в init_test_data

2.06
* аналогично r9766 откусывать подчеркивания из имён констрейнтов в файлах

2.05
* сделать ограничение на максимальное значение id

2.04
* db_schema.pl: опция skip_dir для игнорирования лишних каталогов с описаниями
* правка предупреждения «Use of uninitialized value $subj»

1.103
- db_schema.pl - пропускаем схему sys

1.102
- db_schema.pl откусывает начальные подчёркивания из имён констрейнтов
  (обычно это последствия pt-osc)

1.101
- do_mass_update_sql не сыпет ворнинги на нечисловые id

1.100
* исправлен тест

1.99
* в комментарии в sql-запрос дописываем service и method

1.98
* правка 1.96 и 1.97

1.97
* правка 1.96

1.96
* DBUnitTest создаёт локи там, где указано в переменной окружения

1.95
* do_mass_update_sql научился менять некоторые поля на константы (используя byfield/default)

1.94
* исправить ошибку, когда sharded_chunks с with_undef_shard склеивал 0 и неизвестный шарды

1.93 
 * снова запретить повторы запросов, отвалившихся по deadlock внутри транзакций
 (было в 1.88, откачено в 1.90)

1.92
 * поправка описания возвращаемых значений do_insert_into_table и do_replace_into_table

1.91
 * поправлено разбиение на чанки нецифровых идентификаторов

1.90
 * откатить правки из 1.88 -- в продакшене Директа посыпалось много deadlock'ов, надо сначала поправить самые массовые

1.89
 * новая опция --show_old_temporals у db_schema.pl

1.88
 * запретить повторы запросов, отвалившихся по deadlock внутри транзакций
   (ибо повторять нужно целиком транзакцию)

1.87
 * функция для сброса кеша полного списка шардов (надо для dbs-sql, где в одном процессе берутся списки шардов для нескольких конфигов)

1.86
 * базовая поддержка дополнительных пользователей в db-config

1.85
 * trace db:write store number of affected rows 

1.84
 * стектрейс при логировании ворнингов

1.83
 * логирование ворнингов mysql

1.82
 * более правильная обработка ошибок коммита

1.81
 * disconnect_db теперь действительно разрывает соединение
 * disconnect_all чистит все внутренние структуры с ссылками на dbh-ы 
   (если где-то запомнился dbh - после disconnect* он станет невалидным)

1.80
 + do_update_table - новая опция ignore, чтобы делать UPDATE IGNORE

1.79
 * убраны лишние вызовы ping'а

1.78
 * DBShards::get_new_id* - обрабатываем исключительную ситуацию - получение некорректного id

1.77
 * DBShards::clear_autoinc_table - не выводить предупреждение при пустой таблице

1.76
 * исправлена ошибка, при которой не очищалась информация о взятых sql-локах
    при разрушении sql_lock_guard-объекта на неактивном $dbh
 * исправлена ошибка, когда в режиме STRICT_LOCK_MODE при переподключении к БД на
    соединении со взятым sql-лок не умирали, если $dbh был неактивен

1.75
 * выводить документацию с помощью pod2text-utf8

1.74
  * do_mass_update_sql - разбиваем на запросы по 1000 строк за раз

1.73
+ do_mass_update_sql

1.72
  * check_db_schema.pl использует email_from для ENVELOPE_SENDER (чтобы доставлялись письма на внутренние рассылки)

1.71
  * в check_db_schema.pl добавлен опциональный параметр email_from

1.70
  * Yandex::DBUnitTest - корректное удаление тестовых баз, если было несколько create_db

1.69
  * Перестаем использовать Yandex::Profile

1.68
  * багфиксы db_schema.pl после 1.67: --skip-tz-utc оказался не нужен; файлы init-data.sql больше не считаются лишними

1.67
  * обработка хранимых процедур (*.procedure.sql)
  * обработка изначальных-образцовых данных (*.init-data.sql) — сравнивается только наличие, но не сами данные, но содержимое будет использовать при инициализации пустой базы

1.66
  * По возможности брать reqid из Yandex::Trace

1.65
  * profiling with Yandex::Trace

1.64
* исправление - do_mass_inserts_sql может работать без установленного QUOTE_DB

1.63
* новая настройка $Yandex::DBTools::STRICT_LOCK_MODE (по умолчанию - включена), отвечающая за следующее:
  * умирать при попытка взять больше одного sql-lock'а на соединение
  * умирать при переподключении к БД, если в соединении взят sql-лок
  * умирать при попытке освободить на форкнутом коннекте лок, взятый до форка
* функции get_lock_sql и release_lock_sql больше нельзя вызывать для нескольких БД одновременно,
    так как результат неоднозначен

1.62
* исправлена поддержка sleep/slep_coef в do_mass_insert_sql

1.61
* опция desired_sql_length добавлена в sql_mass_inserts

1.60
* выделена функция генерации инсёртов sql_mass_inserts из do_mass_inserts_sql

1.59
* еще раз уточнены зависимости

1.58
* уточнены зависимости пакета, указаны build-зависимости.

1.57
* параметр-функция by из sharded_chunks может получать текущий элемент как $_ и как $_[0]

1.56
* выполнять запросы get_new_id_multi в транзакции (для ускорения при работе с синхронной репликацией)
* изменение sharded_chunks - не проверять by для пустых списков

1.55
* поправить тест locks.t, спасибо percona-5.6
* YAML::Syck на самом деле не нужен

1.54
* ещё немного сборочных и runtime-зависимостей
* пропускать тест locks.t, потому что он не проходит (и на ppcdev1 тоже)

1.53
* db_schema.pl использует Yandex::Shell, добавить его в зависимости

1.52
* db_schema.pl использует Yandex::Svn, добавить его в зависимости

1.51
* db_schema.pl использует YAML::Syck, добавить его в зависимости

1.50
* db_schema.pl - используем skip_* и для файлов из db_schema

1.49
* db_schema.pl - проверяем в skip_tables не только имена, но и ники (важно для таблиц с числовыми суффиксами)

1.48
* DBUnitTest - поддержка таблиц с одинаковыми именами в разных базах

1.47
* модификатор для where: __collate(xxx)

1.46
* Определена переменная Yandex::DBUnitTest::SHARDS_NUM

1.45
* поддержка SHARD_IDS глубже первого уровня sql_condition

1.44
* поддержка отличного от схемы ENGINE'а не только для таблицы, но и для её PARTITION'ов

1.43
* логирование всех выдаваемых id

1.42
* ускорение загрузки Yandex::DBShards за счёт динамической подгрузки Y::LiveFile::*, Y::SendMail, Parallel::ForkManager

1.41
* DBUnitTest - возможность создавать не сколько тестовых баз за одну секунду

1.40
* в DBSchema добавлено несколько функций: get_table_text_desc, parse_table_text_desc, get_databases

1.39
* переподключаться к БД после отправки слишком большого запроса, не дожидаясь ping_timeout

1.38
* возможность использовать __smod в insert on_duplicate_key_update

1.37
* возможность обновлять join таблиц в do_update_sql
* sql_quote_identifier научился делить идентификатор по точкам и квотить всё по отдельности

1.36
* возможность дописывать к запросам комментарий с reqid из Yandex::Profile

1.35
* модификаторы для полей типа SET: __sset, __smod, __scheck

1.34
* уточнены зависимости

1.33
* DBUnitTest - исправление блокировки - удалять файл имеет право только процесс, создавший базу

1.32
* более аккуратная работа с лок-файлом в DBUnitTest

1.31
* DBUnitTest используей файловый лок - sql-ый может быть только один на коннект,
  поэтому, если встречается в тестируемом коде - сбрасывает первую блокировку

1.30
* Можно составлять сложные условия с _NOT (по аналогии с _OR и _AND)

1.29
* Исправлена ошибка с зацикливанием _get_statement_type, если запрос
* начинается со скобки.

1.28
* explain и desc теперь определяются как readonly запросы

1.27
* Исправлена ошибка DBUnitTest, приводившая к падению при пустом наборе данных для проверки

1.26
* Изменения в DBUnitTest:
  * используем для квотирования базу UT
  * квотируем имена полей при создании таблицы из строки с описанием
  * исправлена ошибка, приводившая к невозможности использовать зарезервированные ключевые слова MySQL в качестве имен полей для сравнения

1.25
* в sql_case значение по-умолчанию NULL, `field` - опасное умолчание в большинстве случаев
  Потеря обратной совместимости!

1.24
* в Yandex::DBShards добавлена функция get_sharded_vals_multi - раскрутка метабазы в "обратную сторону"

1.23
* get_one_column_sql для пустого набора данных вместо undef возвращает ссылку на пустой массив .
  Потеря обратной совместимости!

1.22
* пингуем базы перед коммитом, чтобы снизить вероятность закоммитить только в часть
* если не смогли закоммитить в одну базу, в остальные даже не пытаемся

1.21
+ реализовать метод для проверки и поддержания живости соединения [ping]

1.20
* не ломаемся при обращении из транзакции к соединениям, которые открывались ещё до форка

1.19
* научить DBUnitTest правильно работать с форками и удалять таблицу только в том процессе, где она создана

1.18
* DBUnitTest работает с 4 шардами (включая собственные юнит-тесты)

1.17
* скрипт db_schema с параметром --tf теперь может обрабатывать таблицы на шардах (DIRECT-30587)

1.16
* к Yandex::DBUnitTest::copy_table добавился флаг with_data
* добавилась функция Yandex::DBSchema::get_table_data_sqls

1.15
* просто новая версия

1.14
* возвращаем поведение из версии 1.12 -- пока Директ не готов к новому поведению get_one_column_sql

1.13
* get_one_column_sql теперь возвращает [] при пустом результате

1.12
* исправлена ошибка с определением кол-ва попыток реконнекта

1.11
* по-умолчанию реконнекты к базе не делаются в случае ошибок 2006 и 2013 (см. 1.06),
* чтобы избежать перезапуска тяжелых запросов прибитых по сигналу из консоли
* (для реконнекта надо задать переменную $Yandex::DBTools::RECONNECT_PAUSE)

1.10
* в случае потери соединения во время запроса сбрасываем last_ping_time для
* корректной работы метода soft_reconnect_db

1.09
 * исправлены предупреждения об использовании неинициализированных переменных при вызове foreach_shard_parallel с опцией with_undef_shard

1.08
* забытая зависимость

1.07
* переименован внутренний метод для избежания путанницы

1.06
* В случае получения ошибок "2006, MySQL server has gone away" или
* "2013, Lost connection to MySQL server during query"
* делаем попытку пересоединения.

1.05
* исправлена очистка кеша в DBShards

1.04
* count_distinct, having для overshard

1.03
* добавлены операции starts_with и contains (DIRECT-28897)

0.101
* В Overshard аггрегирующая функция group_concat_array переименована в group_array (чтобы название соответствовало содержимому)
* Для Overshard::overshard добавлены аггрегирующие функции (для группировки)
    group_concat_distinct, реализующая sql-синтаксис GROUP_CONCAT(DISTINCT key) (без сортировки)
    group_array_distinct, возвращающая ссылку на массив из уникальных элементов (в пределах группировки)
* Добавлена внешняя переменная $Yandex::Overshard::GROUP_CONCAT_SEPARATOR
    позволяющая переопределить разделитель для функциий group_concat и group_concat_distinct
    используемая функциями group_array, group_concat_distinct и group_array_distinct для дополнительного разделения значений по указанному сепаратору.

0.100
* параметр distinct в Overshard::overshard
* юбилей!

0.99
* sql_quote_like_pattern квотит и обратные слеши

0.98
+ sql_quote_like_pattern

0.97
* sharded_chunks с by= теперь может принимать массив любых структур (не только хэшей)

0.96
* рефакторинг Overshard::sort_by, помимо :num, теперь можно указывать :str, :str_cs, :str_ci
* Overshard::sort_by теперь по-умолчанию сортирует case-insensitive

0.95
* в sharded_chunks переименован неиспользуемый параметр undef_shard -> with_undef_shard

0.94
* Overshard::overshard корректно работает с нулевыми limit / offset

0.93
* починил Yandex::DBTools::set_slave_db: вне зависимости от его вызова все запросы шли в мастер

0.92
* DBShards::sharded_chunks научилась разбивать массив хэшей
* в sharded_chunks все опции именованные (третий параметр $n поддерживается для обратной совместимости)
* в sharded_chunks можно указывать в качестве первого аргумента shard => 

0.91
* Added Yandex::DBShards::foreach_shard_parallel

0.90
* do_mass_insert_sql теперь отслеживает размер формируемого запроса, стараясь не превысить max_allowed_packet
* новая опция sleep_coef в do_mass_insert_sql

0.89
* исправлено удаление лишних фалов в db_schema.pl

0.88
* вывод ошибок в db_schema.pl

0.87
* новая функция enrich_data

0.86
* новая функция: sql_fields

0.85
* DBShards - корректная работа с ключами str, добпален тип ключей bin

0.84
* SELECT is_used_lock()/is_free_lock() в профайлинге тоже отображаем под типом lock

0.83
* get_lock_sql/release_lock_sql теперь работают через get_one_field_sql и общую инфраструктуру (логгирование, профайлинг)
* немного комментариев

0.82
* добавлен профайлинг в get_lock_sql

0.81
* добавлена настроечная переменная $Yandex::DBShards::FIRST_SHARD_ID

0.80
* добавлена функция DBShards::foreach_shard

0.79
* DBShards - возможность указания нечисловых мэпингов

0.78
* DBShards::get_shard - для val=undef возвращаем undef, а не падаем

0.77
* DBShards::get_shard - проверка на то, что id-шники являются целыми числами
  (иначе mysql может не использовать индексы)

0.76
* DBTools::get_shards_numbers - added

0.75
* DBShards::update_shard_chain - добавлена функция.

0.74
* DBTools::do_mass_insert_sql - не делаем sleep, если не между вставками (последняя вставка или вообще единственная).

0.73
* DBTools::sql_condition - корректная работа с undef при указанном модификаторе __int

0.72
* DBShards: бъём запросы на равные куски, добавлены функции очистки autoinc-таблиц

0.71
* DBShards: функции sharded_chunks и sharded_chunks_iter теперь игнорируют значения ключей, по которым не удалось определить шард
* DBUnitTest: улучшен вывод сообщений в функциях init_test_dataset и check_test_dataset

0.70
* модуль Yandex::Overshard: добавлен признак :num к значениям поля order

0.69
* добавлена функция select_found_rows

0.68
* в sql_condition добавлен модификатор __int 

0.67
* использование sql_case с указанием $dbh объявлено deprecated
* get_all_sql не умирает, если указано 0 шардов

0.66
* добавилась настройка DBShards::STRICT_SHARD_DBNAMES_KEYS

0.65
* DBShards::get_shard_dbnames - сортировка шардов исправлена на числовую
* Новая функция DBShards::get_first_shard_dbname - аналог get_shard_dbnames, но для шардированных баз возвращает только первый шард

0.64
* использование sql_condition с указанием $dbh объявлено deprecated
* правильный способ использования - задать $QUOTE_DB и использовать без указания $dbh - sql_condition($where, %params):

0.63
* более аккуратный вывод подробностей в DBUnitTest::check_test_dataset 

0.62
* db_schema.pl не спотыкается при добавлении в svn уже добавленных файлов

0.61
* добавлена функция Yandex::DBSchema::get_tables

0.60
* добавлена функция sql_quote_identifier

0.59
* get_shard_dbnames умирает при указании несуществующих шардов

0.58
* SHARD_IDS - возможность выполнять разные запросы в разных шардах за один вызов

0.57
* новые функции: sharded_chunks, sharded_chunks_iter

0.56
* Починка сломавшихся тестов

0.55
* DBUnitTest: функция check_test_dataset теперь умеет работать с шардированными базами
! DBUnitTest: изменен набор аргументов функции create_table - в начало добавился аргумент - база данных, в которой будет создана таблица
* DBUnitTest: исправлен баг с падением модуля при завершении из-за многократного создания таблиц
* DBUnitTest: исправлен баг с невозможностью использования ключа create_string в %dataset для создания таблицы
* DBUnitTest: добавлены юнит-тесты

0.54
* DBUnitTest: функция init_test_dataset теперь умеет работать с шардированными базами
* DBTools: функция _dbnames переименована в dbnames и экспортирована

0.53
* Добавились настройка QUOTE_DB и функция sql_quote

0.52
* Добавилась настройка DBUnitTest::SHARDED_DB_RE, задающая, какие базы (кроме SHUT) считать шардированными.

0.51
* исправление в get_shard_dbnames - выдаём только числовые шарды

0.50
* исправлена опечатка в get_shard_multi

0.49
* функции DBTools научились работать с несколькими базами (PPC(shards=>'all'))
* в DBUnitTest добавилась шардированная база SHUT(shard => [1,2])
* добавилась настройка DBShards::STRICT_SHARD_DBNAMES

0.48
* Новый модуль Yandex::Overshard

0.47
* DBTools: подавлена поддержка опции соединения compression

0.46
* DBShards: добавлен флаг not_zero. Сохранение в метабазе шардов невозможно, если при выставленном флаге значение поля равно нулю.

0.45
* добавлен метод DBShards::delete_shard

0.44
* откачены изменения 0.41 - без указания dont_quote всегда квотим целые
  иначе "1asdf"=1 - истина

0.43
* get_two_columns_hash_sql переименована в get_hash_sql и упрощена

0.42
* get_two_columns_hash_sql для извлечения хешей, построенных на двух столбцах

0.41
* при генерации условия с IN в sql_condition целые числа не квотятся
  (это в некоторых случаях позволяет mysql оптимизировать последующий GROUP BY)

0.40
* поддержка шардинга в wait_master
* добавлен метод set_slave_db()
* save_dbh2 объявлен deprecated

0.39
* QUERIES_LOG пишется в формате json

0.38
* если instance не указан - он вычисляется как первая часть имени, а не имя database

0.37
* добавлена функция sql_condition

0.36 
* db_schema.pl: починена генерация шаблонов описаний таблиц

0.35
* добавлен метод disconnect_all

0.34
* check_db_schema.pl: исправлен $ENV{PATH}

0.33
* db_schema.pl: исправлена обаботка относительных путей
* db_schema.pl: игнорируем спецфайлы (начинающиеся с точки)
* check_db_schema.pl: не отправляем нотификацию, если расхождений не нашлось

0.32 
* скрипт check_db_schema.pl для email-нотификаций о сравнении базы с описанием

0.31
* включаем в сборку скрипт db_schema.pl

0.30
- do_mass_insert_sql работала некорректно если на sql шаблоне стоит utf8 флаг. Исправлено.

0.29
* do_mass_insert_sql падает на невалидных данных

0.28
+ добавлена функция sql_lock_guard

0.27
! get_db_childs не возвращает умолчательные базы типа xxx:_
+ к get_db_childs добавился булевский параметр recursive
* get_db_config всегда возвращает ключ instance

0.26
* в sql_case добавился параметр default__dont_quote

0.25
* для больших хэшей с целочисленными ключами, sql_case генерит бинарное дерево из IF-ов
  (оптимизация производительности, в mysql case - это полный просмотр)

0.24
* восстанавливаем утерянную функциональность - попытка коннектиться по списку хостов

0.23
* изменение wait_master - не падаем, если не определён dbh_slave

0.22
* изменение в DBShards - в get_shard появился опциональный параметр для получения
  не номера шарда, а значение для определённого ключа из иерархии
* изменение в DBShards - в save_shard и get_new_id можно указывать не конечные значения, 
  а промежуточные значения из иерархии

0.21
+ функция get_table_partitions для получения списка названий партиций

0.20
- исправлена поддержка бинарных данных в do_mass_insert_sql 

0.19
- подавление warning в get_hashes_hash_sql если ключ = NULL

0.18
- не теряем сообщение об ошибке в транзакции

0.17
+ поддержка транзакций

0.16
+ в copy_table и init_test_dataset добавлен опциональный параметр like для создания таблиц с параметрами в названиях (например, по схеме order_stat_day_nnnnnnn.schema.sql)

0.15
- исправление InactiveDestroy - обёртка вокруг DBI::db для корректного разрушения неиспользованных в чайлде коннектов

0.14
- исправлена ошибка с InactiveDestroy - атрибут устанавливается только в порождённом процессе

0.13
+ всем dbh проставляется аттрибут InactiveDestroy=1 при коннекте
+ если dbh начинает использоваться в дочернем процессе - происходит автматический реконнект

0.12
+ добавлен модуль Yandex::DBShards

0.11
+ добавлено название базы в сообщение об ошибке SQL

0.10
+ добавлена функция do_insert_select_sql
* при пустом массиве значений do_mass_insert_sql возвращает 0 вместо undef

0.09
! исправлена зависимость от Yandex::LiveFile

0.08
+ добавлена возможность использования json-конфигов
! файл с конфигом должен иметь расширение .yaml или .json, формат определяется по расширению

0.07
+ в create_table_by_schema добавлена опция engine - указание типа создаваемой таблицы
* DBUnitTest по-умолчанию все таблицы создаёт как MyISAM (чтобы уменьшить нагрузку на БД UT)

0.06
RaiseError устанавливается в 1 при connect_db.
В соответствии с этим исправлены некоторые места в Yandex::DBTools.

0.05
+ в конфиге можно указать, что пароль лежит в отдельном файле
  для этого в поле pass вместо строки указать ссылку на хэш с ключём file

0.04
specified dependencies

0.03
условия можно в arrayref
сложные условия через _AND и _OR

0.02
конфиг БД для юнит-тестов должен находиться в /etc/dbtools/db-config.unit-tests.yaml

0.01
Copied from Direct
