- 优化 Contains 表达式解析为 where in 自动拆分,防止大于 1000 的 SQL 错误;

This commit is contained in:
28810 2019-11-20 16:06:45 +08:00
parent d42b2fc2b8
commit 9f97d67cb2
32 changed files with 201 additions and 86 deletions

View File

@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlConnectorExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -72,6 +72,11 @@ namespace FreeSql.Tests.Odbc.DefaultExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -106,6 +106,11 @@ namespace FreeSql.Tests.Odbc.MySqlExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -101,6 +101,11 @@ namespace FreeSql.Tests.Odbc.OracleExpression
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -108,6 +108,11 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }

View File

@ -97,6 +97,77 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
//nvarchar
IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList();
//in not in
var nsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
var nsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList();
var nsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
var ninarray = new[] { "a1", "a2", "a3" };
var nsql1111 = select.Where(a => ninarray.Contains(a.testFieldString)).ToList();
var nsql1122 = select.Where(a => ninarray.Contains(a.testFieldString) == false).ToList();
var nsql1133 = select.Where(a => !ninarray.Contains(a.testFieldString)).ToList();
//in not in
var nsql11111 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
var nsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList();
var nsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
var nsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
var nsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString) == false).ToList();
var nsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
var ninarray2 = new List<string>() { "a1", "a2", "a3" };
var nsql111111 = select.Where(a => ninarray2.Contains(a.testFieldString)).ToList();
var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList();
var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList();
var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray();
var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList();
var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList();
var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList();
//varchar
IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList();
//in not in
var vsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
var vsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
var vinarray = new[] { "a1", "a2", "a3" };
var vsql1111 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar)).ToList();
var vsql1122 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql1133 = select.Where(a => !ninarray.Contains(a.testFieldStringVarchar)).ToList();
//in not in
var vsql11111 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
var vsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
var vsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
var vsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar) == false).ToList();
var vsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
var vinarray2 = new List<string>() { "a1", "a2", "a3" };
var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList();
var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList();
var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray();
var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]
@ -123,6 +194,9 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
public DateTimeOffset testFieldDateTimeOffset { get; set; } public DateTimeOffset testFieldDateTimeOffset { get; set; }
public byte[] testFieldBytes { get; set; } public byte[] testFieldBytes { get; set; }
public string testFieldString { get; set; } public string testFieldString { get; set; }
[Column(DbType = "varchar(255)")]
public string testFieldStringVarchar { get; set; }
public Guid testFieldGuid { get; set; } public Guid testFieldGuid { get; set; }
public bool? testFieldBoolNullable { get; set; } public bool? testFieldBoolNullable { get; set; }

View File

@ -106,6 +106,11 @@ namespace FreeSql.Tests.MySqlExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -101,6 +101,11 @@ namespace FreeSql.Tests.OracleExpression
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); //var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -130,6 +130,11 @@ namespace FreeSql.Tests.PostgreSQLExpression
var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList(); var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList();
var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList(); var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList();
var sql9 = select.Where(a => a.testFieldIntArray.Count() > 0).ToList(); var sql9 = select.Where(a => a.testFieldIntArray.Count() > 0).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
} }
[Fact] [Fact]

View File

@ -106,6 +106,11 @@ namespace FreeSql.Tests.SqlServerExpression
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
//nvarchar //nvarchar
IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" }); IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList(); var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList();
@ -134,6 +139,11 @@ namespace FreeSql.Tests.SqlServerExpression
var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList(); var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList();
var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList(); var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList();
var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray();
var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList();
var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList();
var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList();
//varchar //varchar
IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" }); IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList(); var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList();
@ -161,6 +171,11 @@ namespace FreeSql.Tests.SqlServerExpression
var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList(); var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList();
var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList(); var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList(); var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList();
var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray();
var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList();
var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
} }
[Table(Name = "tb_alltypeOther")] [Table(Name = "tb_alltypeOther")]

View File

@ -100,6 +100,11 @@ namespace FreeSql.Tests.SqliteExpression
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList(); var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList(); var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList(); var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
var inarray2n = Enumerable.Range(1, 3333).ToArray();
var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList();
var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList();
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
} }
[Table(Name = "tb_alltype")] [Table(Name = "tb_alltype")]

View File

@ -1,6 +1,8 @@
using FreeSql.Internal.Model; using FreeSql.Internal.Model;
using System; using System;
using System.Collections;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace FreeSql.Internal.CommonProvider namespace FreeSql.Internal.CommonProvider
@ -23,5 +25,24 @@ namespace FreeSql.Internal.CommonProvider
try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; } try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; }
} }
static ConcurrentDictionary<int, Regex> _dicAddslashesReplaceIsNull = new ConcurrentDictionary<int, Regex>(); static ConcurrentDictionary<int, Regex> _dicAddslashesReplaceIsNull = new ConcurrentDictionary<int, Regex>();
protected string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn)
{
var sb = new StringBuilder();
var ie = param as IEnumerable;
var idx = 0;
foreach (var z in ie)
{
sb.Append(",");
if (++idx > 500)
{
sb.Append(" \r\n \r\n"); //500元素分割, 3空格\r\n4空格
idx = 1;
}
sb.Append(AddslashesProcessParam(z, mapType, mapColumn));
}
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
} }
} }

View File

@ -49,12 +49,8 @@ namespace FreeSql.MySql
else if (param is MygisGeometry) else if (param is MygisGeometry)
return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')"); return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -109,8 +109,8 @@ namespace FreeSql.MySql
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -50,12 +50,8 @@ namespace FreeSql.Odbc.Default
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return Adapter.TimeSpanRawSql(param); return Adapter.TimeSpanRawSql(param);
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -116,8 +116,8 @@ namespace FreeSql.Odbc.Default
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -47,12 +47,8 @@ namespace FreeSql.Odbc.MySql
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).Ticks / 10; return ((TimeSpan)param).Ticks / 10;
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -109,8 +109,8 @@ namespace FreeSql.Odbc.MySql
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -46,12 +46,8 @@ namespace FreeSql.Odbc.Oracle
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
//if (param is string) return string.Concat('N', nparms[a]); //if (param is string) return string.Concat('N', nparms[a]);
} }

View File

@ -109,8 +109,8 @@ namespace FreeSql.Odbc.Oracle
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -48,12 +48,8 @@ namespace FreeSql.Odbc.PostgreSQL
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).Ticks / 10; return ((TimeSpan)param).Ticks / 10;
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -137,9 +137,9 @@ namespace FreeSql.Odbc.PostgreSQL
tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType); tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
//判断 in 或 array @> array //判断 in 或 array @> array
if (left.StartsWith("array[") || left.EndsWith("]")) if (left.StartsWith("array[") || left.EndsWith("]"))
return $"{args1} in ({left.Substring(6, left.Length - 7)})"; return $"({args1}) in ({left.Substring(6, left.Length - 7)})";
if (left.StartsWith("(") || left.EndsWith(")")) if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"{args1} in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]"; if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
args1 = $"array[{args1}]"; args1 = $"array[{args1}]";
if (objExp != null) if (objExp != null)

View File

@ -63,12 +63,8 @@ namespace FreeSql.Odbc.SqlServer
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).TotalSeconds; return ((TimeSpan)param).TotalSeconds;
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -113,8 +113,8 @@ namespace FreeSql.Odbc.SqlServer
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -46,12 +46,8 @@ namespace FreeSql.Oracle
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')";
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
//if (param is string) return string.Concat('N', nparms[a]); //if (param is string) return string.Concat('N', nparms[a]);
} }

View File

@ -109,8 +109,8 @@ namespace FreeSql.Oracle
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -65,12 +65,8 @@ namespace FreeSql.PostgreSQL
return pghstore.Append("'::hstore"); return pghstore.Append("'::hstore");
} }
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -167,9 +167,9 @@ namespace FreeSql.PostgreSQL
tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType); tsc.SetMapColumnTmp(null).SetMapTypeReturnOld(oldMapType);
//判断 in 或 array @> array //判断 in 或 array @> array
if (left.StartsWith("array[") || left.EndsWith("]")) if (left.StartsWith("array[") || left.EndsWith("]"))
return $"{args1} in ({left.Substring(6, left.Length - 7)})"; return $"({args1}) in ({left.Substring(6, left.Length - 7)})";
if (left.StartsWith("(") || left.EndsWith(")")) if (left.StartsWith("(") || left.EndsWith(")")) //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"{args1} in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]"; if (args1.StartsWith("(") || args1.EndsWith(")")) args1 = $"array[{args1.TrimStart('(').TrimEnd(')')}]";
args1 = $"array[{args1}]"; args1 = $"array[{args1}]";
if (objExp != null) if (objExp != null)

View File

@ -63,12 +63,8 @@ namespace FreeSql.SqlServer
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).TotalSeconds; return ((TimeSpan)param).TotalSeconds;
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -113,8 +113,8 @@ namespace FreeSql.SqlServer
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;

View File

@ -45,12 +45,8 @@ namespace FreeSql.Sqlite
else if (param is TimeSpan || param is TimeSpan?) else if (param is TimeSpan || param is TimeSpan?)
return ((TimeSpan)param).Ticks / 10000; return ((TimeSpan)param).Ticks / 10000;
else if (param is IEnumerable) else if (param is IEnumerable)
{ return AddslashesIEnumerable(param, mapType, mapColumn);
var sb = new StringBuilder();
var ie = param as IEnumerable;
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
}
return string.Concat("'", param.ToString().Replace("'", "''"), "'"); return string.Concat("'", param.ToString().Replace("'", "''"), "'");
} }

View File

@ -109,8 +109,8 @@ namespace FreeSql.Sqlite
switch (callExp.Method.Name) switch (callExp.Method.Name)
{ {
case "Contains": case "Contains":
//判断 in //判断 in //在各大 Provider AdoProvider 中已约定500元素分割, 3空格\r\n4空格
return $"({args1}) in {left}"; return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
} }
} }
break; break;