Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
 }