UNPKG

@itwin/presentation-shared

Version:

The package contains types and utilities used across different iTwin.js Presentation packages.

51 lines 2.23 kB
import { ECSchemaProvider, RelationshipPath, RelationshipPathStep } from "../Metadata.js"; /** * Describes a single JOIN step from source to target through a relationship. * @public */ interface JoinRelationshipPathStep extends RelationshipPathStep { sourceAlias: string; targetAlias: string; relationshipAlias: string; joinType?: "inner" | "outer"; } /** * Describes a path of JOINs from source to target. * @public */ type JoinRelationshipPath = RelationshipPath<JoinRelationshipPathStep>; /** * Props for `createRelationshipPathJoinClause`. * @public */ interface CreateRelationshipPathJoinClauseProps { schemaProvider: ECSchemaProvider; path: JoinRelationshipPath; } /** * Creates an ECSQL JOIN snippet for given relationships' path. * * Possible results: * - When the relationship is represented by a navigation property on either source or target: * ```SQL * INNER JOIN [target_schema_name].[target_class_name] [target_alias] ON [target_alias].[navigation_property_name].[Id] = [source_alias].[ECInstanceId] * ``` * - When outer joining through a non-navigation-property relationship: * ```SQL * LEFT JOIN ( * SELECT [relationship_alias].* * FROM [relationship_schema_name].[relationship_class_name] [relationship_alias] * INNER JOIN [target_schema_name].[target_class_name] [target_alias] ON [target_alias].[ECInstanceId] = [relationship_alias].[TargetECInstanceId] * ) [relationship_alias] * LEFT JOIN [target_schema_name].[target_class_name] [target_alias] ON [target_alias].[ECInstanceId] = [relationship_alias].[TargetECInstanceId] * ``` * - When inner joining through a non-navigation-property relationship: * ```SQL * INNER JOIN [relationship_schema_name].[relationship_class_name] [relationship_alias] ON [relationship_alias].[SourceECInstanceId] = [source_alias].[ECInstanceId] * INNER JOIN [target_schema_name].[target_class_name] [target_alias] ON [target_alias].[ECInstanceId] = [relationship_alias].[TargetECInstanceId] * ``` * @public */ export declare function createRelationshipPathJoinClause(props: CreateRelationshipPathJoinClauseProps): Promise<string>; export {}; //# sourceMappingURL=ECSqlJoinSnippets.d.ts.map