添加ClickHouse数据库支持

This commit is contained in:
chenbo
2021-11-25 17:40:00 +08:00
parent e6f05aa24e
commit d085acc4e9
29 changed files with 2631 additions and 12 deletions

View File

@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
using Xunit;
namespace FreeSql.Tests.MySql
{
public class ClickHouseTest1
{
class TestAuditValue
{
public Guid id { get; set; }
[Now]
public DateTime createtime { get; set; }
}
[FreeSql.DataAnnotations.Table(Name = "ClickHouseTest")]
public class TestClickHouse
{
public long Id { get; set; }
public string Name { get; set; }
}
class NowAttribute: Attribute { }
[Fact]
public void AuditValue()
{
var date = DateTime.Now.Date;
var item = new TestAuditValue();
EventHandler<Aop.AuditValueEventArgs> audit = (s, e) =>
{
if (e.Property.GetCustomAttribute<NowAttribute>(false) != null)
e.Value = DateTime.Now.Date;
};
g.mysql.Aop.AuditValue += audit;
g.mysql.Insert(item).ExecuteAffrows();
g.mysql.Aop.AuditValue -= audit;
Assert.Equal(item.createtime, date);
}
[Fact]
public void TestInsert()
{
var fsql = g.clickHouse;
List<TestClickHouse> list=new List<TestClickHouse>();
for (int i = 0; i < 1000; i++)
{
list.Add(new TestClickHouse()
{
Id = i,
Name = $"测试{i}"
});
}
fsql.Insert(list).ExecuteAffrows();
var items = fsql.Select<TestClickHouse>().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<TestClickHouse>()
.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<TestClickHouse>().Count();
fsql.Delete<TestClickHouse>().Where(o => o.Id < 500).ExecuteAffrows();
var count2 = fsql.Select<TestClickHouse>().Count();
Assert.NotEqual(count1, count2);
}
[Fact]
public void TestUpdate()
{
var fsql = g.clickHouse;
fsql.Update<TestClickHouse>().Where(o => o.Id > 900)
.Set(o=>o.Name,"修改后的值")
.ExecuteAffrows();
}
}
}

View File

@ -37,6 +37,7 @@
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.Linq\FreeSql.Extensions.Linq.csproj" />
<ProjectReference Include="..\..\FreeSql.DbContext\FreeSql.DbContext.csproj" />
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.ClickHouse\FreeSql.Provider.ClickHouse.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Dameng\FreeSql.Provider.Dameng.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Firebird\FreeSql.Provider.Firebird.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.KingbaseES\FreeSql.Provider.KingbaseES.csproj" />

View File

@ -4,6 +4,11 @@
<name>FreeSql.Tests</name>
</assembly>
<members>
<member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
<summary>
保存或添加,如果主键有值则尝试 Update如果影响的行为 0 则尝试 Insert
</summary>
</member>
<member name="P:FreeSql.Tests.Firebird.FirebirdCodeFirstTest.AddUniquesInfo.id">
<summary>
编号
@ -287,11 +292,6 @@
修改人
</summary>
</member>
<member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
<summary>
保存或添加,如果主键有值则尝试 Update如果影响的行为 0 则尝试 Insert
</summary>
</member>
<member name="T:FreeSql.Tests.SqlServer.SqlServerCodeFirstTest.tbdot01">
<summary>
表中带点

View File

@ -34,6 +34,29 @@ namespace FreeSql.Tests
var items = fsql.Select<TestJsonb01Cls1>().ToList();
}
[Fact]
public void TestClickHouse()
{
var fsql = g.mysql;
fsql.Delete<TestJsonb01Cls1>().Where("1=1").ExecuteAffrows();
var item = new TestJsonb01Cls1
{
jsonb01 = new List<int> { 1, 5, 10, 20 },
jsonb02 = new List<long> { 11, 51, 101, 201 },
jsonb03 = new List<string> { "12", "52", "102", "202" },
};
fsql.Insert(item).ExecuteAffrows();
}
[FreeSql.DataAnnotations.Table(Name = "ClickHouseTest")]
public class ClickHouse
{
public long Id { get; set; }
public string Name { get; set; }
}
public class TestJsonb01Cls1
{
public Guid id { get; set; }

View File

@ -7,6 +7,19 @@ using System.Threading;
public class g
{
static Lazy<IFreeSql> clickHouseLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.ClickHouse, "Compress=False;BufferSize=32768;SocketTimeout=10000;CheckCompressedHash=False;Encrypt=False;Compressor=lz4;Host=192.168.0.121;Port=8125;Database=PersonnelLocation;Username=root;Password=+riQ8V9D")
//.UseConnectionFactory(FreeSql.DataType.MySql, () => new MySql.Data.MySqlClient.MySqlConnection("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;"))
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=192.168.164.10;Port=33061;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
//.UseAutoSyncStructure(true)
//.UseGenerateCommandParameterWithLambda(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象在执行前
//, (cmd, traceLog) => Console.WriteLine(traceLog)
)
.UseLazyLoading(true)
.Build());
public static IFreeSql clickHouse => clickHouseLazy.Value;
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=5;Allow User Variables=True")