Skip to content

Commit 47c2865

Browse files
committed
add BulkInsert UTest
1 parent fcc9cb5 commit 47c2865

File tree

9 files changed

+136
-8
lines changed

9 files changed

+136
-8
lines changed

src/SmartSql.Bulk.MySql/BulkInsert.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public override void Insert()
2323
MySqlBulkLoader bulkLoader = GetBulkLoader(conn);
2424
bulkLoader.Load();
2525
}
26+
27+
public String SecureFilePriv { get; set; }
2628
private string _fieldTerminator = ",";
2729
private char _fieldQuotationCharacter = '"';
2830
private char _escapeCharacter = '"';
@@ -32,7 +34,7 @@ public override async Task InsertAsync()
3234
await DbSession.OpenAsync();
3335
var conn = DbSession.Connection as MySqlConnection;
3436
MySqlBulkLoader bulkLoader = GetBulkLoader(conn);
35-
37+
3638
await bulkLoader.LoadAsync();
3739
}
3840

@@ -59,7 +61,7 @@ private string ToCSV()
5961
foreach (DataColumn dataColumn in Table.Columns)
6062
{
6163
if (colIndex != 0) dataBuilder.Append(_fieldTerminator);
62-
64+
6365
if (dataColumn.DataType == CommonType.String
6466
&& !row.IsNull(dataColumn)
6567
&& row[dataColumn].ToString().Contains(_fieldTerminator))
@@ -75,8 +77,10 @@ private string ToCSV()
7577
}
7678
dataBuilder.Append(_lineTerminator);
7779
}
78-
var fileName = Guid.NewGuid().ToString("N") + ".csv";
79-
fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);
80+
81+
var fileName = Guid.NewGuid().ToString("N")+".csv";
82+
var fileDir = SecureFilePriv ?? AppDomain.CurrentDomain.BaseDirectory;
83+
fileName = Path.Combine(fileDir, fileName);
8084
File.WriteAllText(fileName, dataBuilder.ToString());
8185
return fileName;
8286
}

src/SmartSql.Bulk.PostgreSql/BulkInsert.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public BulkInsert(IDbSession dbSession) : base(dbSession)
1313
{
1414

1515
}
16+
1617
public const string DATA_TYPE_NAME = "DataTypeName";
1718
public override void Insert()
1819
{

src/SmartSql.Bulk/BulkExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public static DataTable ToDataTable<TEntity>(this IEnumerable<TEntity> list)
2222
var dataTable = new DataTable(tableName);
2323
foreach (var columnIndex in EntityMetaDataCache<TEntity>.IndexColumnMaps)
2424
{
25-
dataTable.Columns.Add(columnIndex.Value.Name, columnIndex.Value.FieldType);
25+
DataColumn dataColumn=new DataColumn(columnIndex.Value.Name, columnIndex.Value.FieldType);
26+
dataTable.Columns.Add(dataColumn);
2627
}
2728
foreach (var entity in list)
2829
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using SmartSql.Bulk;
5+
using SmartSql.Bulk.MySql;
6+
using SmartSql.DataSource;
7+
using SmartSql.Test.Entities;
8+
using Xunit;
9+
10+
namespace SmartSql.Test.Unit.Bulk
11+
{
12+
public class MySqlTest
13+
{
14+
[Fact]
15+
public void Insert()
16+
{
17+
var dbSessionFactory = new SmartSqlBuilder()
18+
.UseDataSource(DbProvider.MYSQL, "Data Source=localhost;database=SmartSqlTestDB;uid=root;pwd=SmartSql.net")
19+
.Build().GetDbSessionFactory();
20+
21+
var list = new List<User> {
22+
new User {Id = 1, UserName = "1"}
23+
, new User {Id = 2, UserName = "2"}
24+
};
25+
using (var dbSession = dbSessionFactory.Open())
26+
{
27+
var data = list.ToDataTable();
28+
data.TableName = "t_user";
29+
BulkInsert bulkInsert = new BulkInsert(dbSession)
30+
{
31+
SecureFilePriv = "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads",
32+
Table = data
33+
};
34+
bulkInsert.Insert();
35+
}
36+
}
37+
}
38+
39+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using SmartSql.Bulk;
5+
using SmartSql.Bulk.PostgreSql;
6+
using SmartSql.DataSource;
7+
using SmartSql.Test.Entities;
8+
using Xunit;
9+
10+
namespace SmartSql.Test.Unit.Bulk
11+
{
12+
public class PostgreSqlTest
13+
{
14+
[Fact]
15+
public void Insert()
16+
{
17+
var dbSessionFactory = new SmartSqlBuilder()
18+
.UseDataSource(DbProvider.POSTGRESQL, "Server=localhost;Database=SmartTestDB;Port=5432;User Id=postgres;Password=SmartSql.net;")
19+
.Build().GetDbSessionFactory();
20+
21+
var list = new List<User> {
22+
new User {Id = 1, UserName = "1"}
23+
, new User {Id = 2, UserName = "2"}
24+
};
25+
using (var dbSession = dbSessionFactory.Open())
26+
{
27+
var data = list.ToDataTable();
28+
data.Columns.RemoveAt(0);
29+
data.Columns["UserName"].ColumnName = "user_name";
30+
data.Columns["Status"].ColumnName = "status";
31+
data.TableName = "t_user";
32+
BulkInsert bulkInsert = new BulkInsert(dbSession);
33+
bulkInsert.Table = data;
34+
bulkInsert.Insert();
35+
}
36+
}
37+
}
38+
}

src/SmartSql.Test/Entities/User.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public User(long id, string name, UserStatus status)
2828
public String UserName { get; set; }
2929
public UserStatus Status { get; set; }
3030
}
31-
public enum UserStatus
31+
public enum UserStatus : Int16
3232
{
3333
Ok = 1
3434
}

src/SmartSql.Test/Maps/User.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,15 @@
88
//*******************************-->
99

1010
<SmartSqlMap Scope="User" xmlns="http://SmartSql.net/schemas/SmartSqlMap.xsd">
11-
11+
<!--<Caches >
12+
<Cache Id="RedisCache" Type="${RedisCacheProvider}">
13+
<Property Name="DatabaseId" Value="3"/>
14+
<Property Name="ConnectionString" Value="${Redis}"/>
15+
<FlushOnExecute Statement="Insert"/>
16+
<FlushOnExecute Statement="Update"/>
17+
<FlushOnExecute Statement="Delete"/>
18+
</Cache>
19+
</Caches>-->
1220
<Statements>
1321
<Statement Id="QueryParams">
1422
<Where>

src/SmartSql/SmartSql.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
1010
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.5.1" />
1111
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
12-
12+
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
1313
</ItemGroup>
1414
</Project>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using SmartSql.Configuration;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Reflection;
5+
using System.Reflection.Emit;
6+
using System.Text;
7+
8+
namespace SmartSql.TypeHandlers
9+
{
10+
public class TypeHandlerCacheBuilder
11+
{
12+
private AssemblyBuilder _assemblyBuilder;
13+
private ModuleBuilder _moduleBuilder;
14+
private void Init()
15+
{
16+
string assemblyName = "SmartSql.TypeHandlerCacheBuilder" + this.GetHashCode();
17+
_assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName
18+
{
19+
Name = assemblyName
20+
}, AssemblyBuilderAccess.Run);
21+
_moduleBuilder = _assemblyBuilder.DefineDynamicModule(assemblyName + ".dll");
22+
}
23+
24+
public string CreateNameTypeHandlerCacheClassName(string typeHandlerName)
25+
{
26+
return $"{typeHandlerName}_TypeHandler_{this.GetHashCode()}";
27+
}
28+
29+
public Type CreateNameTypeHandler(TypeHandler typeHandler)
30+
{
31+
string className = CreateNameTypeHandlerCacheClassName(typeHandler.Name);
32+
var typeBuilder = _moduleBuilder.DefineType(className, TypeAttributes.Public);
33+
34+
throw new NotImplementedException();
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)