-
Notifications
You must be signed in to change notification settings - Fork 9
wish table_data
Была предназначена для внесения множества записей в одну из таблиц БД, в том числе если простой INSERT может вызвать коллизии с имеющимся содержимым.
Процедура wish предназначена не только для работы с данными таблиц БД. Она реализует общий алгоритм:
- узнать текущее состояние;
- сопоставить в предъявленными требованиями;
- вычислить и применить минимальные обновления.
CREATE OR REPLACE для таблиц, их полей и индексов). А по ходу работы, в прикладном коде, практически может понадобиться только правка данных.
Тем не менее, в настоящее время для этих же целей рекомендуется по возможности использовать пакетный вариант sql_do_upsert.
Рассмотрим редактирование многозначных данных, таких, как установление связей многие-ко-многим или показателей, вводимых в статистические формы.
В этой ситуации, как правило, имеется таблица table с минимум 2 ссылками:
- на текущую форму (
id_form) и - на некоторый справочник (
id_voc).
id_form = $_REQUEST {id} (это — общая часть данных всех записей на отображаемой форме) и каждого непустого $_REQUEST {_id_voc_$id_voc} в ней имелось по 1 записи с fake = 0. Задача эта решается вызовом
wish (table_data =>
[map {{ fake => 0, id_voc => $_ }} get_ids ('id_voc')], {
table => 'table',
root => {id_form => $_REQUEST {id}},
key => 'id_voc',
}
);
В рассмотрение принимаются только записи, удовлетворяющие условиям, прописанным в опции root. Те записи, которые существовали в таблице до вызова, но не упомянуты в желаниях, удаляются. Комбинация из всех ключей root и всех компонент key (их можно указывать через запятую) играет роль ключа синхронизации. Уникальность такого набора полей на совести программиста.
Приведённый пример является распространённым, но несколько вырожденным: здесь строка id_voc одновременно является значением 3 независимых параметров. В более сложных случаях (когда надо учитывать не только факт непустоты, но и значение параметра) комбинацию map / get_ids необходимо заменить на формирование целевого списка вручную.
Если опция root не задана, множество записей, с которыми происходит сопоставление, расширяется до всей таблицы. При этом порядок исполнения желаний имеет специфику:
- id должны быть явно указаны в описании данных;
- сборка мусора не производится.