Skip to content

Commit e26bafd

Browse files
committed
- 修复 高版本编译器下 Pgsql 数组字段 Contains 解析问题;#2152
1 parent e7961d0 commit e26bafd

File tree

7 files changed

+23
-7
lines changed

7 files changed

+23
-7
lines changed

FreeSql/Extensions/LambadaExpressionExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,13 @@ public static ParameterExpression GetParameter(this Expression exp)
248248
return test.Result;
249249
}
250250

251+
public static bool IsReadonlySpanOp_Implicit(this Expression exp)
252+
{
253+
return exp.NodeType == ExpressionType.Call &&
254+
exp is MethodCallExpression exp3 &&
255+
exp3.Type.Name == "ReadOnlySpan`1" && exp3.Method.Name == "op_Implicit" && exp3.Arguments.Count == 1;
256+
}
257+
251258
static ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>> _dicTypeMethod = new ConcurrentDictionary<Type, ConcurrentDictionary<string, MethodInfo>>();
252259
public static bool IsStringJoin(this MethodCallExpression exp, out Expression tolistObjectExpOut, out MethodInfo toListMethodOut, out LambdaExpression toListArgs0Out)
253260
{

FreeSql/Internal/CommonExpression.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,8 +1137,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
11371137
}
11381138
case ExpressionType.Call:
11391139
var exp3 = exp as MethodCallExpression;
1140-
if (exp3.Type.Name == "ReadOnlySpan`1" && exp3.Method.Name == "op_Implicit" && exp3.Arguments.Count == 1)
1141-
return ExpressionLambdaToSql(exp3.Arguments[0], tsc);
1140+
if (exp3.IsReadonlySpanOp_Implicit()) return ExpressionLambdaToSql(exp3.Arguments[0], tsc);
11421141
if (!tsc.isNotSetMapColumnTmp) tsc.mapType = null;
11431142
if (exp3.IsExpressionCall())
11441143
{

Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLExpression.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
213213
else args1 = $"array[{args1}]";
214214
if (objExp != null)
215215
{
216-
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
216+
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
217+
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
218+
objExp.Type);
217219
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
218220
}
219221
return $"({left} @> {args1})";

Providers/FreeSql.Provider.KingbaseES/KingbaseESExpression.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,9 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
244244
else args1 = $"array[{args1}]";
245245
if (objExp != null)
246246
{
247-
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
247+
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
248+
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
249+
objExp.Type);
248250
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
249251
}
250252
return $"({left} @> {args1})";

Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLExpression.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
213213
else args1 = $"array[{args1}]";
214214
if (objExp != null)
215215
{
216-
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
216+
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
217+
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
218+
objExp.Type);
217219
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
218220
}
219221
return $"({left} @> {args1})";

Providers/FreeSql.Provider.PostgreSQL/PostgreSQLExpression.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,9 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
244244
else args1 = $"array[{args1}]";
245245
if (objExp != null)
246246
{
247-
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
247+
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
248+
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
249+
objExp.Type);
248250
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
249251
}
250252
return $"({left} @> {args1})";

Providers/FreeSql.Provider.ShenTong/ShenTongExpression.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,9 @@ public override string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc)
195195
else args1 = $"array[{args1}]";
196196
if (objExp != null)
197197
{
198-
var dbinfo = _common._orm.CodeFirst.GetDbInfo(objExp.Type);
198+
var dbinfo = _common._orm.CodeFirst.GetDbInfo(
199+
objExp.IsReadonlySpanOp_Implicit() ? (objExp as MethodCallExpression).Arguments[0].Type :
200+
objExp.Type);
199201
if (dbinfo != null) args1 = $"{args1}::{dbinfo.dbtype}";
200202
}
201203
return $"({left} @> {args1})";

0 commit comments

Comments
 (0)