public void TestCreateTableQuery()
 {
     var types = FluentConfiguration.Start().DefaultIdProperty(IdentityField).DefaultDiscriminatorColumnName(DefaultDiscriminator).AddType<BaseClass>(z => z.AllProperties()).GenerateTypeMappings();
     var provider = new TestProvider(types);
     var queryBuilder = new QueryBuilder(provider);
     var result = queryBuilder.GetCreateTable(typeof(BaseClass));
     Assert.AreEqual("CREATE TABLE [BaseClass] ([ObjectId] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, [_dscr] INT NOT NULL, [Prop1] INT NOT NULL);", result);
 }
        public void Test()
        {
            var mappings = FluentConfiguration.Start().DefaultDiscriminatorColumnName("_dscr")
                .DefaultIdProperty(IdentityField)
                .AddTypeAuto<FirstClass>()
                .AddTypeAuto<SecondClass>()
                .AddTypeAuto<ThirdClass>().GenerateTypeMappings();

            var provider = new TestProvider(mappings);
            var queryBuilder = new QueryBuilder(provider);
            var createTable = SqlConnection.CreateCommand();
            createTable.CommandText = string.Concat(
                queryBuilder.GetCreateTable(typeof(FirstClass)),
                queryBuilder.GetCreateTable(typeof(SecondClass)),
                queryBuilder.GetCreateTable(typeof(ThirdClass))
            );
            createTable.ExecuteNonQuery();
            var thirdGuids = LoadTable("ThirdClass", (row, i) => { });
            var secondGuids = LoadTable("SecondClass", (row, i) => { row["Third"] = thirdGuids[i]; });
            LoadTable("FirstClass", (row, i) => { row["Second"] = secondGuids[i]; });

            var stopWatch = new Stopwatch();
            stopWatch.Start();

            var plan = queryBuilder.GetQuery("FirstClass", new string[0], new[] { "Second.Third" });
            Debug.WriteLine(plan.SqlString);

            var mapper = new SqlValueMapper();
            var firstClasses = new List<FirstClass>(Count);
            using (var cmd = new SqlCommand(plan.SqlString, SqlConnection))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    firstClasses.AddRange(mapper.MapFromReader(reader, plan.SelectClause).OfType<FirstClass>());
                }
            }
            stopWatch.Stop();
            Assert.AreEqual(Count, firstClasses.Count(z => z.Second != null && z.Second.Third != null));
            Assert.Pass(stopWatch.Elapsed.ToString());
        }
 public void TestCreateTableWithArray()
 {
     var types = FluentConfiguration.Start().DefaultIdProperty(IdentityField).DefaultDiscriminatorColumnName(DefaultDiscriminator)
         .AddType<ClassWithIntArr>(z => z.AllProperties()).GenerateTypeMappings();
     var provider = new TestProvider(types);
     var queryBuilder = new QueryBuilder(provider);
     var result = queryBuilder.GetCreateTable(typeof(ClassWithIntArr));
     Assert.AreEqual("CREATE TABLE [ClassWithIntArr] ([ObjectId] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, [_dscr] INT NOT NULL);\n"
         +"CREATE TABLE [ClassWithIntArr_Arr] ([ParentId] UNIQUEIDENTIFIER NOT NULL, [Value] INT NOT NULL, [Index] BIGINT NOT NULL);", result);
 }