5.9. TssJoinDataProducer

Предки: 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:

  1. Каждый <query> обрабатывается автономно, результат обработки добавляется в результирующий TssDataStorage. Структура результирующего TssDataStorage берется из первого <query>.

  2. Результат обработки каждого <query> - это TssDataStorage, включающий поля всех входных данных, участвующих в <query>, с учетом масок полей, описанных во входных TssJoinSource. Дополнительно создается поле JOIN_SOURCE_ALIAS. Если используется UNION соединение, то поле содержит индекс TssJoinSource в списке TssJoinSource для текущей результирующей записи, иначе поле содержит значение -1.

  3. В описании WITH destfield – это вычисляемое поле, добавляемое в результирующий TssDataStorage. Его значение берется из sourcefield данного входного набора. Если используется UNION соединение, то для данной записи применяется только тот WITH, у которого индекс TssJoinSource совпадает со значением поля JOIN_SOURCE_ALIAS этой записи.

  4. Для типов соединения [{LEFT|FULL}] JOIN результирующая запись заполняется очевидно.

  5. Цель UNION соединений – объединить в один набор данные из источника-списка групп и источника-списка элементов, с выделением отдельных строк для групп и отдельных строк для элементов. А именно, для каждой записи группы в результирующий набор добавляется:

    1. Одна запись по данной группе, с заполнением полей из источника-списка групп. JOIN_SOURCE_ALIAS у этой записи выставляется в индекс источника-списка групп.

    2. Ноль или более записей по элементам данной группы, с заполнением полей из источника-списка групп и источника-списка элементов. JOIN_SOURCE_ALIAS у этой записи выставляется в индекс источника-списка элементов.