Ejemplo n.º 1
0
        public virtual UpdateStatement Update <TParam>(
            string schema,
            string table,
            Expression <Func <TParam> > updateAction,
            Expression <Func <TParam, bool> > filterExpression,
            FilterParseHelpers filterParseHelpers,
            AssigmentParseHelpers assigmentParseHelpers
            )
        {
            var generatorContext = new GeneratorContext();

            var tableAlias   = filterParseHelpers.GetTableAlias(filterExpression);
            var updateParams = assigmentParseHelpers.ParseAssigment(updateAction.Body);

            var sb = new StringBuilder("UPDATE ")
                     .Append(GetEscapedTableName(table, schema, tableAlias))
                     .Append(" SET ");

            var first = updateParams.Assigments.First();

            foreach (var assigment in updateParams.Assigments)
            {
                if (assigment != first)
                {
                    sb.Append(", ");
                }

                generatorContext.ColumnsMappings[assigment.ColumnName] = assigment.Name;

                sb.Append(GetEscapedParameterName(assigment.ColumnName, tableAlias))
                .Append(" ")
                .Append(AssignSign)
                .Append(" ");

                assigment.AppendSql(sb, generatorContext);
            }

            if (filterExpression != null)
            {
                var filter = filterParseHelpers.ParseFilter(filterExpression.Body);
                sb.Append(" WHERE ");
                filter.AppendSql(sb, generatorContext);
            }

            return(new UpdateStatement
            {
                Statement = sb.ToString(),
                ColumnsMap = generatorContext.ColumnsMappings,
                Params = generatorContext.Params.ToDictionary(
                    p => p.Value,
                    p => p.Key
                    )
            });
        }
Ejemplo n.º 2
0
        public NotOperation(
            [NotNull] UnaryExpression expression,
            [NotNull] string name,
            [NotNull] ISqlDialect dialect,
            [NotNull] INameConverter nameConverter,
            [NotNull] AssigmentParseHelpers assigmentParseHelpers
            ) : base(name, dialect, nameConverter)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            _operation = assigmentParseHelpers.ParseExpression(expression.Operand.UnwrapConvert(), name, true);
        }
Ejemplo n.º 3
0
        /// <inheritdoc />
        public CustomColumnOperation(
            [NotNull] MethodCallExpression expression,
            [NotNull] ISqlDialect dialect,
            [NotNull] INameConverter nameConverter,
            [NotNull] AssigmentParseHelpers assigmentParseHelpers
            ) : base(null, dialect, nameConverter)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            Name = expression.Arguments[1].NodeType == ExpressionType.Constant
                                ? ((ConstantExpression)expression.Arguments[1]).Value as string
                                : throw new InvalidOperationException();
            _operation = assigmentParseHelpers.ParseExpression(expression.Arguments[2], Name, true);
        }
Ejemplo n.º 4
0
        public BinaryOperation(
            [NotNull] BinaryExpression expression,
            [NotNull] Expression originalExpression,
            [NotNull] string name,
            [NotNull] ISqlDialect dialect,
            [NotNull] AssigmentParseHelpers assigmentParseHelpers,
            [NotNull] INameConverter nameConverter,
            bool skipBrackets
            ) : base(name, dialect, nameConverter)
        {
            _expression         = expression ?? throw new ArgumentNullException(nameof(expression));
            _originalExpression = originalExpression ?? throw new ArgumentNullException(nameof(originalExpression));
            _skipBrackets       = skipBrackets;

            _left  = assigmentParseHelpers.ParseExpression(_expression.Left, name);
            _right = assigmentParseHelpers.ParseExpression(_expression.Right, name);
        }
Ejemplo n.º 5
0
        public SqlGenerator(
            [NotNull] ISqlDialect dialect,
            [NotNull] INameConverter nameConverter,
            [CanBeNull] ILoggerFactory loggerFactory
            )
        {
            if (dialect == null)
            {
                throw new ArgumentNullException(nameof(dialect));
            }

            if (nameConverter == null)
            {
                throw new ArgumentNullException(nameof(nameConverter));
            }

            _dialect               = dialect;
            _logger                = loggerFactory?.CreateLogger <SqlGenerator>();
            _filterParseHelpers    = new FilterParseHelpers(_dialect, nameConverter);
            _assigmentParseHelpers = new AssigmentParseHelpers(_dialect, nameConverter);
        }