Example #1
0
        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(')');
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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);
        }