Ejemplo n.º 1
0
        /// <inheritdoc />
        public InOperation(
            [NotNull] Expression expression,
            [NotNull] ISqlDialect dialect,
            [NotNull] FilterParseHelpers parseHelper,
            bool skipBrackets
            ) : base(expression, dialect, skipBrackets)
        {
            var right = (CallExpression.Method.IsStatic
                                ? CallExpression.Arguments[0]
                                : CallExpression.Object) ?? throw new ArgumentException("Null object for Contains method");

            var enumerable = Expression.Lambda(right).Compile().DynamicInvoke() as IEnumerable;
            var values     = (enumerable ?? throw new InvalidOperationException("Expression was not evaluated to IEnumerable!"))
                             .Cast <object>()
                             .Select(val => new SimpleValueOperation(val, dialect, parseHelper))
                             .ToList();

            if (values.Count > 0)
            {
                _left = (CallExpression.Method.IsStatic
                                        ? parseHelper.ParseExpression(CallExpression.Arguments[1])
                                        : parseHelper.ParseExpression(CallExpression.Arguments[0])) ?? throw new ArgumentException("Null parameter for Contains method");

                _values = values;
            }
            else
            {
                _emptyEnumOperation = new SimpleBoolOperation(new SimpleValueOperation(true, Dialect, parseHelper), dialect);
            }
        }
 public SimpleValueOperation(
     object value,
     [NotNull] ISqlDialect dialect,
     [NotNull] FilterParseHelpers parseHelper) : base(dialect)
 {
     _parseHelper = parseHelper ?? throw new ArgumentNullException(nameof(parseHelper));
     Value        = value;
 }
 public ValueOperation(
     [NotNull] Expression expression,
     [NotNull] ISqlDialect dialect,
     [NotNull] FilterParseHelpers parseHelper
     ) : base(dialect)
 {
     _expression  = expression ?? throw new ArgumentNullException(nameof(expression));
     _parseHelper = parseHelper ?? throw new ArgumentNullException(nameof(parseHelper));
 }
 public LikeOperation(
     [NotNull] Expression expression,
     [NotNull] ISqlDialect dialect,
     [NotNull] FilterParseHelpers parseHelper,
     bool skipBrackets) : base(expression, dialect, skipBrackets)
 {
     _left  = parseHelper.ParseExpression(CallExpression.Arguments[0]);
     _right = parseHelper.ParseExpression(CallExpression.Arguments[1]);
 }
Ejemplo n.º 5
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.º 6
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);
        }
Ejemplo n.º 7
0
        public NotOperation(
            [NotNull] UnaryExpression expression,
            [NotNull] ISqlDialect dialect,
            [NotNull] FilterParseHelpers parseHelper
            ) : base(dialect)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            _expression = parseHelper.ParseExpression(expression.Operand.UnwrapConvert(), true);

            if (!(_expression is BinaryOperation || _expression is NotOperation || _expression is PseudoMethodCallOperation))
            {
                _expression = new UnaryToBinaryOperation(
                    expression.Operand,
                    _expression,
                    new SimpleValueOperation(expression.Operand.Type == typeof(bool) ? (object)true : 1, Dialect, parseHelper),
                    Dialect,
                    true
                    );
            }
        }
Ejemplo n.º 8
0
        /// <inheritdoc />
        public virtual DeleteStatement Delete <TParam>(string schema, string table, Expression <Func <TParam, bool> > filterExpression, FilterParseHelpers filterParseHelpers)
        {
            var generatorContext = new GeneratorContext();

            var tableAlias = filterParseHelpers.GetTableAlias(filterExpression);

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

            var filter = filterParseHelpers.ParseFilter(filterExpression.Body);

            sb.Append(" WHERE ");
            filter.AppendSql(sb, generatorContext);

            return(new DeleteStatement
            {
                Statement = sb.ToString(),
                Params = generatorContext.Params.ToDictionary(
                    p => p.Value,
                    p => p.Key
                    )
            });
        }
Ejemplo n.º 9
0
        /// <inheritdoc />
        public WhereStatement Where <TParam>(Expression <Func <TParam, bool> > filterExpression, FilterParseHelpers filterParseHelpers)
        {
            var generatorContext = new GeneratorContext();

            var sb = new StringBuilder();

            var filter = filterParseHelpers.ParseFilter(filterExpression.Body);

            filter.AppendSql(sb, generatorContext);

            return(new WhereStatement
            {
                Statement = sb.ToString(),
                // reverse dictionary
                Params = generatorContext.Params.ToDictionary(
                    p => p.Value,
                    p => p.Key
                    )
            });
        }