Ещё до отъезда в отпуск в Asterisk появилась очередная полезная возможность, способная облегчить жизнь разбирающимся с установкой или обновляющим свой Asterisk сервер. Возможность адаптивной работы с базой данных уже была реализована ранее в модуле cdr_adaptive_odbc и заключается в считывании модулем при старте структуры таблицы и адаптации выполняемых запросов к существующей структуре.
При вставке новой CDR записи используется следующее правило: если для переменной функции CDR () имеется колонка с таким же названием, то значение переменной будет использовано в INSERT запросе. Это может быть как стандартная переменная, вроде billsec, так и любая другая заданная в диалплане: Set (CDR (codec)=alaw). Если для переменной не существует поля с таким же названием, то при вставке эта переменная будет пропущена. Теперь данная возможность перенесена в другие CDR модули, а так же воплощена и усовершенствована в архитектуре реального времени.
О улучшениях в CDR:
Так же теперь некоторые CDR модули поддерживают возможность указать соответствие имени переменной и колонки, куда её необходимо вставлять. Таким образом Asterisk может быть адаптирован к существующей базе данных, и более не будет принуждать администраторов подстраиваться под то, каким образом он спроектирован.
О улучшениях в ARA:
Возможность адаптации добавлена и к ARA (Asterisk Realtime Architecture). Ранее элементы «подстройки» под структуру БД существовали (например, нечувствительность к отсутствию большинства полей), но теперь, всвязи со знанием структуры таблицы, работа с нестандартными таблицами упрощена и улучшена. Раньше при выполнении UPDATE или SELECT запросов, где в WHERE значились несуществующие столбцы, мягко говоря, возникали проблемы. Теперь если колонки, которую необходимо обновить, не существует, то она будет опущена из запроса.
Так же при старте структура таблиц будет проанализирована и выдано предупреждение, которое так же будет записано в логи, у вас будет возможность узнать, что необходимо поле «regseconds» и оно должно быть INT4 или эквивалентное (CHAR (5) например). Для полей в выражениях WHERE пердупреждение так же будет выдано при каждой попытке выполнить запрос.
Дополнительно предусмотрены действия, задаваемые параметром requirements: «createchar» или «createclose». По умолчанию значение — warn (выдавать предупреждения). Это дополнительны опции, позволяющие Asterisk изменять таблицы, в случае если не достаёт каких-тто полей. Это позволит всегда иметь в БД ту информация, которая там должна быть. Разница между опциями — в каком виде поля будут созданы: «createclose» - Asterisk создат поле типа, который, на его взгляд, наиболее всего подходит в данной ситуации. Если выбрано «createchar», Asterisk будут создавать только поля типа CHAR подходящего размера. Естественно приложение не должно само менять структуру БД, поэтому эта функция оформлена в отдельную опцию, отключенную по-умолчанию.
Данный функционал будет доступен начиная с версии 1.6.1. Оригинал: asterisk.org