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); } }
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); } }
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); } }
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); } }
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)); }