Support ClickHouse bulkcopy

This commit is contained in:
sunkaixuan 2022-11-06 11:09:21 +08:00
parent 3a39bf303f
commit b075d1ca45
2 changed files with 28 additions and 16 deletions

View File

@ -1,10 +1,12 @@
using ClickHouse;
using ClickHouse.Client.ADO;
using ClickHouse.Client.Copy;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SqlSugar.ClickHouse
@ -12,26 +14,32 @@ namespace SqlSugar.ClickHouse
public class ClickHouseFastBuilder : FastBuilder, IFastBuilder
{
public ClickHouseFastBuilder(EntityInfo entityInfo)
{
throw new NotSupportedException("NotSupportedException");
}
public override string UpdateSql { get; set; } = @"UPDATE {1} SET {0} FROM {2} AS TE WHERE {3}
";
public async Task<int> ExecuteBulkCopyAsync(DataTable dt)
{
await Task.FromResult(0);
throw new NotSupportedException("NotSupportedException");
var bulkCopy = GetBulkCopyInstance();
bulkCopy.DestinationTableName = dt.TableName;
try
{
await bulkCopy.WriteToServerAsync(dt,new CancellationToken());
}
catch (Exception ex)
{
CloseDb();
throw ex;
}
CloseDb();
return dt.Rows.Count;
}
private void BulkCopy(DataTable dt, string copyString, ClickHouseConnection conn, List<DbColumnInfo> columns)
public ClickHouseBulkCopy GetBulkCopyInstance()
{
throw new NotSupportedException("NotSupportedException");
ClickHouseBulkCopy copy;
copy = new ClickHouseBulkCopy((ClickHouseConnection)this.Context.Ado.Connection);
if (this.Context.Ado.Connection.State == ConnectionState.Closed)
{
this.Context.Ado.Connection.Open();
}
copy.BatchSize = 100000;
return copy;
}
}
}

View File

@ -31,6 +31,10 @@ namespace SqlSugar
return resultConnector;
case DbType.Dm:
return new DmFastBuilder();
case DbType.ClickHouse:
var resultConnectorClickHouse = InstanceFactory.CreateInstance<IFastBuilder>("SqlSugar.ClickHouse.ClickHouseFastBuilder");
resultConnectorClickHouse.CharacterSet = this.CharacterSet;
return resultConnectorClickHouse;
case DbType.Kdbndp:
break;
case DbType.Oscar: