Пример #1
0
        private void HandleJoins()
        {
            if (_whereCriteria == SimpleExpression.Empty && _havingCriteria == SimpleExpression.Empty
                && (!_query.Clauses.OfType<JoinClause>().Any())
                && (_columns.Where(r => !(r is CountSpecialReference)).Count() == 0)) return;

            var joiner = new Joiner(JoinType.Inner, _schema);

            string dottedTables = RemoveSchemaFromQueryTableName();

            var fromTable = dottedTables.Contains('.')
                                ? joiner.GetJoinClauses(_tableName, dottedTables.Split('.').Reverse())
                                : Enumerable.Empty<string>();

            var fromJoins = joiner.GetJoinClauses(_query.Clauses.OfType<JoinClause>(), _commandBuilder);

            var fromCriteria = joiner.GetJoinClauses(_tableName, _whereCriteria);

            var fromHavingCriteria = joiner.GetJoinClauses(_tableName, _havingCriteria);

            var fromColumnList = _columns.Any(r => !(r is SpecialReference))
                                     ? joiner.GetJoinClauses(_tableName, GetObjectReferences(_columns), JoinType.Outer)
                                     : Enumerable.Empty<string>();

            var joins = string.Join(" ", fromTable.Concat(fromJoins)
                                             .Concat(fromCriteria)
                                             .Concat(fromHavingCriteria)
                                             .Concat(fromColumnList)
                                             .Distinct());

            if (!string.IsNullOrWhiteSpace(joins))
            {
                _commandBuilder.Append(" " + joins);
            }
        }
Пример #2
0
        private void HandleJoins()
        {
            var joiner = new Joiner(JoinType.Inner, _schema);

            string dottedTables = RemoveSchemaFromQueryTableName();

            var fromTable = dottedTables.Contains('.')
                                ? joiner.GetJoinClauses(_tableName, dottedTables.Split('.').Reverse())
                                : Enumerable.Empty<string>();

            var fromCriteria = _query.Criteria != null
                                   ? joiner.GetJoinClauses(_tableName, _query.Criteria)
                                   : Enumerable.Empty<string>();

            var fromColumnList = _query.Columns.Any(r => !(r is SpecialReference))
                                     ? joiner.GetJoinClauses(_tableName, _query.Columns.OfType<ObjectReference>())
                                     : Enumerable.Empty<string>();

            if (_query.Criteria == null
                && (_query.Columns.Where(r => !(r is CountSpecialReference)).Count() == 0)) return;

            var joins = string.Join(" ", fromTable.Concat(fromCriteria).Concat(fromColumnList).Distinct());

            if (!string.IsNullOrWhiteSpace(joins))
            {
                _commandBuilder.Append(" " + joins);
            }
        }
        protected virtual void HandleJoins()
        {
            if (_whereCriteria == SimpleExpression.Empty && _havingCriteria == SimpleExpression.Empty &&
                (!_query.Clauses.OfType <JoinClause>().Any()) &&
                (_columns.All(r => (r is CountSpecialReference))))
            {
                return;
            }

            var joiner = new Joiner(JoinType.Inner, _schema);

            string dottedTables = RemoveSchemaFromQueryTableName();

            var fromTable = dottedTables.Contains('.')
                                ? joiner.GetJoinClauses(_tableName, dottedTables.Split('.').Reverse())
                                : Enumerable.Empty <string>();

            var joinClauses = _query.Clauses.OfType <JoinClause>().ToArray();
            var fromJoins   = joiner.GetJoinClauses(joinClauses, _commandBuilder);

            var fromCriteria = joiner.GetJoinClauses(_tableName, _whereCriteria);

            var fromHavingCriteria = joiner.GetJoinClauses(_tableName, _havingCriteria);

            var fromColumnList = _columns.Any(r => !(r is SpecialReference))
                                     ? GetJoinClausesFromColumnList(joinClauses, joiner)
                                     : Enumerable.Empty <string>();

            var joinList = fromTable.Concat(fromJoins).Concat(fromCriteria).Concat(fromHavingCriteria).Concat(fromColumnList).Select(s => s.Trim()).Distinct().ToList();

            var leftJoinList = joinList.Where(s => s.StartsWith("LEFT ", StringComparison.OrdinalIgnoreCase)).ToList();

            foreach (var leftJoin in leftJoinList)
            {
                if (joinList.Any(s => s.Equals(leftJoin.Substring(5), StringComparison.OrdinalIgnoreCase)))
                {
                    joinList.Remove(leftJoin);
                }
            }

            var joins = string.Join(" ", joinList);

            if (!string.IsNullOrWhiteSpace(joins))
            {
                _commandBuilder.Append(" " + joins);
            }
        }
Пример #4
0
        private void HandleJoins()
        {
            if (_whereCriteria == SimpleExpression.Empty && _havingCriteria == SimpleExpression.Empty &&
                (!_query.Clauses.OfType <JoinClause>().Any()) &&
                (_columns.Where(r => !(r is CountSpecialReference)).Count() == 0))
            {
                return;
            }

            var joiner = new Joiner(JoinType.Inner, _schema);

            string dottedTables = RemoveSchemaFromQueryTableName();

            var fromTable = dottedTables.Contains('.')
                                ? joiner.GetJoinClauses(_tableName, dottedTables.Split('.').Reverse())
                                : Enumerable.Empty <string>();

            var fromJoins = joiner.GetJoinClauses(_query.Clauses.OfType <JoinClause>(), _commandBuilder);

            var fromCriteria = joiner.GetJoinClauses(_tableName, _whereCriteria);

            var fromHavingCriteria = joiner.GetJoinClauses(_tableName, _havingCriteria);

            var fromColumnList = _columns.Any(r => !(r is SpecialReference))
                                     ? joiner.GetJoinClauses(_tableName, GetObjectReferences(_columns), JoinType.Outer)
                                     : Enumerable.Empty <string>();

            var joins = string.Join(" ", fromTable.Concat(fromJoins)
                                    .Concat(fromCriteria)
                                    .Concat(fromHavingCriteria)
                                    .Concat(fromColumnList)
                                    .Distinct());

            if (!string.IsNullOrWhiteSpace(joins))
            {
                _commandBuilder.Append(" " + joins);
            }
        }
Пример #5
0
        private void HandleJoins()
        {
            if (_whereCriteria == SimpleExpression.Empty && _havingCriteria == SimpleExpression.Empty
                && (!_query.Clauses.OfType<JoinClause>().Any())
                && (_columns.All(r => (r is CountSpecialReference)))) return;

            var joiner = new Joiner(JoinType.Inner, _schema);

            string dottedTables = RemoveSchemaFromQueryTableName();

            var fromTable = dottedTables.Contains('.')
                                ? joiner.GetJoinClauses(_tableName, dottedTables.Split('.').Reverse())
                                : Enumerable.Empty<string>();

            var joinClauses = _query.Clauses.OfType<JoinClause>().ToArray();
            var fromJoins = joiner.GetJoinClauses(joinClauses, _commandBuilder);

            var fromCriteria = joiner.GetJoinClauses(_tableName, _whereCriteria);

            var fromHavingCriteria = joiner.GetJoinClauses(_tableName, _havingCriteria);

            var fromColumnList = _columns.Any(r => !(r is SpecialReference))
                                     ? joiner.GetJoinClauses(_tableName, GetObjectReferences(_columns).Where(o => !joinClauses.Any(j => o.GetOwner().Equals(j.Table))), JoinType.Outer)
                                     : Enumerable.Empty<string>();

            var joinList = fromTable.Concat(fromJoins).Concat(fromCriteria).Concat(fromHavingCriteria).Concat(fromColumnList).Select(s => s.Trim()).Distinct().ToList();

            var leftJoinList = joinList.Where(s => s.StartsWith("LEFT ", StringComparison.OrdinalIgnoreCase)).ToList();

            foreach (var leftJoin in leftJoinList)
            {
                if (joinList.Any(s => s.Equals(leftJoin.Substring(5), StringComparison.OrdinalIgnoreCase)))
                {
                    joinList.Remove(leftJoin);
                }
            }

            var joins = string.Join(" ", joinList);

            if (!string.IsNullOrWhiteSpace(joins))
            {
                _commandBuilder.Append(" " + joins);
            }
        }
Пример #6
0
        private IEnumerable<string> GetJoinClausesFromColumnList(IEnumerable<JoinClause> joinClauses, Joiner joiner)
        {
            return joiner.GetJoinClauses(_tableName, GetObjectReferences(_columns)
                .Where(o => !joinClauses.Any(j => ObjectReferenceIsInJoinClause(j, o))), JoinType.Outer);

        }
 GetJoinClausesFromColumnList(IEnumerable <JoinClause> joinClauses, Joiner joiner)
 {
     return(joiner.GetJoinClauses(_tableName, GetObjectReferences(_columns)
                                  .Where(o => !joinClauses.Any(j => ObjectReferenceIsInJoinClause(j, o))), JoinType.Outer));
 }