mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 修复 ClickHouse 单条记录插入\t \n失败的 bug;
This commit is contained in:
parent
b7c6db4f7a
commit
ec6d1ffb37
@ -10,7 +10,7 @@ using XY.Model.Business;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
|
||||
namespace FreeSql.Tests.MySql
|
||||
namespace FreeSql.Tests.ClickHouse
|
||||
{
|
||||
public class ClickHouseTest1
|
||||
{
|
||||
@ -309,11 +309,38 @@ namespace FreeSql.Tests.MySql
|
||||
[Fact]
|
||||
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 fsql = g.clickHouse;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
@ -4,11 +4,6 @@
|
||||
<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>
|
||||
编号
|
||||
@ -432,6 +427,11 @@
|
||||
修改人
|
||||
</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>
|
||||
表中带点
|
||||
|
@ -8,15 +8,13 @@ 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 => Debug.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
|
||||
//, (cmd, traceLog) => Console.WriteLine(traceLog)
|
||||
)
|
||||
.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")
|
||||
//.UseAutoSyncStructure(true)
|
||||
//.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseMonitorCommand(
|
||||
cmd => Debug.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText) //监听SQL命令对象,在执行前
|
||||
//, (cmd, traceLog) => Console.WriteLine(traceLog)
|
||||
)
|
||||
.UseLazyLoading(true)
|
||||
.Build());
|
||||
public static IFreeSql clickHouse => clickHouseLazy.Value;
|
||||
|
@ -19,6 +19,11 @@ namespace FreeSql.ClickHouse
|
||||
|
||||
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}";
|
||||
var dbtype = (DbType?)_orm.CodeFirst.GetDbInfo(type)?.type;
|
||||
DbParameter ret = new ClickHouseDbParameter { ParameterName = parameterName };//QuoteParamterName(parameterName)
|
||||
@ -38,9 +43,7 @@ namespace FreeSql.ClickHouse
|
||||
break;
|
||||
}
|
||||
if (value is bool)
|
||||
{
|
||||
ret.Value = (bool)value ? 1 : 0;
|
||||
}
|
||||
}
|
||||
_params?.Add(ret);
|
||||
return ret;
|
||||
@ -49,6 +52,11 @@ namespace FreeSql.ClickHouse
|
||||
public override DbParameter[] GetDbParamtersByObject(string sql, object obj) =>
|
||||
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 };
|
||||
var tp = _orm.CodeFirst.GetDbInfo(type)?.type;
|
||||
if (tp != null)
|
||||
|
Loading…
x
Reference in New Issue
Block a user