mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化 GlobalFilter 过滤器表达式 bool 解析;
This commit is contained in:
parent
38d5580c54
commit
fe7b7e5012
@ -13,6 +13,8 @@ Namespace FreeSql.Tests.VB
|
|||||||
|
|
||||||
Dim List4 = g.sqlserver.Select(Of Testvb).ToList(Function(a) New With {a, a.Id, a.Title})
|
Dim List4 = g.sqlserver.Select(Of Testvb).ToList(Function(a) New With {a, a.Id, a.Title})
|
||||||
|
|
||||||
|
Dim List5 = g.sqlserver.Select(Of Testvb).Where(Function(a) a.IsDeleted).ToList()
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@ -20,4 +22,5 @@ End Namespace
|
|||||||
Class Testvb
|
Class Testvb
|
||||||
Property Id As Integer
|
Property Id As Integer
|
||||||
Property Title As String
|
Property Title As String
|
||||||
|
Property IsDeleted As Boolean
|
||||||
End Class
|
End Class
|
||||||
|
@ -41,6 +41,7 @@ namespace FreeSql.Tests.MySqlConnectorExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Tests.Odbc.DamengExpression
|
|||||||
var t3 = select.Where(a => a.Bool == false).ToList();
|
var t3 = select.Where(a => a.Bool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.Bool).ToList();
|
var t4 = select.Where(a => !a.Bool).ToList();
|
||||||
var t5 = select.Where(a => a.Bool).ToList();
|
var t5 = select.Where(a => a.Bool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.Bool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
||||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Tests.Odbc.DefaultExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -41,6 +41,7 @@ namespace FreeSql.Tests.Odbc.MySqlExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Tests.Odbc.OracleExpression
|
|||||||
var t3 = select.Where(a => a.Bool == false).ToList();
|
var t3 = select.Where(a => a.Bool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.Bool).ToList();
|
var t4 = select.Where(a => !a.Bool).ToList();
|
||||||
var t5 = select.Where(a => a.Bool).ToList();
|
var t5 = select.Where(a => a.Bool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.Bool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
||||||
|
@ -44,6 +44,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -36,6 +36,7 @@ namespace FreeSql.Tests.Odbc.SqlServerExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -41,6 +41,7 @@ namespace FreeSql.Tests.MySqlExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Tests.OracleExpression
|
|||||||
var t3 = select.Where(a => a.Bool == false).ToList();
|
var t3 = select.Where(a => a.Bool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.Bool).ToList();
|
var t4 = select.Where(a => !a.Bool).ToList();
|
||||||
var t5 = select.Where(a => a.Bool).ToList();
|
var t5 = select.Where(a => a.Bool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.Bool).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
||||||
|
@ -48,6 +48,7 @@ namespace FreeSql.Tests.PostgreSQLExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).Limit(10).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).Limit(10).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).Limit(10).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).Limit(10).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).Limit(10).ToList();
|
var t5 = select.Where(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).Limit(10).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).Limit(10).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).Limit(10).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).Limit(10).ToList();
|
||||||
|
@ -44,6 +44,7 @@ namespace FreeSql.Tests.SqlServerExpression
|
|||||||
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
var t3 = select.Where(a => a.testFieldBool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
var t4 = select.Where(a => !a.testFieldBool).ToList();
|
||||||
var t5 = select.Where(a => a.testFieldBool).ToList();
|
var t5 = select.Where(a => a.testFieldBool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.testFieldBool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
var t11 = select.Where(a => a.testFieldBoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
var t22 = select.Where(a => a.testFieldBoolNullable != true).ToList();
|
||||||
|
@ -39,6 +39,7 @@ namespace FreeSql.Tests.SqliteExpression
|
|||||||
var t3 = select.Where(a => a.Bool == false).ToList();
|
var t3 = select.Where(a => a.Bool == false).ToList();
|
||||||
var t4 = select.Where(a => !a.Bool).ToList();
|
var t4 = select.Where(a => !a.Bool).ToList();
|
||||||
var t5 = select.Where(a => a.Bool).ToList();
|
var t5 = select.Where(a => a.Bool).ToList();
|
||||||
|
var t51 = select.WhereCascade(a => a.Bool).Limit(10).ToList();
|
||||||
|
|
||||||
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
var t11 = select.Where(a => a.BoolNullable == true).ToList();
|
||||||
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
var t22 = select.Where(a => a.BoolNullable != true).ToList();
|
||||||
|
@ -342,37 +342,24 @@ namespace FreeSql.Internal
|
|||||||
{ ExpressionType.Modulo, "%" },
|
{ ExpressionType.Modulo, "%" },
|
||||||
{ ExpressionType.Equal, "=" },
|
{ ExpressionType.Equal, "=" },
|
||||||
};
|
};
|
||||||
|
|
||||||
public string ExpressionWhereLambdaNoneForeignObject(List<SelectTableInfo> _tables, TableInfo table, List<SelectColumnInfo> _selectColumnMap, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<DbParameter> dbParams)
|
public string ExpressionWhereLambdaNoneForeignObject(List<SelectTableInfo> _tables, TableInfo table, List<SelectColumnInfo> _selectColumnMap, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<DbParameter> dbParams)
|
||||||
{
|
{
|
||||||
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, _selectColumnMap = _selectColumnMap, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = table, dbParams = dbParams });
|
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, _selectColumnMap = _selectColumnMap, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = table, dbParams = dbParams });
|
||||||
var isBool = exp.Type.NullableTypeOrThis() == typeof(bool);
|
return GetBoolString(exp, sql);
|
||||||
if (exp.NodeType == ExpressionType.MemberAccess && isBool && sql.Contains(" IS ") == false && sql.Contains(" = ") == false)
|
|
||||||
return $"{sql} = {formatSql(true, null, null, null)}";
|
|
||||||
if (isBool)
|
|
||||||
return GetBoolString(sql);
|
|
||||||
return sql;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ExpressionWhereLambda(List<SelectTableInfo> _tables, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<LambdaExpression> whereCascadeExpression, List<DbParameter> dbParams)
|
public string ExpressionWhereLambda(List<SelectTableInfo> _tables, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<LambdaExpression> whereCascadeExpression, List<DbParameter> dbParams)
|
||||||
{
|
{
|
||||||
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression, dbParams = dbParams });
|
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression, dbParams = dbParams });
|
||||||
var isBool = exp.Type.NullableTypeOrThis() == typeof(bool);
|
return GetBoolString(exp, sql);
|
||||||
if (exp.NodeType == ExpressionType.MemberAccess && isBool && sql.Contains(" IS ") == false && sql.Contains(" = ") == false)
|
|
||||||
return $"{sql} = {formatSql(true, null, null, null)}";
|
|
||||||
if (isBool)
|
|
||||||
return GetBoolString(sql);
|
|
||||||
return sql;
|
|
||||||
}
|
}
|
||||||
static ConcurrentDictionary<string, Regex> dicRegexAlias = new ConcurrentDictionary<string, Regex>();
|
static ConcurrentDictionary<string, Regex> dicRegexAlias = new ConcurrentDictionary<string, Regex>();
|
||||||
public void ExpressionJoinLambda(List<SelectTableInfo> _tables, SelectTableInfoType tbtype, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<LambdaExpression> whereCascadeExpression)
|
public void ExpressionJoinLambda(List<SelectTableInfo> _tables, SelectTableInfoType tbtype, Expression exp, Func<Expression[], string> getSelectGroupingMapString, List<LambdaExpression> whereCascadeExpression)
|
||||||
{
|
{
|
||||||
var tbidx = _tables.Count;
|
var tbidx = _tables.Count;
|
||||||
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = tbtype, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression });
|
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, getSelectGroupingMapString = getSelectGroupingMapString, tbtype = tbtype, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereCascadeExpression = whereCascadeExpression });
|
||||||
var isBool = exp.Type.NullableTypeOrThis() == typeof(bool);
|
sql = GetBoolString(exp, sql);
|
||||||
if (exp.NodeType == ExpressionType.MemberAccess && isBool && sql.Contains(" IS ") == false && sql.Contains(" = ") == false)
|
|
||||||
sql = $"{sql} = {formatSql(true, null, null, null)}";
|
|
||||||
if (isBool)
|
|
||||||
sql = GetBoolString(sql);
|
|
||||||
|
|
||||||
if (_tables.Count > tbidx)
|
if (_tables.Count > tbidx)
|
||||||
{
|
{
|
||||||
@ -404,6 +391,15 @@ namespace FreeSql.Internal
|
|||||||
static MethodInfo MethodDateTimeSubtractTimeSpan = typeof(DateTime).GetMethod("Subtract", new Type[] { typeof(TimeSpan) });
|
static MethodInfo MethodDateTimeSubtractTimeSpan = typeof(DateTime).GetMethod("Subtract", new Type[] { typeof(TimeSpan) });
|
||||||
static MethodInfo MethodMathFloor = typeof(Math).GetMethod("Floor", new Type[] { typeof(double) });
|
static MethodInfo MethodMathFloor = typeof(Math).GetMethod("Floor", new Type[] { typeof(double) });
|
||||||
|
|
||||||
|
public string GetBoolString(Expression exp, string sql)
|
||||||
|
{
|
||||||
|
var isBool = exp.Type.NullableTypeOrThis() == typeof(bool);
|
||||||
|
if (exp.NodeType == ExpressionType.MemberAccess && isBool && sql.Contains(" IS ") == false && sql.Contains(" = ") == false)
|
||||||
|
return $"{sql} = {formatSql(true, null, null, null)}";
|
||||||
|
if (isBool)
|
||||||
|
return GetBoolString(sql);
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
static string GetBoolString(string sql)
|
static string GetBoolString(string sql)
|
||||||
{
|
{
|
||||||
switch (sql)
|
switch (sql)
|
||||||
@ -1340,7 +1336,8 @@ namespace FreeSql.Internal
|
|||||||
new ReplaceVisitor().Modify(fl.Body, newParameter),
|
new ReplaceVisitor().Modify(fl.Body, newParameter),
|
||||||
newParameter
|
newParameter
|
||||||
);
|
);
|
||||||
var whereSql = ExpressionLambdaToSql(expExp, new ExpTSC { _tables = null, _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
|
var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC { _tables = null, _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
|
||||||
|
whereSql = GetBoolString(expExp.Body, whereSql);
|
||||||
if (isEmpty == false)
|
if (isEmpty == false)
|
||||||
sb.Append(" AND ");
|
sb.Append(" AND ");
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user