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