@itwin/presentation-shared
Version:
The package contains types and utilities used across different iTwin.js Presentation packages.
51 lines • 2.23 kB
TypeScript
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