コード例 #1
0
        private void VisitProjection(Projection projection)
        {
            var statement = ProjectionWriter <TEntity> .CreateStatement(projection, _mapping);

            _sql.Write(statement.Text);
            _parameters.AddRange(statement.Parameters);
        }
コード例 #2
0
ファイル: SelectWriter.cs プロジェクト: alexmaris/Gribble
        private static string BuildWhereClause(Select select, IEntityMapping mapping, IDictionary <string, object> parameters)
        {
            if (!select.HasWhere && !select.HasSetOperations)
            {
                return(null);
            }

            var writer = new SqlWriter();

            if (select.HasWhere)
            {
                writer.Write(BuildOperators(select.Where, mapping, parameters));
            }

            if (select.HasSetOperations)
            {
                foreach (var setOperation in select.SetOperatons)
                {
                    var statement = CreateStatement(setOperation.Select, mapping);
                    parameters.AddRange(statement.Parameters);
                    if (!writer.Empty)
                    {
                        writer.And.Flush();
                    }
                    if (setOperation.Type == SetOperation.OperationType.Compliment)
                    {
                        writer.Not.Flush();
                    }
                    writer.Exists.OpenBlock.Trim().Write(statement.Text).Trim().CloseBlock.Flush();
                }
            }

            return(writer.ToString());
        }
コード例 #3
0
ファイル: InsertWriter.cs プロジェクト: alexmaris/Gribble
        public static Statement CreateStatement(Insert insert, IEntityMapping mapping)
        {
            var writer = new SqlWriter();
            IDictionary <string, object> parameters = null;

            writer.InsertInto.QuotedName(insert.Into.Name);

            var resultType = Statement.ResultType.None;

            switch (insert.Type)
            {
            case Insert.SetType.Values:
                writer.OpenBlock.Trim().FieldList(x => x.Comma.Flush(), insert.Values.Keys).Trim().CloseBlock.Flush();
                parameters = new Dictionary <string, object>();
                writer.Values.OpenBlock.Trim().ParameterList(x => x.Comma.Flush(), insert.Values.Values.Select(x => parameters.AddWithUniquelyNamedKey(x))).
                Trim().CloseBlock.Flush();
                if (insert.HasIdentityKey)
                {
                    writer.Trim().QuerySeperator.Select.ScopeIdentity(typeof(int));
                    resultType = Statement.ResultType.Scalar;
                }
                break;

            case Insert.SetType.Query:
                var select = SelectWriter <TEntity> .CreateStatement(insert.Query, mapping);

                parameters = select.Parameters;
                writer.OpenBlock.Trim().FieldList(x => x.Comma.Flush(), SelectWriter <TEntity> .BuildProjection(insert.Query, mapping, parameters)).Trim().CloseBlock.Flush();
                writer.Write(select.Text);
                break;
            }

            return(new Statement(writer.ToString(), Statement.StatementType.Text, resultType, parameters));
        }
コード例 #4
0
ファイル: SelectWriter.cs プロジェクト: alexmaris/Gribble
        private static string BuildOperators(Operator @operator, IEntityMapping mapping, IDictionary <string, object> parameters)
        {
            var writer    = new SqlWriter();
            var statement = WhereWriter <TEntity> .CreateStatement(@operator, mapping);

            parameters.AddRange(statement.Parameters);
            writer.Write(statement.Text);
            return(writer.ToString());
        }
コード例 #5
0
ファイル: SelectWriter.cs プロジェクト: alexmaris/Gribble
        private static string BuildOrderBy(IEnumerable <OrderBy> orderBy, IEntityMapping mapping, IDictionary <string, object> parameters)
        {
            if (orderBy == null || !orderBy.Any())
            {
                return("");
            }
            var writer = new SqlWriter();

            orderBy.Select((x, i) => new { Last = i == orderBy.Count() - 1, OrderBy = x }).ToList().ForEach(x =>
            {
                if (x.OrderBy.Type == OrderBy.SourceType.Operator)
                {
                    writer.Case.When.Write(BuildOperators(x.OrderBy.Operator, mapping, parameters)).Then
                    .Value(1, SqlDbType.Int).Else.Value(0, SqlDbType.Int).End.Flush();
                }
                else
                {
                    writer.Write(BuildProjection(x.OrderBy.Projection, mapping, parameters));
                }
                writer.Do(x.OrderBy.Order == Order.Descending, y => y.Descending.Flush(), y => y.Ascending.Flush()).Do(!x.Last, y => y.Trim().Comma.Flush());
            });
            return(writer.ToString());
        }