private string GetInitialDerivedTableJoin(JoinDescription joinDescription) { var derivedTableAlias = DerivedTableWrapperNameResolver.GetWrapperName(GetLeftTableAlias(joinDescription)); var joinPrefix = GetJoinPrefix(joinDescription); var secondaryJoins = Joins .Where(a => a.Id != joinDescription.Id) .Where(a => { var sameOuterTable = a.LeftTable.Equals(joinDescription.RightTable, StringComparison.InvariantCultureIgnoreCase); var hasDerivedTable = !string.IsNullOrEmpty(a.ExplicitRightTableAlias); var sameDerivedTable = hasDerivedTable && a.ExplicitRightTableAlias.Equals(derivedTableAlias, StringComparison.InvariantCultureIgnoreCase); return(sameOuterTable && sameDerivedTable); }).ToList(); var rightTableAlias = QBuilder.TableNameAliaser.GetTableAlias(joinDescription.RightTable); var line = $"{joinPrefix} join ({joinDescription.DerivedTable}) as {derivedTableAlias} on {derivedTableAlias}.{joinDescription.LeftField} = {rightTableAlias}.{joinDescription.RightField}"; line += Environment.NewLine; foreach (var secJoin in secondaryJoins) { secJoin.Consumed = true; line += $" and {rightTableAlias}.{secJoin.LeftField} = {secJoin.ExplicitRightTableAlias}.{secJoin.RightField}"; } return(line); }
internal void SecondaryDerivedTableJoin(string rightField, string rightTable, QBuilder derivedTable, string derivedFieldName, string joinType) { var joinDescription = new JoinDescription { LeftTable = rightTable, LeftField = rightField, ExplicitRightTableAlias = DerivedTableWrapperNameResolver.GetWrapperName(derivedTable.DerivedTableName), RightField = derivedFieldName, JoinType = joinType, }; Joins.Add(joinDescription); }
internal bool TableFoundInJoin(string table, JoinDescription joinDescription) { var leftTable = string.Empty; var rightTable = joinDescription.RightTable; if (joinDescription.IsInitialDerivedTableJoin) { leftTable = DerivedTableWrapperNameResolver.GetWrapperName(joinDescription.ExplicitLeftTableAlias); } else { leftTable = joinDescription.LeftTable; } return(leftTable.Equals(table, StringComparison.CurrentCultureIgnoreCase) || rightTable.Equals(table, StringComparison.CurrentCultureIgnoreCase)); }
public DerivedTableSelector(QBuilder derivedTable, SelectBuilder selectBuilder) { SelectBuilder = selectBuilder; TableName = DerivedTableWrapperNameResolver.GetWrapperName(derivedTable.DerivedTableName); }