Предки: 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
у этой записи выставляется в индекс источника-списка элементов.