protected string GetFullyQualifiedColumnName(MemberInfo member, Type declaringType)
        {
            if (_tablePrefix)
            {
                Table table = _tables.FindTable(declaringType);

                if (table == null)
                {
                    string msg = string.Format("The property '{0} -> {1}' you are trying to reference in the '{2}' statement belongs to an entity that has not been included in your query.  To reference this property, you must join the '{0}' entity using the Join or Graph method.",
                                               declaringType,
                                               member.Name,
                                               PrefixText);

                    throw new DataMappingException(msg);
                }

                string columnName = DataHelper.GetColumnName(declaringType, member.Name, _useAltName);
                return(_dialect.CreateToken(string.Format("{0}.{1}", table.Alias, columnName)));
            }
            else
            {
                string columnName = DataHelper.GetColumnName(declaringType, member.Name, _useAltName);
                return(_dialect.CreateToken(columnName));
            }
        }
Exemple #2
0
        public virtual string BuildQuery(bool useAltName)
        {
            if (!string.IsNullOrEmpty(_constantOrderByClause))
            {
                return(_constantOrderByClause);
            }

            StringBuilder sb = new StringBuilder();

            foreach (var sort in _sortExpressions)
            {
                if (sb.Length > 0)
                {
                    sb.Append(",");
                }

                Table table = _tables.FindTable(sort.DeclaringType);

                if (table == null)
                {
                    string msg = string.Format("The property '{0} -> {1}' you are trying to reference in the 'ORDER BY' statement belongs to an entity that has not been joined in your query.  To reference this property, you must join the '{0}' entity using the Join method.",
                                               sort.DeclaringType.Name,
                                               sort.PropertyName);

                    throw new DataMappingException(msg);
                }

                string columnName = DataHelper.GetColumnName(sort.DeclaringType, sort.PropertyName, useAltName);

                if (!useAltName)
                {
                    sb.Append(_dialect.CreateToken(string.Format("{0}.{1}", table.Alias, columnName)));
                }

                else
                {
                    sb.Append(_dialect.CreateToken(string.Format("{0}", columnName)));
                }

                if (sort.Direction == SortDirection.Desc)
                {
                    sb.Append(" DESC");
                }
            }

            if (sb.Length > 0)
            {
                sb.Insert(0, " ORDER BY ");
            }

            return(sb.ToString());
        }
Exemple #3
0
        public string Generate()
        {
            StringBuilder sql = new StringBuilder();

            sql.AppendFormat("UPDATE {0} SET ", Dialect.CreateToken(Target));

            int startIndex = sql.Length;

            foreach (DbParameter p in Command.Parameters)
            {
                var c = Columns.GetByColumnName(p.ParameterName);

                if (c == null)
                {
                    break; // All SET columns have been added
                }
                if (sql.Length > startIndex)
                {
                    sql.Append(",");
                }

                if (!c.ColumnInfo.IsAutoIncrement)
                {
                    sql.AppendFormat("{0}={1}{2}", Dialect.CreateToken(c.ColumnInfo.Name), Command.ParameterPrefix(), p.ParameterName);
                }
            }

            sql.AppendFormat(" {0}", WhereClause);

            return(sql.ToString());
        }
Exemple #4
0
        public void BuildFromClause(StringBuilder sql)
        {
            // BASE TABLE
            Table baseTable = Tables[0];

            sql.AppendFormat(" FROM {0} {1} ", Dialect.CreateToken(baseTable.Name), Dialect.CreateToken(baseTable.Alias));
        }
Exemple #5
0
 public void BuildJoinClauses(StringBuilder sql)
 {
     // JOINS
     for (int i = 1; i < Tables.Count; i++)
     {
         if (Tables[i].JoinType != JoinType.None)
         {
             sql.AppendFormat("{0} {1} {2} {3} ",
                              TranslateJoin(Tables[i].JoinType),
                              Dialect.CreateToken(Tables[i].Name),
                              Dialect.CreateToken(Tables[i].Alias),
                              Tables[i].JoinClause);
         }
     }
 }
Exemple #6
0
        public virtual string Generate()
        {
            StringBuilder sql    = new StringBuilder();
            StringBuilder values = new StringBuilder(") VALUES (");

            sql.AppendFormat("INSERT INTO {0} (", Dialect.CreateToken(Target));

            int sqlStartIndex    = sql.Length;
            int valuesStartIndex = values.Length;

            foreach (DbParameter p in Command.Parameters)
            {
                var c = Columns.GetByColumnName(p.ParameterName);

                if (c == null)
                {
                    break; // All insert columns have been added
                }
                if (sql.Length > sqlStartIndex)
                {
                    sql.Append(",");
                }

                if (values.Length > valuesStartIndex)
                {
                    values.Append(",");
                }

                if (!c.ColumnInfo.IsAutoIncrement)
                {
                    sql.AppendFormat(Dialect.CreateToken(c.ColumnInfo.Name));
                    values.AppendFormat("{0}{1}", Command.ParameterPrefix(), p.ParameterName);
                }
            }

            values.Append(")");

            sql.Append(values);

            return(sql.ToString());
        }
Exemple #7
0
        public void BuildSelectClause(StringBuilder sql)
        {
            sql.Append("SELECT ");

            int startIndex = sql.Length;

            // COLUMNS
            foreach (Table join in Tables)
            {
                for (int i = 0; i < join.Columns.Count; i++)
                {
                    var c = join.Columns[i];

                    if (sql.Length > startIndex)
                    {
                        sql.Append(",");
                    }

                    if (join is View)
                    {
                        string token = string.Concat(join.Alias, ".", NameOrAltName(c.ColumnInfo));
                        sql.Append(Dialect.CreateToken(token));
                    }
                    else
                    {
                        string token = string.Concat(join.Alias, ".", c.ColumnInfo.Name);
                        sql.Append(Dialect.CreateToken(token));

                        if (UseAltName && c.ColumnInfo.AltName != null && c.ColumnInfo.AltName != c.ColumnInfo.Name)
                        {
                            string altName = c.ColumnInfo.AltName;
                            sql.AppendFormat(" AS {0}", altName);
                        }
                    }
                }
            }
        }
Exemple #8
0
        public void BuildSelectClause(StringBuilder sql)
        {
            sql.Append("SELECT ");

            int startIndex = sql.Length;

            // COLUMNS
            foreach (Table join in Tables)
            {
                // Track added view columns to avoid adding duplicates to the select statement
                // Duplicates can occur when multiple members in a graph have a property that maps to a shared view column
                // Ex: Order -> OrderItem: if both the Order and OrderItem classes had a property that mapped to a ShipDate column in the orders view:
                // This should be allowed, but the ShipDate column should not be selected twice.
                var viewColumnHash = new HashSet <string>();

                for (int i = 0; i < join.Columns.Count; i++)
                {
                    var c = join.Columns[i];

                    if (join is View)
                    {
                        string nameOrAltName = NameOrAltName(c.ColumnInfo);

                        if (!viewColumnHash.Contains(nameOrAltName))
                        {
                            viewColumnHash.Add(nameOrAltName);
                        }
                        else
                        {
                            continue;   // Do not add duplicate
                        }
                        if (sql.Length > startIndex)
                        {
                            sql.Append(",");
                        }

                        string token = string.Concat(join.Alias, ".", nameOrAltName);
                        sql.Append(Dialect.CreateToken(token));
                    }
                    else
                    {
                        if (!viewColumnHash.Contains(c.ColumnInfo.Name))
                        {
                            viewColumnHash.Add(c.ColumnInfo.Name);
                        }
                        else
                        {
                            continue;   // Do not add duplicate
                        }
                        if (sql.Length > startIndex)
                        {
                            sql.Append(",");
                        }

                        string token = string.Concat(join.Alias, ".", c.ColumnInfo.Name);
                        sql.Append(Dialect.CreateToken(token));

                        if (UseAltName && c.ColumnInfo.AltName != null && c.ColumnInfo.AltName != c.ColumnInfo.Name)
                        {
                            string altName = c.ColumnInfo.AltName;
                            sql.AppendFormat(" AS {0}", altName);
                        }
                    }
                }
            }
        }