public void Clone()
        {
            MsSqlEntityPipeline insertPipeline = new MsSqlEntityPipeline(ConnectString);
            var newPipeline1 = (MsSqlEntityPipeline)insertPipeline.Clone();

            Assert.AreEqual(ConnectString, newPipeline1.ConnectString);
            Assert.AreEqual(PipelineMode.Insert, newPipeline1.Mode);

            MsSqlEntityPipeline updatePipeline = new MsSqlEntityPipeline(ConnectString, PipelineMode.Update);

            Assert.AreEqual(ConnectString, updatePipeline.ConnectString);
            Assert.AreEqual(PipelineMode.Update, updatePipeline.Mode);
        }
        public void DefineUpdateEntity()
        {
            MsSqlEntityPipeline insertPipeline = new MsSqlEntityPipeline(ConnectString, PipelineMode.Update);
            IEntityPipeline     pipeline;

            try
            {
                insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(UpdateEntity1).GetTypeInfo()));
                throw new SpiderException("TEST FAILED.");
            }
            catch (SpiderException e)
            {
                Assert.AreEqual("Columns set as primary is not a property of your entity.", e.Message);
            }

            try
            {
                insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(UpdateEntity2).GetTypeInfo()));
                throw new SpiderException("TEST FAILED.");
            }
            catch (SpiderException e)
            {
                Assert.AreEqual("Columns set as update is not a property of your entity.", e.Message);
            }

            try
            {
                insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(UpdateEntity3).GetTypeInfo()));
                throw new SpiderException("TEST FAILED.");
            }
            catch (SpiderException e)
            {
                Assert.AreEqual("There is no column need update.", e.Message);
            }

            insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(UpdateEntity4).GetTypeInfo()));
            Assert.AreEqual(1, insertPipeline.GetUpdateColumns().Count);
            Assert.AreEqual("value", insertPipeline.GetUpdateColumns().First().Name);

            MsSqlEntityPipeline insertPipeline2 = new MsSqlEntityPipeline(ConnectString, PipelineMode.Update);

            insertPipeline2.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(UpdateEntity5).GetTypeInfo()));
            Assert.AreEqual(1, insertPipeline2.GetUpdateColumns().Count);
            Assert.AreEqual("value", insertPipeline2.GetUpdateColumns().First().Name);
        }
        public void UpdateWhenUnionPrimary()
        {
            ClearDb();

            using (SqlConnection conn = new SqlConnection(ConnectString))
            {
                ISpider spider = new DefaultSpider("test", new Site());

                MsSqlEntityPipeline insertPipeline = new MsSqlEntityPipeline(ConnectString);
                insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(Product2).GetTypeInfo()));
                insertPipeline.InitPipeline(spider);

                JObject data1 = new JObject {
                    { "sku", "110" }, { "category1", "4C" }, { "category", "3C" }, { "url", "http://jd.com/110" }, { "cdate", "2016-08-13" }
                };
                JObject data2 = new JObject {
                    { "sku", "111" }, { "category1", "4C" }, { "category", "3C" }, { "url", "http://jd.com/111" }, { "cdate", "2016-08-13" }
                };
                insertPipeline.Process(new List <JObject> {
                    data1, data2
                });

                MsSqlEntityPipeline updatePipeline = new MsSqlEntityPipeline(ConnectString, PipelineMode.Update);
                updatePipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(Product2).GetTypeInfo()));
                updatePipeline.InitPipeline(spider);

                JObject data3 = new JObject {
                    { "sku", "110" }, { "category1", "4C" }, { "category", "AAAA" }, { "url", "http://jd.com/110" }, { "cdate", "2016-08-13" }
                };
                updatePipeline.Process(new List <JObject> {
                    data3
                });

                var list = conn.Query <Product2>($"use test;select * from sku2_{DateTime.Now.ToString("yyyy_MM_dd")}").ToList();
                Assert.AreEqual(2, list.Count);
                Assert.AreEqual("110", list[0].Sku);
                Assert.AreEqual("AAAA", list[0].Category);
            }

            ClearDb();
        }
        public void Insert()
        {
            ClearDb();

            using (SqlConnection conn = new SqlConnection(ConnectString))
            {
                ISpider spider = new DefaultSpider("test", new Site());

                MsSqlEntityPipeline insertPipeline = new MsSqlEntityPipeline(ConnectString);
                insertPipeline.InitEntity(EntitySpider.GenerateEntityMetaData(typeof(Product).GetTypeInfo()));
                insertPipeline.InitPipeline(spider);

                // Common data
                JObject data1 = new JObject {
                    { "sku", "110" }, { "category", "3C" }, { "url", "http://jd.com/110" }, { "cdate", "2016-08-13" }
                };
                JObject data2 = new JObject {
                    { "sku", "111" }, { "category", "3C" }, { "url", "http://jd.com/111" }, { "cdate", "2016-08-13" }
                };
                // Value is null
                JObject data3 = new JObject {
                    { "sku", "112" }, { "category", null }, { "url", "http://jd.com/111" }, { "cdate", "2016-08-13" }
                };
                insertPipeline.Process(new List <JObject> {
                    data1, data2, data3
                });

                var list = conn.Query <Product>($"use test;select * from sku_{DateTime.Now.ToString("yyyy_MM_dd")}").ToList();
                Assert.AreEqual(3, list.Count);
                Assert.AreEqual("110", list[0].Sku);
                Assert.AreEqual("111", list[1].Sku);
                Assert.AreEqual(null, list[2].Category);
            }

            ClearDb();
        }