Предки: TssDataProducer.
Используется в TssJoinDataSet.
В качестве входных объектов используется список именованных объектов типа TssJoinSource. Каждый такой объект содержит ссылку на объект – наследник от TssDataProducer. Класс TssJoinDataProducer объединяет входные данные согласно правилам, хранящимся в свойстве psFromSQL. Результат возвращается в виде объекта типа TssDataStorage.
Формат строки psFromSQL:
<query>[ NATIVE_UNION <query> […n]]
<query> ::= <source description> [[{LEFT|FULL}] [UNION] JOIN <source description> ON join_condition […n]]
<source description> ::= source_alias [WITH destfield=sourcefield[;..n]]Правила формирования результирующего TssDataStorage:
Каждый <query> обрабатывается автономно, результат обработки добавляется в результирующий TssDataStorage. Структура результирующего TssDataStorage берется из первого <query>.
Результат обработки каждого <query> - это TssDataStorage, включающий поля всех входных данных, участвующих в <query>, с учетом масок полей, описанных во входных TssJoinSource. Дополнительно создается поле JOIN_SOURCE_ALIAS. Если используется UNION соединение, то поле содержит индекс TssJoinSource в списке TssJoinSource для текущей результирующей записи, иначе поле содержит значение -1.
В описании WITH destfield – это вычисляемое поле, добавляемое в результирующий TssDataStorage. Его значение берется из sourcefield данного входного набора. Если используется UNION соединение, то для данной записи применяется только тот WITH, у которого индекс TssJoinSource совпадает со значением поля JOIN_SOURCE_ALIAS этой записи.
Для типов соединения [{LEFT|FULL}] JOIN результирующая запись заполняется очевидно.
Цель UNION соединений – объединить в один набор данные из источника-списка групп и источника-списка элементов, с выделением отдельных строк для групп и отдельных строк для элементов. А именно, для каждой записи группы в результирующий набор добавляется:
Одна запись по данной группе, с заполнением полей из источника-списка групп. JOIN_SOURCE_ALIAS у этой записи выставляется в индекс источника-списка групп.
Ноль или более записей по элементам данной группы, с заполнением полей из источника-списка групп и источника-списка элементов. JOIN_SOURCE_ALIAS у этой записи выставляется в индекс источника-списка элементов.