Skip to content

Commit c93b6ee

Browse files
authored
修复MYSQL批量插入bool类型的值无法正常转换的问题,并增加对表达式的支持 (#203)
1 parent 9b5503c commit c93b6ee

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

src/SmartSql.Bulk.MySql/BulkInsert.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using SmartSql.DbSession;
22
using SmartSql.Reflection.TypeConstants;
33
using System;
4+
using System.Collections.Generic;
45
using System.Data;
56
using System.IO;
6-
using System.Linq;
77
using System.Text;
88
using System.Threading.Tasks;
99

@@ -34,6 +34,7 @@ public override void Insert()
3434

3535
public String SecureFilePriv { get; set; }
3636
public String DateTimeFormat { get; set; } = "yyyy-MM-dd HH:mm:ss";
37+
public List<string> Expressions { get; } = new List<string>();
3738
private string _fieldTerminator = ",";
3839
private char _fieldQuotationCharacter = '"';
3940
private char _escapeCharacter = '"';
@@ -65,6 +66,8 @@ private MySqlBulkLoader GetBulkLoader(MySqlConnection conn)
6566
bulkLoader.Columns.Add(dbCol.ColumnName);
6667
}
6768

69+
bulkLoader.Expressions.AddRange(Expressions);
70+
6871
return bulkLoader;
6972
}
7073

@@ -98,6 +101,18 @@ private string ToCSV()
98101
dataBuilder.Append(dateCellTime);
99102
}
100103
}
104+
else if (dataColumn.DataType == CommonType.Boolean || dataColumn.DataType == typeof(bool?))
105+
{
106+
var originCell = row[dataColumn];
107+
if (originCell is DBNull)
108+
{
109+
dataBuilder.Append(NULL_VALUE);
110+
}
111+
else
112+
{
113+
dataBuilder.Append(Convert.ToByte(originCell));
114+
}
115+
}
101116
else if (row[dataColumn] is DBNull || dataColumn.AutoIncrement)
102117
{
103118
dataBuilder.Append(NULL_VALUE);
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
1+
using System.Collections.Generic;
42
using SmartSql.Bulk;
3+
using SmartSql.Bulk.MySqlConnector;
54
using SmartSql.DataSource;
65
using SmartSql.Test.Entities;
76
using Xunit;
8-
using SmartSql.Bulk.MySqlConnector;
97

108
namespace SmartSql.Test.Unit.Bulk
119
{
@@ -19,21 +17,23 @@ public void Insert()
1917
.UseAlias("MySqlConnectorTest")
2018
.Build().GetDbSessionFactory();
2119

22-
var list = new List<User> {
23-
new User {Id = 1, UserName = "1"}
24-
, new User {Id = 2, UserName = "2"}
20+
var list = new List<User>
21+
{
22+
new() { Id = 1, UserName = "jack" , IsDelete = true},
23+
new() { Id = 2, UserName = "lily", IsDelete = false}
2524
};
26-
using (var dbSession = dbSessionFactory.Open())
25+
using var dbSession = dbSessionFactory.Open();
26+
var data = list.ToDataTable();
27+
data.TableName = "t_user";
28+
var bulkInsert = new BulkInsert(dbSession)
2729
{
28-
var data = list.ToDataTable();
29-
data.TableName = "t_user";
30-
BulkInsert bulkInsert = new BulkInsert(dbSession)
31-
{
32-
SecureFilePriv = "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads",
33-
Table = data
34-
};
35-
bulkInsert.Insert();
36-
}
30+
SecureFilePriv = "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads",
31+
Table = data
32+
};
33+
34+
bulkInsert.Expressions.Add("user_name = upper(user_name)");
35+
bulkInsert.Expressions.Add("is_delete = convert(is_delete, unsigned )");
36+
bulkInsert.Insert();
3737
}
3838
}
39-
}
39+
}

src/SmartSql.Test/Entities/User.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,14 @@ public User(long id, string name, UserStatus status)
3030
Status = status;
3131
}
3232

33+
[Column("id")]
3334
public virtual long Id { get; set; }
35+
[Column("user_name")]
3436
public virtual String UserName { get; set; }
37+
[Column("status")]
3538
public virtual UserStatus Status { get; set; }
39+
[Column("is_delete")]
40+
public virtual bool IsDelete { get; set; }
3641
}
3742

3843
public enum UserStatus : Int16

0 commit comments

Comments
 (0)