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("\"");
            }
        }
Example #2
0
        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]);
        }
Example #3
0
        public void OneTable()
        {
            var resolver = new JoinResolver();
            var result   = resolver.Resolve(new List <string> {
                "empires"
            });

            Assert.Empty(result);
        }
Example #4
0
        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);
        }
Example #5
0
        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]);
        }