public static void Merge(this SqlServerDestiny destiny) { var keys = destiny.GetColumnKeys(); string sql = destiny.GetMergeCommand(keys); destiny.Connection.Execute(sql); }
public static string GetMergeCommand(this SqlServerDestiny destiny, List <string> keys) { string sql = $" Merge {destiny.Table} as Destiny \n"; sql += $" USING #{destiny.Table} as Origin \n"; for (int i = 0; i < keys.Count; i++) { string key = keys[i]; sql += $" {(i == 0 ? "ON" : "AND")} Destiny.[{key}] = Origin.[{key}] "; sql += "\n"; } var columns = destiny.GetColumns(); var columnsWhithoutKeys = columns.Where(x => !keys.Any(y => y == x)).ToList(); sql += $" WHEN MATCHED THEN \n"; sql += $" UPDATE SET \n"; for (int i = 0; i < columnsWhithoutKeys.Count; i++) { string column = columnsWhithoutKeys[i]; sql += $" [{column}] = Origin.[{column}]"; sql += (i < columnsWhithoutKeys.Count - 1) ? "," : ""; sql += "\n"; } sql += $" WHEN NOT MATCHED THEN \n"; sql += $" INSERT ( { string.Join(", ", columns.Select(x => $"[{x}]"))} ) \n"; sql += $" VALUES ( { string.Join(", ", columns.Select(x => $"Origin.[{x}]")) } ) \n"; sql += ";"; return(sql); }
public static List <string> GetColumns(this SqlServerDestiny destiny) { string sql = $@"select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME like '{destiny.Table}' ;"; return(destiny.Connection.Query <string>(sql).ToList()); }
public static void CreateTemporaryTable(this SqlServerDestiny destiny) { string sql = $@"select top 0 * into #{destiny.Table} from {destiny.Table} "; destiny.Connection.Execute(sql); }
public void DadoUmDestinoVálido() { ISqlServerDestiny destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); Assert.True(destiny.Valid); }
public void DadoUmaConexãoInválidaRetornaUmaExcessão() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.InvalidaDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); Assert.Throws <System.Data.SqlClient.SqlException>(() => destiny.Load(data)); }
public void DadoUmDestinoVálidoEmUmaTabelaComUmaChavePrimariaComposta() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTableComDuasChaves); destiny.Validate(); destiny.Load(data); Assert.True(destiny.Result.Success); }
public SqlServerDestinyExtensionsTests() { destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destinyComChavePrimariaComposta = new SqlServerDestiny(); destinyComChavePrimariaComposta.SetConnection(Connections.LocalDataBase); destinyComChavePrimariaComposta.SetTable(SeedContext.ValidTableComDuasChaves); }
public void DadoUmDestinoComConexãoNula() { var destiny = new SqlServerDestiny(); destiny.SetConnection(null); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); Assert.Equal("A string de conexão não pode ser vazio ou nula.", destiny.Notifications.First()); }
public void DadoUmDestinoComUmaTabelaNula() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(null); destiny.Validate(); Assert.Equal("A tabela de destino não pode ser vazio ou nulo.", destiny.Notifications.First()); }
public void DadoUmDestinoVálidoEUmMapeamentoNuloExecutaASincronização() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); destiny.SetMapping(null); destiny.Load(data); Assert.True(destiny.Result.Success); }
public void DadoUmDestinoVálidoFazASincronização() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); var result = destiny.Load(data); Assert.True(destiny.Result.Success); }
public void DadoUmDestinoVálidoMasAFonteDeDadosÉNula() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); var result = destiny.Load(null); Assert.Equal("A fonte de dados para integração não pode ser nula.", destiny.Result.Message); }
public void DadoUmDestinoVálidoEUmMapeamentoComPropriedadeNula() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); Assert.Throws <InvalidOperationException>(() => destiny.SetMapping(new List <Map>() { new Map(null, "Identidade"), })); }
public void DadoUmDestinoVálidoEUmMapeamentoIncompletoMasCorretoExecutaASincronização() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); destiny.SetMapping(new List <Map>() { new Map("Identidade", "Identidade") }); destiny.Load(data); Assert.True(destiny.Result.Success); }
public void DadoUmDestinoVálidoMasMapeamentoIncorretoGeraUmExessão() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); destiny.SetMapping(new List <Map>() { new Map("x", "y"), new Map("x", "y"), new Map("x", "y") }); Assert.Throws <InvalidOperationException>(() => destiny.Load(data)); }
public void DadoUmDestinoVálidoEUmMapeamentoComColunasAMaisExecutaASincronização() { var destiny = new SqlServerDestiny(); destiny.SetConnection(Connections.LocalDataBase); destiny.SetTable(SeedContext.ValidTable); destiny.Validate(); destiny.SetMapping(new List <Map>() { new Map("Identidade", "Identidade"), new Map("Sigla", "Sigla"), new Map("NomeDaRegiao", "NomeDaRegiao") }); destiny.Load(data); Assert.True(destiny.Result.Success); }
public void DadoUmaStringDeConexãoInválidaRetornaUmaExcessão() { var destiny = new SqlServerDestiny(); Assert.Throws <ArgumentException>(() => destiny.SetConnection("XXXX")); }