Beispiel #1
0
        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);
        }
Beispiel #2
0
 public abstract SqlBuilder GetTriggerUpsertActionSql <TTriggerEntity, TUpsertEntity>(TriggerUpsertAction <TTriggerEntity, TUpsertEntity> triggerUpsertAction)
     where TTriggerEntity : class
     where TUpsertEntity : class;