using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Xunit; using System.Linq; using System.Collections; using System.Diagnostics; using XY.Model.Business; namespace FreeSql.Tests.MySql { public class ClickHouseTest1 { class TestAuditValue { [FreeSql.DataAnnotations.Column(IsPrimary = true)] public long Id { get; set; } [Now] public DateTime CreateTime { get; set; } [FreeSql.DataAnnotations.Column(IsNullable = true )] public string Name { get; set; } [FreeSql.DataAnnotations.Column(IsNullable = false)] public int Age { get; set; } public bool State { get; set; } [FreeSql.DataAnnotations.Column(IsNullable = true)] public bool Enable { get; set; } public DateTime? UpdateTime { get; set; } public int? Points { get; set; } } [FreeSql.DataAnnotations.Table(Name = "ClickHouseTest")] public class TestClickHouse { [FreeSql.DataAnnotations.Column(IsPrimary = true, IsIdentity = true)] [Now] public long Id { get; set; } public string Name { get; set; } public Decimal Money { get; set; } } class NowAttribute: Attribute { } [Fact] public void AuditValue() { var id = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0); var item = new TestClickHouse(); item.Id = id; item.Name = "李四"; EventHandler audit = (s, e) => { if (e.Property.GetCustomAttribute(false) != null) e.Value = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0); }; g.clickHouse.Aop.AuditValue += audit; g.clickHouse.Insert(item).ExecuteAffrows(); g.clickHouse.Aop.AuditValue -= audit; } [Fact] public void CreateTalbe() { g.clickHouse.CodeFirst.SyncStructure(); } [Fact] public void TestInsert() { Stopwatch stopwatch =new Stopwatch(); var fsql = g.clickHouse; List list=new List(); List list1=new List(); var date=DateTime.Now; for (int i = 1; i < 1000000; i++) { //list.Add(new TestClickHouse //{ // Id=i, Name=i.ToString() //}); list1.Add(new CollectDataEntity { Id = new Random().Next(), CollectTime = DateTime.Now, DataFlag = "1", EquipmentCode = "11", Guid = "11111", UnitStr = "111", PropertyCode = "1111" }); } fsql.Delete().Where(t => 1 == 1).ExecuteAffrows(); stopwatch.Start(); var insert=fsql.Insert(list1); stopwatch.Stop(); Debug.WriteLine("审计数据用时:" + stopwatch.ElapsedMilliseconds.ToString()); stopwatch.Restart(); insert.ExecuteAffrows(); //fsql.GetRepository().Insert(list1); stopwatch.Stop(); Debug.WriteLine("转换并插入用时:" +stopwatch.ElapsedMilliseconds.ToString()); //var items = fsql.Select().Where(o=>o.Id>900).OrderByDescending(o=>o.Id).ToList(); //Assert.Equal(100, items.Count); } [Fact] public void TestPage() { var fsql = g.clickHouse; var list=fsql.Select() .Page(1,100) .Where(o=>o.Id>200&&o.Id<500) .Count(out var count).ToList(); //Assert.Equal(100, list.Count); } [Fact] public void TestDelete() { var fsql = g.clickHouse; var count1=fsql.Select().Count(); fsql.Delete().Where(o => o.Id < 500).ExecuteAffrows(); var count2 = fsql.Select().Count(); //Assert.NotEqual(count1, count2); } [Fact] public void TestUpdate() { var fsql = g.clickHouse; fsql.Update().Where(o => o.Id > 900) .Set(o=>o.Name,"修改后的值") .ExecuteAffrows(); } [Fact] public void TestRepositorySelect() { var fsql = g.clickHouse; var list=fsql.GetRepository().Where(o => o.Id > 900) .ToList(); } [Fact] public void TestRepositoryInsert() { var fsql = g.clickHouse; long id = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(),0); var list=fsql.GetRepository().Insert(new TestClickHouse { Id= id, Name="张三"}); var data=fsql.GetRepository().Get(id); } [Fact] public void TestDateTime() { var fsql = g.clickHouse; long id = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0); DateTime createTime=DateTime.Now; fsql.Insert(new TestAuditValue { Id = id, CreateTime = createTime, Age =18,Name="张三" }).ExecuteAffrows(); var date1 = fsql.GetRepository().Where(o => o.CreateTime == createTime) .ToList(); var date2 = fsql.GetRepository().Where(o => o.CreateTime.Date == createTime.Date) .ToList(); var date3 = fsql.GetRepository().Where(o => o.CreateTime.Year == createTime.Year) .ToList(); var date4 = fsql.GetRepository().Where(o => o.CreateTime.Month == createTime.Month) .ToList(); var date5 = fsql.GetRepository().Where(o => o.CreateTime.Second == createTime.Second) .ToList(); var date6 = fsql.GetRepository().Where(o => o.CreateTime.Millisecond == createTime.Millisecond) .ToList(); var date7 = fsql.GetRepository().Where(o => o.CreateTime.AddSeconds(10) < createTime) .ToList(); } [Fact] public void TestUpdateTime() { var fsql = g.clickHouse; var state = fsql.GetRepository().UpdateDiy.Set(o => o.UpdateTime, DateTime.Now).Where(o => 1 == 1).ExecuteAffrows(); //var state1 = fsql.GetRepository().UpdateDiy.Set(o => o.UpdateTime, null).Where(o => 1 == 1).ExecuteAffrows(); } [Fact] public void TestRepositoryUpdateTime() { Stopwatch stopwatch = new Stopwatch(); var fsql = g.clickHouse; var repository=fsql.GetRepository(); List list=new List(); for (int i = 1; i < 5; i++) { list.Add(new TestAuditValue { Id = new Random().Next(), Age=1, Name=i.ToString(), State=true, CreateTime=DateTime.Now, UpdateTime=DateTime.Now, Enable = false }); } list = repository.Insert(list); //var list = repository.Select.ToList(); list.ForEach(o=>o.UpdateTime = DateTime.Now); list.ForEach(o => o.Enable = true); stopwatch.Start(); repository.Update(list); stopwatch.Stop(); Debug.WriteLine("更新用时:" + stopwatch.ElapsedMilliseconds.ToString()); } [Fact] public async void TestInsertUpdateData() { //g.clickHouse.CodeFirst.SyncStructure(); Stopwatch stopwatch = new Stopwatch(); var fsql = g.clickHouse; var repository=fsql.GetRepository(); await repository.DeleteAsync(o=>o.Id>0); List tables = new List(); for (int i = 1; i < 3; i++) { tables.Add(new CollectDataEntity { Id = new Random().Next(), CollectTime = DateTime.Now, DataFlag = "1", EquipmentCode = "11", UnitStr = "111", PropertyCode = "1111", NumericValue=1111.1119999912500M }); } var insert = repository.Orm.Insert(tables); insert.ExecuteAffrows(); var list = repository.Orm.Select().ToList(); //var list = repository.Insert(tables); //var list = repository.Select.ToList(); //list.ForEach(o=>o.EquipmentCode = "666"); //stopwatch.Start(); //await repository.UpdateAsync(list); //stopwatch.Stop(); Debug.WriteLine("更新用时:" + stopwatch.ElapsedMilliseconds.ToString()); } } }