protected virtual Expression VisitDelete(SqlDeleteExpression deleteExpression) { var where = Visit(deleteExpression.Where); if (deleteExpression.Where != where) { return(new SqlDeleteExpression(deleteExpression.Table, deleteExpression.Alias, where)); } return(deleteExpression); }
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { var projection = deleteExpression.Source as SqlProjectionExpression; if (projection == null) { return deleteExpression; } if (projection.Select.From.NodeType != (ExpressionType)SqlExpressionType.Table) { throw new NotSupportedException(); } var table = (SqlTableExpression)projection.Select.From; var alias = table.Alias; var where = AliasReferenceReplacer.Replace(projection.Select.Where, alias, table.Name); return new SqlDeleteExpression(table, where); }
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { SqlDeleteExpression current; if (!TryGetCurrent(deleteExpression, out current)) { return(deleteExpression); } result = result && (current.Alias == deleteExpression.Alias && current.Table == deleteExpression.Table); if (result) { currentObject = current.Where; Visit(deleteExpression.Where); currentObject = current; } return(deleteExpression); }
public abstract void Delete(SqlDeleteExpression deleteExpression);
protected override Expression VisitDelete(SqlDeleteExpression expression) { SqlDeleteExpression current; if (!TryGetCurrent(expression, out current)) { return expression; } if (!(this.result &= current.NodeType == expression.NodeType)) { return expression; } if (!(this.result &= current.Type == expression.Type)) { return expression; } this.currentObject = current.Source; this.Visit(expression.Source); if (!this.result) { return expression; } this.currentObject = current.Where; this.Visit(expression.Where); if (!this.result) { return expression; } this.currentObject = current; return expression; }
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { this.Write("DELETE "); this.Write("FROM "); this.Visit(deleteExpression.Table); this.WriteLine(); this.Write(" WHERE "); this.WriteLine(); this.ignoreAlias = deleteExpression.Alias; this.replaceAlias = deleteExpression.Table.Name; this.Visit(deleteExpression.Where); this.ignoreAlias = ""; return deleteExpression; }
protected virtual Expression VisitDelete(SqlDeleteExpression deleteExpression) { var source = this.Visit(deleteExpression.Source); var where = this.Visit(deleteExpression.Where); if (deleteExpression.Source != source || deleteExpression.Where != where) { return new SqlDeleteExpression(source, where); } return deleteExpression; }
protected virtual Expression VisitDelete(SqlDeleteExpression deleteExpression) { var where = this.Visit(deleteExpression.Where); if (deleteExpression.Where != where) { return new SqlDeleteExpression(deleteExpression.Table, deleteExpression.Alias, where); } return deleteExpression; }
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { return deleteExpression; }
public abstract Task DeleteAsync(SqlDeleteExpression deleteExpression, CancellationToken cancellationToken);
public abstract Task DeleteAsync(SqlDeleteExpression deleteExpression);
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { return(base.VisitDelete(deleteExpression)); }
protected override Expression VisitUpdate(SqlUpdateExpression expression) { if (!expression.RequiresIdentityInsert) { return base.VisitUpdate(expression); } var tableName = ((SqlTableExpression)expression.Source).Name; var typeDescriptor = this .typeDescriptorProvider .GetTypeDescriptors() .Single(c => c.PersistedName == tableName); var insertedColumns = expression .Assignments .OfType<SqlAssignExpression>() .Select(c => new { name = ((SqlColumnExpression)c.Target).Name, value = c.Value, propertyDescriptor = typeDescriptor.GetPropertyDescriptorByColumnName(((SqlColumnExpression)c.Target).Name) }) .ToList(); var columnInfos = QueryBinder .GetColumnInfos(this.typeDescriptorProvider, typeDescriptor.PersistedProperties.Where(c => insertedColumns.All(d => d.propertyDescriptor != c))) .ToList(); var visitedUpdated = (SqlUpdateExpression)base.VisitUpdate(expression); var selectIntoExpression = new SqlSelectExpression ( typeof(void), null, columnInfos.Select ( c => new SqlColumnDeclaration ( null, new SqlColumnExpression(c.DefinitionProperty.PropertyType, null, c.GetColumnName()) ) ) .Concat(insertedColumns.Select(d => d.value.Type.GetUnwrappedNullableType() == typeof(bool) ? new SqlColumnDeclaration(d.name, new BitBooleanExpression(d.value)) : new SqlColumnDeclaration(d.name, d.value))) .ToReadOnlyCollection(), visitedUpdated.Source, visitedUpdated.Where, null, null, false, null, null, false, false, new SqlTableExpression("#TEMP") ); var selectExpression = new SqlSelectExpression(typeof(void), null, null, selectIntoExpression.Into, null, null); var insertExpression = new SqlInsertIntoExpression(visitedUpdated.Source, columnInfos.Select(c => c.GetColumnName()).Concat(insertedColumns.Select(c => c.name)).ToReadOnlyCollection(), null, selectExpression, null, true); var deleteExpression = new SqlDeleteExpression(visitedUpdated.Source, visitedUpdated.Where); var list = new List<Expression> { selectIntoExpression, deleteExpression, new SqlSetCommandExpression("IDENTITY_INSERT", visitedUpdated.Source, new SqlKeywordExpression("ON")), insertExpression, new SqlSetCommandExpression("IDENTITY_INSERT", visitedUpdated.Source, new SqlKeywordExpression("OFF")), }; return new SqlStatementListExpression(list); }
public override void Delete(SqlDeleteExpression deleteExpression) { var formatResult = this.SqlDatabaseContext.SqlQueryFormatterManager.Format(deleteExpression, SqlQueryFormatterOptions.Default); using (var command = this.CreateCommand()) { command.CommandText = formatResult.CommandText; foreach (var value in formatResult.ParameterValues) { this.AddParameter(command, value.Type, value.Value); } Logger.Info(() => this.FormatCommand(command)); try { var count = command.ExecuteNonQueryEx(this.DataAccessModel); } catch (Exception e) { var decoratedException = LogAndDecorateException(e, command); if (decoratedException != null) { throw decoratedException; } throw; } } }
protected override Expression VisitDelete(SqlDeleteExpression deleteExpression) { this.Write("DELETE "); this.Write("FROM "); this.Visit(deleteExpression.Source); if (deleteExpression.Where != null) { this.WriteLine(); this.Write(" WHERE "); this.WriteLine(); this.Visit(deleteExpression.Where); } this.WriteLine(";"); return deleteExpression; }