private static void BuildJoinList(StringBuilder builder, List <DbAttribute> attributes) { var tables = attributes .Select(a => a.TableName) .Distinct() .ToList(); var resolver = new JoinResolver(); var joins = resolver.Resolve(tables); foreach (var @join in joins) { builder.Append("\njoin "); builder.Append("\""); builder.Append(join.ForeignTable); builder.Append("\" on \""); builder.Append(join.ForeignTable); builder.Append("\".\""); builder.Append(join.ForeignColumn); builder.Append("\" = \""); builder.Append(join.ThisTable); builder.Append("\".\""); builder.Append(join.ThisColumn); builder.Append("\""); } }
public void ThreeTables() { var resolver = new JoinResolver(); var result = resolver.Resolve( new List <string> { "empires", "government_types", "planets" }) .ToList(); Assert.Equal(2, result.Count); var first = new JoinInfo { ThisTable = "empires", ThisColumn = "government_type_id", ForeignTable = "government_types", ForeignColumn = "id" }; var second = new JoinInfo { ThisTable = "empires", ThisColumn = "id", ForeignTable = "planets", ForeignColumn = "empire_id" }; Assert.Equal(first, result[0]); Assert.Equal(second, result[1]); }
public void OneTable() { var resolver = new JoinResolver(); var result = resolver.Resolve(new List <string> { "empires" }); Assert.Empty(result); }
public void IndirectJoins() { var resolver = new JoinResolver(); var joins = resolver.Resolve(new List <string> { "empires", "alliances" }).ToList(); Assert.Equal(2, joins.Count); Assert.Equal("empires", joins[0].ThisTable); Assert.Equal("id", joins[0].ThisColumn); Assert.Equal("alliances_entries", joins[0].ForeignTable); Assert.Equal("empire_id", joins[0].ForeignColumn); Assert.Equal("alliances_entries", joins[1].ThisTable); Assert.Equal("alliance_id", joins[1].ThisColumn); Assert.Equal("alliances", joins[1].ForeignTable); Assert.Equal("id", joins[1].ForeignColumn); }
public void TwoTables() { var resolver = new JoinResolver(); var result = resolver.Resolve( new List <string> { "empires", "government_types" }) .ToList(); Assert.Single(result); var expected = new JoinInfo { ThisTable = "empires", ThisColumn = "government_type_id", ForeignTable = "government_types", ForeignColumn = "id" }; Assert.Equal(expected, result[0]); }