protected string GetSelectedFields(SqlSelectInfo info) { var selectFields = info.SelectFields(); var fields = selectFields.Count == 0 ? "*" : string.Join(", ", selectFields); fields = info.Distinct() ? $"DISTINCT {fields}" : fields; return(_selectFieldsModificators.Aggregate(fields, (result, callback) => callback(result))); }
protected void AppendJoins(StringBuilder querySb, SqlSelectInfo info) { if (info.Joins().Count > 0) { var joins = _joinModificators.Aggregate(string.Join(SEPARATOR, info.Joins()), (result, callback) => callback(result)); querySb.Append(SEPARATOR).Append(joins); } }
private void CheckSelectedFields(SqlSelectInfo info) { foreach (var selectField in info.SelectFields()) { if (!_innerSqlSelect.Info.SelectFields().Any(f => f.Name == selectField.Name && f.EntityType == selectField.EntityType)) { throw new InvalidOperationException( $"'{selectField}' is not set in the inner select query."); } } }
protected void CheckAsAliases(SqlSelectInfo info) { // ReSharper disable PossibleMultipleEnumeration var allFields = info.SelectFields().Union(info.GroupByFields()).Union(info.OrderByFields()); var intersect = info.AllAliases.Select(a => a.Value).Intersect(allFields.Select(a => a.AsAlias)); if (intersect.Any()) { throw new IncorrectAliasException($"The following user aliases are incorrect: {string.Join(", ", intersect)}."); } // ReSharper restore PossibleMultipleEnumeration }
public override string Build(SqlSelectInfo info, bool parametric) { CheckAsAliases(info); var sb = new StringBuilder("SELECT").Append(SEPARATOR_WITH_OFFSET) .Append(GetSelectedFields(info)).Append(SEPARATOR) .Append("FROM").Append(SEPARATOR_WITH_OFFSET) .Append(_tableName) .Append(" ").Append(info.Alias.Value); AppendJoins(sb, info); AppendWhere(sb, info, parametric); AppendGroupByFields(sb, info); AppendHaving(sb, info, parametric); AppendOrderByFields(sb, info); return(GetQueryString(sb)); }
public override string Build(SqlSelectInfo info, bool parametric) { CheckAsAliases(info); CheckSelectedFields(info); var innerSql = parametric ? _innerSqlSelect.ParametricSql : _innerSqlSelect.RawSql; var sb = new StringBuilder("SELECT").Append(SEPARATOR_WITH_OFFSET) .Append(GetSelectedFields(info)).Append(SEPARATOR) .Append("FROM") .Append(SEPARATOR).Append("(").Append(SEPARATOR_WITH_OFFSET) .Append(innerSql.Replace(SEPARATOR, SEPARATOR_WITH_OFFSET)) .Append(SEPARATOR).Append(") AS ").Append(info.Alias.Value); AppendJoins(sb, info); AppendWhere(sb, info, parametric); AppendGroupByFields(sb, info); AppendHaving(sb, info, parametric); AppendOrderByFields(sb, info); return(GetQueryString(sb)); }
public abstract string Build(SqlSelectInfo info, bool parametric);
protected void AppendOrderByFields(StringBuilder querySb, SqlSelectInfo info) { AppendFields(querySb, "ORDER BY", info.OrderByFields(), _orderByFieldsModificators); }
protected void AppendGroupByFields(StringBuilder querySb, SqlSelectInfo info) { AppendFields(querySb, "GROUP BY", info.GroupByFields(), _groupByFieldsModificators); }
protected void AppendHaving(StringBuilder querySb, SqlSelectInfo info, bool parametric) { AppendFilter(querySb, "HAVING", info.Having(), parametric, _havingModificators); }
protected void AppendWhere(StringBuilder querySb, SqlSelectInfo info, bool parametric) { AppendFilter(querySb, "WHERE", info.Where(), parametric, _whereModificators); }