Skip to content

Commit 9f97d67

Browse files
2881028810
authored andcommitted
- 优化 Contains 表达式解析为 where in 自动拆分,防止大于 1000 的 SQL 错误;
1 parent d42b2fc commit 9f97d67

File tree

32 files changed

+201
-86
lines changed

32 files changed

+201
-86
lines changed

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ public void Array()
106106
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
107107
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
108108
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
109+
110+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
111+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
112+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
113+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
109114
}
110115

111116
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public void Array()
7272
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
7373
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
7474
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
75+
76+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
77+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
78+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
79+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
7580
}
7681

7782
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/OtherTest.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,12 @@ public void Array()
105105
var inarray2 = new List<int>() { 1, 2, 3 };
106106
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
107107
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
108-
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
108+
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
109+
110+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
111+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
112+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
113+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
109114
}
110115

111116
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ public void Array()
101101
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
102102
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
103103
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
104+
105+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
106+
var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList();
107+
var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList();
108+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
104109
}
105110

106111
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLExpression/OtherTest.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,12 @@ public void Array()
107107
var inarray2 = new List<int>() { 1, 2, 3 };
108108
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
109109
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
110-
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
110+
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
111+
112+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
113+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
114+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
115+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
111116
}
112117

113118

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/OtherTest.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,77 @@ public void Array()
9797
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
9898
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
9999
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
100+
101+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
102+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
103+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
104+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
105+
106+
//nvarchar
107+
IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
108+
var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList();
109+
110+
//in not in
111+
var nsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
112+
var nsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList();
113+
var nsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
114+
115+
var ninarray = new[] { "a1", "a2", "a3" };
116+
var nsql1111 = select.Where(a => ninarray.Contains(a.testFieldString)).ToList();
117+
var nsql1122 = select.Where(a => ninarray.Contains(a.testFieldString) == false).ToList();
118+
var nsql1133 = select.Where(a => !ninarray.Contains(a.testFieldString)).ToList();
119+
120+
//in not in
121+
var nsql11111 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
122+
var nsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString) == false).ToList();
123+
var nsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldString)).ToList();
124+
125+
var nsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
126+
var nsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString) == false).ToList();
127+
var nsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldString)).ToList();
128+
129+
var ninarray2 = new List<string>() { "a1", "a2", "a3" };
130+
var nsql111111 = select.Where(a => ninarray2.Contains(a.testFieldString)).ToList();
131+
var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList();
132+
var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList();
133+
134+
var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray();
135+
var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList();
136+
var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList();
137+
var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList();
138+
139+
//varchar
140+
IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
141+
var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList();
142+
143+
//in not in
144+
var vsql111 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
145+
var vsql112 = select.Where(a => new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList();
146+
var vsql113 = select.Where(a => !new[] { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
147+
148+
var vinarray = new[] { "a1", "a2", "a3" };
149+
var vsql1111 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar)).ToList();
150+
var vsql1122 = select.Where(a => ninarray.Contains(a.testFieldStringVarchar) == false).ToList();
151+
var vsql1133 = select.Where(a => !ninarray.Contains(a.testFieldStringVarchar)).ToList();
152+
153+
//in not in
154+
var vsql11111 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
155+
var vsql11222 = select.Where(a => new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar) == false).ToList();
156+
var vsql11333 = select.Where(a => !new List<string>() { "a1", "a2", "a3" }.Contains(a.testFieldStringVarchar)).ToList();
157+
158+
var vsql11111a = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
159+
var vsql11222b = select.Where(a => new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar) == false).ToList();
160+
var vsql11333c = select.Where(a => !new List<string>(new[] { "a1", "a2", "a3" }).Contains(a.testFieldStringVarchar)).ToList();
161+
162+
var vinarray2 = new List<string>() { "a1", "a2", "a3" };
163+
var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList();
164+
var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
165+
var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList();
166+
167+
var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray();
168+
var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
169+
var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList();
170+
var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
100171
}
101172

102173
[Table(Name = "tb_alltype")]
@@ -123,6 +194,9 @@ class TableAllType
123194
public DateTimeOffset testFieldDateTimeOffset { get; set; }
124195
public byte[] testFieldBytes { get; set; }
125196
public string testFieldString { get; set; }
197+
198+
[Column(DbType = "varchar(255)")]
199+
public string testFieldStringVarchar { get; set; }
126200
public Guid testFieldGuid { get; set; }
127201

128202
public bool? testFieldBoolNullable { get; set; }

FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ public void Array()
106106
var sql111111 = select.Where(a => inarray.Contains(a.testFieldInt)).ToList();
107107
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
108108
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
109+
110+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
111+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
112+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
113+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
109114
}
110115

111116
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ public void Array()
101101
var sql111111 = select.Where(a => inarray.Contains(a.Int)).ToList();
102102
//var sql112222 = select.Where(a => inarray.Contains(a.Int) == false).ToList();
103103
var sql113333 = select.Where(a => !inarray.Contains(a.Int)).ToList();
104+
105+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
106+
var sql1111111 = select.Where(a => inarray2n.Contains(a.Int)).ToList();
107+
var sql1122222 = select.Where(a => inarray2n.Contains(a.Int) == false).ToList();
108+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.Int)).ToList();
104109
}
105110

106111
[Table(Name = "tb_alltype")]

FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ public void Array()
130130
var sql7 = select.Where(a => a.testFieldIntArray.GetLongLength(1) > 0).ToList();
131131
var sql8 = select.Where(a => a.testFieldIntArray.Length > 0).ToList();
132132
var sql9 = select.Where(a => a.testFieldIntArray.Count() > 0).ToList();
133+
134+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
135+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
136+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
137+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
133138
}
134139

135140
[Fact]

FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ public void Array()
106106
var sql112222 = select.Where(a => inarray.Contains(a.testFieldInt) == false).ToList();
107107
var sql113333 = select.Where(a => !inarray.Contains(a.testFieldInt)).ToList();
108108

109+
var inarray2n = Enumerable.Range(1, 3333).ToArray();
110+
var sql1111111 = select.Where(a => inarray2n.Contains(a.testFieldInt)).ToList();
111+
var sql1122222 = select.Where(a => inarray2n.Contains(a.testFieldInt) == false).ToList();
112+
var sql1133333 = select.Where(a => !inarray2n.Contains(a.testFieldInt)).ToList();
113+
109114
//nvarchar
110115
IEnumerable<string> stringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
111116
var ntestlinq = select.Where(a => stringlinqlist.Contains(a.testFieldString)).ToList();
@@ -134,6 +139,11 @@ public void Array()
134139
var nsql112222 = select.Where(a => ninarray2.Contains(a.testFieldString) == false).ToList();
135140
var nsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldString)).ToList();
136141

142+
var ninarray2n = Enumerable.Range(1, 3333).Select(a => "testnvarchar" + a).ToArray();
143+
var nsql1111111 = select.Where(a => ninarray2n.Contains(a.testFieldString)).ToList();
144+
var nsql1122222 = select.Where(a => ninarray2n.Contains(a.testFieldString) == false).ToList();
145+
var nsql1133333 = select.Where(a => !ninarray2n.Contains(a.testFieldString)).ToList();
146+
137147
//varchar
138148
IEnumerable<string> vstringlinqlist = new List<string>(new[] { "a1", "a2", "a3" });
139149
var vtestlinq = select.Where(a => vstringlinqlist.Contains(a.testFieldStringVarchar)).ToList();
@@ -161,6 +171,11 @@ public void Array()
161171
var vsql111111 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar)).ToList();
162172
var vsql112222 = select.Where(a => ninarray2.Contains(a.testFieldStringVarchar) == false).ToList();
163173
var vsql113333 = select.Where(a => !ninarray2.Contains(a.testFieldStringVarchar)).ToList();
174+
175+
var vinarray2n = Enumerable.Range(1, 3333).Select(a => "testvarchar" + a).ToArray();
176+
var vsql1111111 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
177+
var vsql1122222 = select.Where(a => vinarray2n.Contains(a.testFieldStringVarchar) == false).ToList();
178+
var vsql1133333 = select.Where(a => !vinarray2n.Contains(a.testFieldStringVarchar)).ToList();
164179
}
165180

166181
[Table(Name = "tb_alltypeOther")]

0 commit comments

Comments
 (0)