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);
     }
 }
示例#3
0
 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));
        }
示例#6
0
        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);
 }