- 修复 ClickHouse 单条记录插入\t \n失败的 bug;

This commit is contained in:
2881099 2022-08-13 10:51:57 +08:00
parent b7c6db4f7a
commit ec6d1ffb37
4 changed files with 51 additions and 18 deletions

View File

@ -10,7 +10,7 @@ using XY.Model.Business;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using FreeSql.DataAnnotations; using FreeSql.DataAnnotations;
namespace FreeSql.Tests.MySql namespace FreeSql.Tests.ClickHouse
{ {
public class ClickHouseTest1 public class ClickHouseTest1
{ {
@ -309,11 +309,38 @@ namespace FreeSql.Tests.MySql
[Fact] [Fact]
public void TestInsertNoneParameter() public void TestInsertNoneParameter()
{ {
var json = "[{\"date\":\"2021-12-19T02:47:53.4365075 08:00\",\"temperatureC\":6,\"temperatureF\":42,\"summary\":\"Balmy\"},{\"date\":\"2021-12-20T02:47:53.4366893 08:00\",\"temperatureC\":36,\"temperatureF\":96,\"summary\":\"Bracing\"},{\"date\":\"2021-12-21T02:47:53.4366903 08:00\",\"temperatureC\":-15,\"temperatureF\":6,\"summary\":\"Bracing\"},{\"date\":\"2021-12-22T02:47:53.4366904 08:00\",\"temperatureC\":14,\"temperatureF\":57,\"summary\":\"Cool\"},{\"date\":\"2021-12-23T02:47:53.4366905 08:00\",\"temperatureC\":29,\"temperatureF\":84,\"summary\":\"Mild\"}]"; var json = "[{\"date\":\t\"2021-12-19T02:47:53.4365075 08:00\",\"temperatureC\":6,\"temperatureF\":42,\"summary\":\"Balmy\"},{\"date\":\"2021-12-20T02:47:53.4366893 08:00\",\"temperatureC\":36,\"temperatureF\":96,\"summary\":\"Bracing\"},{\"date\":\"2021-12-21T02:47:53.4366903 08:00\",\"temperatureC\":-15,\"temperatureF\":6,\"summary\":\"Bracing\"},{\"date\":\"2021-12-22T02:47:53.4366904 08:00\",\"temperatureC\":14,\"temperatureF\":57,\"summary\":\"Cool\"},{\"date\":\"2021-12-23T02:47:53.4366905 08:00\",\"temperatureC\":29,\"temperatureF\":84,\"summary\":\"Mild\"}]";
var data = new Entity { Id = Guid.NewGuid().ToString(), Content = json }; var data = new Entity { Id = Guid.NewGuid().ToString(), Content = json };
var fsql = g.clickHouse; var fsql = g.clickHouse;
fsql.Insert(data).NoneParameter().ExecuteAffrows(); fsql.Insert(data).NoneParameter().ExecuteAffrows();
var item = fsql.Select<Entity>().Where(a => a.Id == data.Id).First();
Assert.Equal(item.Content, json);
}
[Fact]
public void TestInsertUseParameter()
{
var fsql = g.clickHouse;
fsql.CodeFirst.SyncStructure<Entity>();
var json = "[{\"date\":\t\"2021-12-19T02:47:53.4365075 08:00\",\"temperatureC\":6,\"temperatureF\":42,\"summary\":\"Balmy\"},{\"date\":\"2021-12-20T02:47:53.4366893 08:00\",\"temperatureC\":36,\"temperatureF\":96,\"summary\":\"Bracing\"},{\"date\":\"2021-12-21T02:47:53.4366903 08:00\",\"temperatureC\":-15,\"temperatureF\":6,\"summary\":\"Bracing\"},{\"date\":\"2021-12-22T02:47:53.4366904 08:00\",\"temperatureC\":14,\"temperatureF\":57,\"summary\":\"Cool\"},{\"date\":\"2021-12-23T02:47:53.4366905 08:00\",\"temperatureC\":29,\"temperatureF\":84,\"summary\":\"Mild\"}]";
var data = new Entity { Id = Guid.NewGuid().ToString(), Content = json };
var sql1 = fsql.Insert(data).ToSql();
fsql.Insert(data).ExecuteAffrows();
var item = fsql.Select<Entity>().Where(a => a.Id == data.Id).First();
Assert.Equal(item.Content, json);
var data2 = new[]{
new Entity { Id = Guid.NewGuid().ToString(), Content = json },
new Entity { Id = Guid.NewGuid().ToString(), Content = json }
};
var sql2 = fsql.Insert(data2).ToSql();
fsql.Insert(data2).ExecuteAffrows();
item = fsql.Select<Entity>().Where(a => a.Id == data2[0].Id).First();
Assert.Equal(item.Content, json);
item = fsql.Select<Entity>().Where(a => a.Id == data2[1].Id).First();
Assert.Equal(item.Content, json);
} }
} }
} }

View File

@ -4,11 +4,6 @@
<name>FreeSql.Tests</name> <name>FreeSql.Tests</name>
</assembly> </assembly>
<members> <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"> <member name="P:FreeSql.Tests.Firebird.FirebirdCodeFirstTest.AddUniquesInfo.id">
<summary> <summary>
编号 编号
@ -432,6 +427,11 @@
修改人 修改人
</summary> </summary>
</member> </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"> <member name="T:FreeSql.Tests.SqlServer.SqlServerCodeFirstTest.tbdot01">
<summary> <summary>
表中带点 表中带点

View File

@ -9,8 +9,6 @@ public class g
{ {
static Lazy<IFreeSql> clickHouseLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder() 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") .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) //.UseAutoSyncStructure(true)
//.UseGenerateCommandParameterWithLambda(true) //.UseGenerateCommandParameterWithLambda(true)
.UseMonitorCommand( .UseMonitorCommand(

View File

@ -19,6 +19,11 @@ namespace FreeSql.ClickHouse
public override DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value) public override DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value)
{ {
if (value is string str)
value = str?.Replace("\t", "\\t")
.Replace("\r\n", "\\r\\n")
.Replace("\n", "\\n")
.Replace("\r", "\\r");
if (string.IsNullOrEmpty(parameterName)) parameterName = $"p_{_params?.Count}"; if (string.IsNullOrEmpty(parameterName)) parameterName = $"p_{_params?.Count}";
var dbtype = (DbType?)_orm.CodeFirst.GetDbInfo(type)?.type; var dbtype = (DbType?)_orm.CodeFirst.GetDbInfo(type)?.type;
DbParameter ret = new ClickHouseDbParameter { ParameterName = parameterName };//QuoteParamterName(parameterName) DbParameter ret = new ClickHouseDbParameter { ParameterName = parameterName };//QuoteParamterName(parameterName)
@ -38,10 +43,8 @@ namespace FreeSql.ClickHouse
break; break;
} }
if (value is bool) if (value is bool)
{
ret.Value = (bool)value ? 1 : 0; ret.Value = (bool)value ? 1 : 0;
} }
}
_params?.Add(ret); _params?.Add(ret);
return ret; return ret;
} }
@ -49,6 +52,11 @@ namespace FreeSql.ClickHouse
public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => public override DbParameter[] GetDbParamtersByObject(string sql, object obj) =>
Utils.GetDbParamtersByObject<DbParameter>(sql, obj, "?", (name, type, value) => Utils.GetDbParamtersByObject<DbParameter>(sql, obj, "?", (name, type, value) =>
{ {
if (value is string str)
value = str?.Replace("\t", "\\t")
.Replace("\r\n", "\\r\\n")
.Replace("\n", "\\n")
.Replace("\r", "\\r");
DbParameter ret = new ClickHouseDbParameter { ParameterName = $"?{name}", Value = value }; DbParameter ret = new ClickHouseDbParameter { ParameterName = $"?{name}", Value = value };
var tp = _orm.CodeFirst.GetDbInfo(type)?.type; var tp = _orm.CodeFirst.GetDbInfo(type)?.type;
if (tp != null) if (tp != null)