public override SqlBuilder GetTriggerUpsertActionSql <TTriggerEntity, TUpdateEntity>(TriggerUpsertAction <TTriggerEntity, TUpdateEntity> triggerUpsertAction) { var insertStatementSql = GetInsertStatementBodySql(triggerUpsertAction.InsertExpression, triggerUpsertAction.InsertExpressionPrefixes); var newExpressionColumnsSql = GetNewExpressionColumnsSql( (NewExpression)triggerUpsertAction.MatchExpression.Body, triggerUpsertAction.MatchExpressionPrefixes.ToDictionary(x => x.Key, x => ArgumentType.None)); var sqlBuilder = new SqlBuilder(insertStatementSql.AffectedColumns) .MergeColumnsInfo(newExpressionColumnsSql); if (triggerUpsertAction.OnMatchExpression is null) { sqlBuilder.Append($"INSERT IGNORE {GetTableName(typeof(TUpdateEntity))} ") .Append(insertStatementSql.StringBuilder) .Append(";"); } else { var updateStatementSql = GetUpdateStatementBodySql(triggerUpsertAction.OnMatchExpression, triggerUpsertAction.OnMatchExpressionPrefixes); sqlBuilder.MergeColumnsInfo(updateStatementSql.AffectedColumns) .Append($"INSERT INTO {GetTableName(typeof(TUpdateEntity))} ") .Append(insertStatementSql.StringBuilder) .Append(" ON DUPLICATE KEY UPDATE ") .Append(updateStatementSql.StringBuilder) .Append(";"); } return(sqlBuilder); }
public abstract SqlBuilder GetTriggerUpsertActionSql <TTriggerEntity, TUpsertEntity>(TriggerUpsertAction <TTriggerEntity, TUpsertEntity> triggerUpsertAction) where TTriggerEntity : class where TUpsertEntity : class;