- 优化 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

@ -72,6 +72,11 @@ namespace FreeSql.Tests.Odbc.DefaultExpression
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]

View File

@ -105,7 +105,12 @@ namespace FreeSql.Tests.Odbc.MySqlExpression
var inarray2 = new List<int>() { 1, 2, 3 };
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).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")]

View File

@ -101,6 +101,11 @@ namespace FreeSql.Tests.Odbc.OracleExpression
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).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")]

View File

@ -107,7 +107,12 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
var inarray2 = new List<int>() { 1, 2, 3 };
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).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 sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).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")]
@ -123,6 +194,9 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
public DateTimeOffset testFieldDateTimeOffset { get; set; }
public byte[] testFieldBytes { get; set; }
public string testFieldString { get; set; }
[Column(DbType = "varchar(255)")]
public string testFieldStringVarchar { get; set; }
public Guid testFieldGuid { get; set; }
public bool? testFieldBoolNullable { get; set; }