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")]

FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs

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

105110
[Table(Name = "tb_alltype")]

FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderUtils.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using FreeSql.Internal.Model;
22
using System;
3+
using System.Collections;
34
using System.Collections.Concurrent;
5+
using System.Text;
46
using System.Text.RegularExpressions;
57

68
namespace FreeSql.Internal.CommonProvider
@@ -23,5 +25,24 @@ public string Addslashes(string filter, params object[] parms)
2325
try { string ret = string.Format(filter, nparms); return ret; } catch { return filter; }
2426
}
2527
static ConcurrentDictionary<int, Regex> _dicAddslashesReplaceIsNull = new ConcurrentDictionary<int, Regex>();
28+
29+
protected string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn)
30+
{
31+
var sb = new StringBuilder();
32+
var ie = param as IEnumerable;
33+
var idx = 0;
34+
foreach (var z in ie)
35+
{
36+
sb.Append(",");
37+
if (++idx > 500)
38+
{
39+
sb.Append(" \r\n \r\n"); //500元素分割, 3空格\r\n4空格
40+
idx = 1;
41+
}
42+
sb.Append(AddslashesProcessParam(z, mapType, mapColumn));
43+
}
44+
45+
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
46+
}
2647
}
2748
}

Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,8 @@ public override object AddslashesProcessParam(object param, Type mapType, Column
4949
else if (param is MygisGeometry)
5050
return string.Concat("ST_GeomFromText('", (param as MygisGeometry).AsText().Replace("'", "''"), "')");
5151
else if (param is IEnumerable)
52-
{
53-
var sb = new StringBuilder();
54-
var ie = param as IEnumerable;
55-
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
56-
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
57-
}
52+
return AddslashesIEnumerable(param, mapType, mapColumn);
53+
5854
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
5955
}
6056

Providers/FreeSql.Provider.MySql/MySqlExpression.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
109109
switch (callExp.Method.Name)
110110
{
111111
case "Contains":
112-
//判断 in
113-
return $"({args1}) in {left}";
112+
//判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
113+
return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
114114
}
115115
}
116116
break;

Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,8 @@ public override object AddslashesProcessParam(object param, Type mapType, Column
5050
else if (param is TimeSpan || param is TimeSpan?)
5151
return Adapter.TimeSpanRawSql(param);
5252
else if (param is IEnumerable)
53-
{
54-
var sb = new StringBuilder();
55-
var ie = param as IEnumerable;
56-
foreach (var z in ie) sb.Append(",").Append(AddslashesProcessParam(z, mapType, mapColumn));
57-
return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString();
58-
}
53+
return AddslashesIEnumerable(param, mapType, mapColumn);
54+
5955
return string.Concat("'", param.ToString().Replace("'", "''"), "'");
6056
}
6157

Providers/FreeSql.Provider.Odbc/Default/OdbcExpression.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
116116
switch (callExp.Method.Name)
117117
{
118118
case "Contains":
119-
//判断 in
120-
return $"({args1}) in {left}";
119+
//判断 in //在各大 Provider AdoProvider 中已约定,500元素分割, 3空格\r\n4空格
120+
return $"(({args1}) in {left.Replace(", \r\n \r\n", $") \r\n OR ({args1}) in (")})";
121121
}
122122
}
123123
break;

0 commit comments

Comments
 (0)