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)); } }
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()); }
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()); }
public void BuildFromClause(StringBuilder sql) { // BASE TABLE Table baseTable = Tables[0]; sql.AppendFormat(" FROM {0} {1} ", Dialect.CreateToken(baseTable.Name), Dialect.CreateToken(baseTable.Alias)); }
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); } } }
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()); }
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); } } } } }
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); } } } } }