private void JoinToString(Join join, StringBuilder sb, bool modifySelf) { sb.Append(join.GetKeyword()); sb.Append(' '); sb.Append(SqlSyntax.AutoBracketValid(join.Table)); // joinAlias belirtilmişse ekle if (!string.IsNullOrEmpty(join.Name)) { sb.Append(' '); sb.Append(join.Name); } if (!ReferenceEquals(null, join.OnCriteria) && !join.OnCriteria.IsEmpty) { sb.Append(" ON ("); if (modifySelf) sb.Append(join.OnCriteria.ToString(this)); else sb.Append(join.OnCriteria.ToStringIgnoreParams()); sb.Append(')'); } }
public SqlQuery Join(Join join) { if (join == null) throw new ArgumentNullException("join"); var sb = new StringBuilder(); JoinToString(join, sb, modifySelf: false); var expression = sb.ToString(); string existingExpression; if (!string.IsNullOrEmpty(join.Name) && aliasExpressions != null && aliasExpressions.TryGetValue(join.Name, out existingExpression)) { if (expression == existingExpression) return this; throw new InvalidOperationException(String.Format("Query already has a join '{0}' with expression '{1}'. " + "Attempted join expression is '{2}'", join.Name, existingExpression, expression)); } if (from.Length > 0) from.Append(" \n"); JoinToString(join, from, modifySelf: true); if (!string.IsNullOrEmpty(join.Name)) { AliasExpressions[join.Name] = expression; var haveJoins = join as IHaveJoins; if (haveJoins != null) AliasWithJoins[join.Name] = haveJoins; } return this; }
public SqlQuery EnsureJoin(Join join) { if (join == null) throw new ArgumentNullException("join"); var ext = (ISqlQueryExtensible)this; var joinAlias = join.Name; if (aliasExpressions != null && aliasExpressions.ContainsKey(joinAlias)) return this; if (join.Joins != null && join.ReferencedAliases != null) foreach (var alias in join.ReferencedAliases) { if (String.Compare(alias, joinAlias, StringComparison.OrdinalIgnoreCase) == 0) continue; Join other; if (join.Joins.TryGetValue(alias, out other)) EnsureJoin(other); } return Join(join); }