From ec6d1ffb37b0b54ed88687ff66681344b528944a Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sat, 13 Aug 2022 10:51:57 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ClickHouse=20=E5=8D=95?= =?UTF-8?q?=E6=9D=A1=E8=AE=B0=E5=BD=95=E6=8F=92=E5=85=A5\t=20\n=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClickHouse/ClickHouseTest1.cs | 31 +++++++++++++++++-- FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml | 10 +++--- FreeSql.Tests/FreeSql.Tests/g.cs | 16 +++++----- .../ClickHouseUtils.cs | 12 +++++-- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/ClickHouse/ClickHouseTest1.cs b/FreeSql.Tests/FreeSql.Tests/ClickHouse/ClickHouseTest1.cs index a6a26d05..cc5dc4c5 100644 --- a/FreeSql.Tests/FreeSql.Tests/ClickHouse/ClickHouseTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/ClickHouse/ClickHouseTest1.cs @@ -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().Where(a => a.Id == data.Id).First(); + Assert.Equal(item.Content, json); + } + + [Fact] + public void TestInsertUseParameter() + { + var fsql = g.clickHouse; + fsql.CodeFirst.SyncStructure(); + 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().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().Where(a => a.Id == data2[0].Id).First(); + Assert.Equal(item.Content, json); + item = fsql.Select().Where(a => a.Id == data2[1].Id).First(); + Assert.Equal(item.Content, json); } } } \ No newline at end of file diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml index 4ee3e866..46e1feb0 100644 --- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml +++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml @@ -4,11 +4,6 @@ FreeSql.Tests - - - 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert - - 编号 @@ -432,6 +427,11 @@ 修改人 + + + 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert + + 表中带点 diff --git a/FreeSql.Tests/FreeSql.Tests/g.cs b/FreeSql.Tests/FreeSql.Tests/g.cs index b7d4ead9..9330048b 100644 --- a/FreeSql.Tests/FreeSql.Tests/g.cs +++ b/FreeSql.Tests/FreeSql.Tests/g.cs @@ -8,15 +8,13 @@ using System.Threading; public class g { static Lazy clickHouseLazy = new Lazy(() => 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; diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseUtils.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseUtils.cs index ecd48033..6ff9e3e8 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseUtils.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseUtils.cs @@ -19,6 +19,11 @@ namespace FreeSql.ClickHouse public override DbParameter AppendParamter(List _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(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)