Использование присоединенных таблиц
Glossary Item Box
Типы JOIN присоединенных таблиц
При добавлении в запрос колонки из схемы, отличной от корневой, эта схема добавляется в запрос посредством оператора JOIN. При этом по умолчанию применяется тип присоединения LEFT OUTER. EntitySchemaQuery позволяет при добавлении колонки некорневой схемы указать тип присоединения этой схемы к запросу. Для этого достаточно указать имя колонки в следующем формате:
[Спецсимвол типа соединения][Имя колонки]
Табл. 1 — Типы JOIN присоединенных схем
Тип соединения | Спецсимвол типа соединения | Пример имени колонки |
---|---|---|
INNER JOIN | "=" | "=Name" |
LEFT OUTER JOIN | ">" | ">Name" |
RIGHT OUTER JOIN | "<" | "<Name" |
FULL OUTER JOIN | "<>" | "<>Name" |
CROSS JOIN | "*" | "*Name" |
Пример
Добавление в запрос колонок, используя различные типы соединения схем.
// Создание экземпляра запроса с корневой схемой City. var esqResult = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City"); // К запросу будет добавлена схема Country с типом присоединения LEFT OUTER JOIN. esqResult.AddColumn("Country.Name"); // К запросу будет добавлена схема Country с типом присоединения INNER JOIN. esqResult.AddColumn("=Country.Name"); // К запросу будут присоединены две схемы: // 1) схема Country с типом присоединения LEFT OUTER JOIN; // 2) схема Contact с типом присоединения RIGHT OUTER JOIN. esqResult.AddColumn(">Country.<CreatedBy.Name"); // Текст результирующего sql-запроса (MS SQL): // SELECT // [Country].[Name] [Country.Name], // [Country1].[Name] [Country1.Name], // [CreatedBy].[Name] [CreatedBy.Name] // FROM // [dbo].[City] [City] // LEFT OUTER JOIN [dbo].[Country] [Country] ON ([Country].[Id] = [City].[CountryId]) // INNER JOIN [dbo].[Country] [Country1] ON ([Country1].[Id] = [City].[CountryId]) // LEFT OUTER JOIN [dbo].[Country] [Country2] ON ([Country2].[Id] = [City].[CountryId]) // RIGHT OUTER JOIN [dbo].[Contact] [CreatedBy] ON ([CreatedBy].[Id] = [Country2].[CreatedById])
Наложение прав доступа на присоединенные схемы
Если корневая схема запроса администрируется по записям и в запросе присутствуют присоединяемые схемы, то к ним могут быть применены права доступа текущего пользователя. В таблице 2 приведены все возможные варианты наложения прав доступа к присоединенным схемам. Эти значения соответствуют членам перечисления Terrasoft.Core.DB.QueryJoinRightLevel.
Табл. 2 — Варианты наложения прав доступа к присоединяемым схемам запроса
Значение члена перечисления | Порядок наложения прав доступа |
---|---|
EnabledAlways = 0 | Всегда накладывать права доступа. |
EnabledForAdditionalColumns = 1 | Накладывать права в том случае, если из связанной схемы в запросе используются колонки, отличные от первичной (PrimaryColumn) и первичной для отображения. |
Disabled = 2 | Не накладывать права доступа. |
Порядок применения прав доступа определяется значением свойства JoinRightState запроса. Значение этого свойства по умолчанию определяется системной настройкой QueryJoinRightLevel, которая принимает значения согласно табл. 2. Если значение этой системной настройки не задано, то ее значение по умолчанию принимается равным [EnabledForAdditionalColumns].