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 ) }); }
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); }
/// <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); }
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); }
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); }