private static IExprExec?WhenMatched(ExprMerge merge, TempTableBase tempTable) { IExprExec?e = null; if (merge.WhenMatched != null) { if (merge.WhenMatched is ExprMergeMatchedUpdate update) { e = SqQueryBuilder .Update(merge.TargetTable) .Set(update.Set) .From(merge.TargetTable) .InnerJoin(tempTable, merge.On) .Where(update.And); } else if (merge.WhenMatched is ExprMergeMatchedDelete delete) { ExprBoolean filter = SqQueryBuilder.Exists(SqQueryBuilder.SelectOne() .From(tempTable) .Where(merge.On)); if (delete.And != null) { filter = filter & delete.And; } e = SqQueryBuilder.Delete(merge.TargetTable).From(merge.TargetTable).Where(filter); } else { throw new SqExpressException($"Unknown type: '{merge.WhenMatched.GetType().Name}'"); } } return(e); }
public async Task Exec(IScenarioContext context) { var table = AllTables.GetItAllColumnTypes(context.Dialect == SqlDialect.PgSql); var jsonStringOriginal = await ReadAsJsonString(context, table); await context.Database.Exec(SqQueryBuilder.Delete(table).All()); await Insert(context, jsonStringOriginal, table); var jsonStringAfter = await ReadAsJsonString(context : context, table : table); if (jsonStringOriginal != jsonStringAfter) { throw new Exception("Export/Import/Export was not correct"); } }