示例#1
0
        public static Statement CreateStatement(Delete delete, IEntityMapping mapping)
        {
            Statement statement = null;
            var       writer    = SqlWriter.CreateWriter().Delete;

            if (!delete.AllowMultiple)
            {
                writer.Top(1);
            }

            writer.From.QuotedName(delete.Table.Name);

            switch (delete.Filter)
            {
            case Delete.FilterType.Where:
                statement = WhereWriter <TEntity> .CreateStatement(delete.Where, mapping);

                writer.Where.Write(statement.Text);
                break;

            case Delete.FilterType.Select:
                var keyColumn = mapping.Key.GetColumnName();
                statement = SelectWriter <TEntity> .CreateStatement(delete.Select, mapping);

                writer.Where.Exists.OpenBlock.Trim().Select.QuotedName(keyColumn).From.OpenBlock.Trim().
                Write(statement.Text).Trim().CloseBlock.As.SubQueryAlias.Where.SubQueryColumn(keyColumn).Equal.QuotedName(delete.Table.Name, keyColumn).Trim().CloseBlock.Flush();
                break;
            }

            return(new Statement(writer.ToString(), Statement.StatementType.Text,
                                 Statement.ResultType.None, statement.Parameters));
        }
示例#2
0
        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());
        }
示例#3
0
        public static Statement CreateStatement(Update update, IEntityMapping mapping)
        {
            var writer     = new SqlWriter();
            var parameters = new Dictionary <string, object>();

            writer.Update.QuotedName(update.Table.Name).Set.
            ParameterAssignmentList(x => x.Comma.Flush(), update.Assignment.ToDictionary(x => x.Key, x => parameters.AddWithUniquelyNamedKey(x.Value)));

            var where = WhereWriter <TEntity> .CreateStatement(update.Where, mapping);

            writer.Where.Write(where.Text);
            parameters.AddRange(where.Parameters);

            return(new Statement(writer.ToString(), Statement.StatementType.Text, Statement.ResultType.None, parameters));
        }
示例#4
0
        public static Statement CreateStatement(Sync sync, IEntityMapping mapping)
        {
            var writer = new SqlWriter();
            IDictionary <string, object> parameters = new Dictionary <string, object>();
            var fields = sync.Target.Projection.Zip(sync.Source.Projection, (t, s) => new { Target = t.Projection, Source = s.Projection })
                         .Where(x => !sync.ExcludedFields.Any(y => (y.HasKey ? y.Key : y.Name) == (x.Target.Field.HasKey ? x.Target.Field.Key : x.Target.Field.Name))).ToList();

            writer.Update.QuotedName(sync.Target.From.Alias).Set
            .ExpressionList(x => x.Comma.Flush(), fields, (f, s) => s.
                            Write(ProjectionWriter <TEntity> .CreateStatement(f.Target, mapping).MergeParameters(parameters).Text).Equal.
                            Write(ProjectionWriter <TEntity> .CreateStatement(f.Source, mapping).MergeParameters(parameters).Text))
            .From.QuotedName(sync.Target.From.Table.Name).QuotedName(sync.Target.From.Alias).Inner.Join
            .QuotedName(sync.Source.From.Table.Name).QuotedName(sync.Source.From.Alias)
            .On.Write(ProjectionWriter <TEntity> .CreateStatement(sync.TargetKey, mapping).MergeParameters(parameters).Text).Equal
            .Write(ProjectionWriter <TEntity> .CreateStatement(sync.SourceKey, mapping).MergeParameters(parameters).Text)
            .Do(sync.Source.HasWhere, x => x.And.Write(WhereWriter <TEntity> .CreateStatement(sync.Source.Where, mapping).MergeParameters(parameters).Text))
            .Do(sync.Target.HasWhere, x => x.Where.Write(WhereWriter <TEntity> .CreateStatement(sync.Target.Where, mapping).MergeParameters(parameters).Text));

            return(new Statement(writer.ToString(), Statement.StatementType.Text, Statement.ResultType.None, parameters));
        }
示例#5
0
        public static Statement CreateStatement(Operator @operator, IEntityMapping mapping)
        {
            var writer = new WhereWriter <TEntity>(mapping);

            return(writer.Write(@operator));
        }