Exemple #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(')');
            }
        }
        public static SqlQuery EnsureJoin(this SqlQuery query, Join join)
        {
            if (join == null)
                throw new ArgumentNullException("join");

            var ext = (ISqlQueryExtensible)query;

            var joinAlias = join.Name;
            var aliases = ext.Aliases;
            if (aliases.ContainsKey(joinAlias))
                return query;

            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(query, other);
                }

            query.Join(join);

            return query;
        }
Exemple #3
0
        public SqlQuery Join(Join join)
        {
            if (join == null)
                throw new ArgumentNullException("join");

            var sb = new StringBuilder();
            JoinToString(join, sb, modifySelf: false);
            string expression = sb.ToString();
            string existingExpression;

            if (!string.IsNullOrEmpty(join.Name) &&
                aliases != null && aliases.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))
                ((ISqlQueryExtensible)this).Aliases[join.Name] = expression;

            return this;
        }
Exemple #4
0
        /// <summary>
        /// Joins the specified join.
        /// </summary>
        /// <param name="join">The join.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">join</exception>
        /// <exception cref="InvalidOperationException">Another join with different expression is already in the query.</exception>
        public SqlQuery Join(Join join)
        {
            if (join == null)
            {
                throw new ArgumentNullException("join");
            }

            var sb = new StringBuilder();

            JoinToString(join, sb, modifySelf: false);
            string expression = sb.ToString();

            if (!string.IsNullOrEmpty(join.Name) &&
                aliasExpressions != null && aliasExpressions.TryGetValue(join.Name, out string 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;

                if (join as IHaveJoins != null)
                {
                    AliasWithJoins[join.Name] = join as IHaveJoins;
                }
            }

            return(this);
        }
        public static TField OfJoin <TField>(this TField field, Join join, string origin, FieldFlags extraFlags = FieldFlags.Internal)
            where TField : Field
        {
            if (join == null)
            {
                throw new ArgumentNullException("join");
            }

            field.Expression = join.Name + "." + origin;

            if (field.Flags == FieldFlags.Default)
            {
                field.Flags = FieldFlags.Foreign | extraFlags;
            }
            else
            {
                field.Flags = field.Flags | FieldFlags.Foreign | extraFlags;
            }

            return(field);
        }
Exemple #6
0
        public SqlQuery Join(Join join)
        {
            if (join == null)
            {
                throw new ArgumentNullException("join");
            }

            if (from.Length > 0)
            {
                from.Append(" \n");
            }

            from.Append(join.GetKeyword());
            from.Append(' ');
            from.Append(join.Table);

            // joinAlias belirtilmişse ekle
            if (!join.Name.IsNullOrEmpty())
            {
                from.Append(' ');
                from.Append(join.Name);

                if (aliases == null)
                {
                    aliases = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                }

                aliases.Add(join.Name);
            }

            if (!ReferenceEquals(null, join.OnCriteria) &&
                !join.OnCriteria.IsEmpty)
            {
                from.Append(" ON (");
                from.Append(join.OnCriteria.ToString(this));
                from.Append(')');
            }

            return(this);
        }
        public static SqlQuery EnsureJoin(this SqlQuery query, Join join)
        {
            if (join == null)
            {
                throw new ArgumentNullException("join");
            }

            var ext = (ISqlQueryExtensible)query;

            var joinAlias = join.Name;
            var aliases   = ext.Aliases;

            if (aliases.ContainsKey(joinAlias))
            {
                return(query);
            }

            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(query, other);
                    }
                }
            }

            query.Join(join);

            return(query);
        }
Exemple #8
0
        private void JoinToString(Join join, StringBuilder sb, bool modifySelf)
        {
            sb.Append(join.GetKeyword());
            sb.Append(' ');
            sb.Append(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 (!(join.OnCriteria is BinaryCriteria))
                {
                    sb.Append('(');
                }

                if (modifySelf)
                {
                    sb.Append(join.OnCriteria.ToString(this));
                }
                else
                {
                    sb.Append(join.OnCriteria.ToStringIgnoreParams());
                }

                if (!(join.OnCriteria is BinaryCriteria))
                {
                    sb.Append(')');
                }
            }
        }
Exemple #9
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 (join.OnCriteria is object &&
                !join.OnCriteria.IsEmpty)
            {
                sb.Append(" ON ");
                if (!(join.OnCriteria is BinaryCriteria))
                {
                    sb.Append('(');
                }

                if (modifySelf)
                {
                    sb.Append(join.OnCriteria.ToString(this));
                }
                else
                {
                    sb.Append(join.OnCriteria.ToStringIgnoreParams());
                }

                if (!(join.OnCriteria is BinaryCriteria))
                {
                    sb.Append(')');
                }
            }
        }
Exemple #10
0
        public SqlQuery EnsureJoin(Join join)
        {
            if (join == null)
            {
                throw new ArgumentNullException("join");
            }

            var joinAlias = join.Name;

            if (aliases != null && aliases.Contains(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);
                    }
                }
            }

            Join(join);

            return(this);
        }
Exemple #11
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);
        }