diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 7ce841144..8635cc2a3 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -368,16 +368,16 @@ void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp) ReadAnonymousField(_tables, _tableRule, field, child, ref index, initExpArg, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false); } } - else if (isAllDtoMap && _tables != null && _tables.Any() && + else if (isAllDtoMap && _tables != null && _tables.Any() && ( initExp.NewExpression.Type != _tables[0].Table.Type || - !initExp.Bindings.Any(a => + !initExp.Bindings.Any(a => // #2241 如果 new Dto 和 T 相同,并且未使用过例如:Name = t.Name,则也认为是 Dto 自动赋加所有属性来查询 { var aExp = a as MemberAssignment; if (aExp == null) return false; if (aExp.Expression is MemberExpression aExpRight == false) return false; - if (aExpRight.Expression == _tables[0].Parameter && + if (aExpRight.Expression == _tables[0].Parameter && aExpRight.Member.Name == a.Member.Name) return true; return false; }) @@ -495,7 +495,7 @@ void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp) break; } var mapType = initExpArg.Type; - if (dtoTable?.ColumnsByCs.TryGetValue(initExp.Bindings[a].Member.Name, out var dtoCol) == true && + if (dtoTable?.ColumnsByCs.TryGetValue(initExp.Bindings[a].Member.Name, out var dtoCol) == true && dtoCol.Attribute.IsIgnore != true) mapType = dtoCol.Attribute.MapType; var child = new ReadAnonymousTypeInfo @@ -816,6 +816,12 @@ public string[] ExpressionSelectColumns_MemberAccess_New_NewArrayInit(List _tables, Func _tableRule, TableInfo table, List _selectColumnMap, Expression exp, BaseDiyMemberExpression diymemexp, List dbParams) { var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, _tableRule = _tableRule, _selectColumnMap = _selectColumnMap, diymemexp = diymemexp, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = table, dbParams = dbParams }); @@ -1530,7 +1536,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc) typeof(ISelect0).IsAssignableFrom(arg3ExpNewArray.Expressions[0].Type)) { Array arg3Values = Array.CreateInstance(arg3ExpNewArray.Expressions[0].Type, arg3ExpNewArray.Expressions.Count); - for (var arg3Idx = 0;arg3Idx < arg3ExpNewArray.Expressions.Count; arg3Idx++) + for (var arg3Idx = 0; arg3Idx < arg3ExpNewArray.Expressions.Count; arg3Idx++) { var arg3ExpNewArrayTables = fsqltables.Select(tbcopy => new SelectTableInfo { @@ -2109,7 +2115,7 @@ exp4.Expression is BinaryExpression exp4BinaryExp && else if (expStackItem.Member.MemberType == MemberTypes.Field) firstValue = ((FieldInfo)expStackItem.Member).GetValue(firstValue); } - return formatSql(firstValue, tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); + return formatSql(firstValue, tsc.mapType, tsc.mapColumnTmp, tsc.dbParams, tsc.style); } return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams); } @@ -2592,7 +2598,7 @@ public static object ExpressionGetValue(Expression exp, out bool success) public enum ExpressionStyle { - Where, AsSelect, SelectColumns, ReturnISelect + Where, AsSelect, SelectColumns, ReturnISelect, Set } public class ExpTSC { @@ -2836,7 +2842,7 @@ protected override Expression VisitMember(MemberExpression node) } } - public string formatSql(object obj, Type mapType, ColumnInfo mapColumn, List dbParams) + public string formatSql(object obj, Type mapType, ColumnInfo mapColumn, List dbParams, ExpressionStyle? style = null) { //参数化设置,日后优化 if (_common.CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) @@ -2859,7 +2865,7 @@ public string formatSql(object obj, Type mapType, ColumnInfo mapColumn, List _dicAddslashesReplaceIsNull = new ConcurrentDictionary(); - protected string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn) + protected virtual string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style = null) { var sb = new StringBuilder(); var ie = param as IEnumerable; diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs index d7b777213..bb8f9a232 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs @@ -8,7 +8,6 @@ using System.Data.Common; using System.Linq; using System.Threading; - namespace FreeSql.ClickHouse { class ClickHouseAdo : FreeSql.Internal.CommonProvider.AdoProvider @@ -41,7 +40,7 @@ public ClickHouseAdo(CommonUtils util, string masterConnectionString, string[] s SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs index fedc43df5..43d917794 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdo/CustomAdo.cs @@ -28,7 +28,7 @@ public CustomAdo(CommonUtils util, string masterConnectionString, string[] slave } CustomAdapter Adapter => (_util == null ? FreeSqlCustomAdapterGlobalExtensions.DefaultAdapter : _util._orm.GetCustomAdapter()); - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs index ae6843612..b03e9e8cf 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs @@ -6,7 +6,6 @@ using System.Data.Common; using System.Text; using System.Threading; - namespace FreeSql.Custom.MySql { public class CustomMySqlAdo : FreeSql.Internal.CommonProvider.AdoProvider @@ -26,7 +25,7 @@ public CustomMySqlAdo(CommonUtils util, string masterConnectionString, string[] } throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs index 88f66c3cb..b075df55a 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs @@ -38,7 +38,7 @@ public static string GetUserId(string connectionString) return userIdMatch.Groups[2].Value.Trim().ToUpper(); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs index a9977844a..b05e82277 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs @@ -28,7 +28,7 @@ public CustomPostgreSQLAdo(CommonUtils util, string masterConnectionString, stri throw new Exception(CoreErrorStrings.S_CustomAdapter_OnlySuppport_UseConnectionFactory); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs index 110d18dc7..fe882362e 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs @@ -29,7 +29,7 @@ public CustomSqlServerAdo(CommonUtils util, string masterConnectionString, strin } string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" }; - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index cbc4e5057..500739c01 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -40,7 +40,7 @@ public DamengAdo(CommonUtils util, string masterConnectionString, string[] slave SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, Internal.Model.ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, Internal.Model.ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs index c3fa1a4ff..52b562c83 100644 --- a/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs +++ b/Providers/FreeSql.Provider.Duckdb/DuckdbAdo/DuckdbAdo.cs @@ -44,7 +44,7 @@ public DuckdbAdo(CommonUtils util, string masterConnectionString, string[] slave SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index 8e0f68be8..c1e83629b 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -65,7 +65,7 @@ public string ServerVersion } string _serverVersion; - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs index 737861c86..2aff31025 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs @@ -43,7 +43,7 @@ public GBaseAdo(CommonUtils util, string masterConnectionString, string[] slaveC }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index 1091eea80..346794a06 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -43,7 +43,7 @@ public KingbaseESAdo(CommonUtils util, string masterConnectionString, string[] s SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray)) diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index deff747a6..9647f8aa0 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -41,7 +41,7 @@ public MsAccessAdo(CommonUtils util, string masterConnectionString, string[] sla }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 831f74b5d..96c559992 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -45,7 +45,7 @@ public MySqlAdo(CommonUtils util, string masterConnectionString, string[] slaveC SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index 1ee450783..ce4468843 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -43,7 +43,7 @@ public OdbcAdo(CommonUtils util, string masterConnectionString, string[] slaveCo } OdbcAdapter Adapter => (_util == null ? FreeSqlOdbcGlobalExtensions.DefaultOdbcAdapter : _util._orm.GetOdbcAdapter()); - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 618f3008c..41b9a7529 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -42,7 +42,7 @@ public OdbcMySqlAdo(CommonUtils util, string masterConnectionString, string[] sl SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index e5ec0a496..edcb4e086 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -41,7 +41,7 @@ public OdbcOracleAdo(CommonUtils util, string masterConnectionString, string[] s SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 859320a9b..6f8b36f60 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -43,7 +43,7 @@ public OdbcPostgreSQLAdo(CommonUtils util, string masterConnectionString, string }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index 931e6377b..65bb1fb82 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -43,7 +43,7 @@ public OdbcSqlServerAdo(CommonUtils util, string masterConnectionString, string[ } string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" }; - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index ec855a8ee..9c155cb79 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -41,7 +41,7 @@ public OracleAdo(CommonUtils util, string masterConnectionString, string[] slave SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index feb748ce6..d335f7c66 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -8,10 +8,12 @@ using System.Collections; using System.Collections.Generic; using System.Data.Common; +using System.Globalization; using System.Linq; +using System.Linq.Expressions; using System.Text; using System.Threading; - +using static FreeSql.Internal.CommonExpression; namespace FreeSql.PostgreSQL { class PostgreSQLAdo : FreeSql.Internal.CommonProvider.AdoProvider @@ -19,7 +21,7 @@ class PostgreSQLAdo : FreeSql.Internal.CommonProvider.AdoProvider public PostgreSQLAdo() : base(DataType.PostgreSQL, null, null) { } public PostgreSQLAdo(CommonUtils util, string masterConnectionString, string[] slaveConnectionStrings, Func connectionFactory) : base(DataType.PostgreSQL, masterConnectionString, slaveConnectionStrings) { - base._util = util; + base._util = util; if (connectionFactory != null) { var pool = new FreeSql.Internal.CommonProvider.DbConnectionPool(DataType.PostgreSQL, connectionFactory); @@ -44,7 +46,7 @@ public PostgreSQLAdo(CommonUtils util, string masterConnectionString, string[] s }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray)) @@ -110,11 +112,38 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return pghstore.Append("'::hstore"); } else if (param is IEnumerable) - return AddslashesIEnumerable(param, mapType, mapColumn); + return AddslashesIEnumerable(param, mapType, mapColumn, style); return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } + protected override string AddslashesIEnumerable(object param, Type mapType, ColumnInfo mapColumn, ExpressionStyle? style = null) + { + var sb = new StringBuilder(); + var ie = param as IEnumerable; + var idx = 0; + foreach (var z in ie) + { + sb.Append(","); + if (++idx > 500) + { + sb.Append(" \r\n \r\n"); //500元素分割, 3空格\r\n4空格 + idx = 1; + } + var obj = AddslashesProcessParam(z, mapType, mapColumn, style); + if (style == ExpressionStyle.Set && obj is string) + { + obj = $"{obj}".Trim('\''); + } + sb.Append(string.Format(CultureInfo.InvariantCulture, "{0}", obj)); + } + + if (style == ExpressionStyle.Set) + return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "'{").Append("}'").ToString(); + else + return sb.Length == 0 ? "(NULL)" : sb.Remove(0, 1).Insert(0, "(").Append(")").ToString(); + } + public override DbCommand CreateCommand() { return new NpgsqlCommand(); diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs index a9dd24252..8f15a136f 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs @@ -44,7 +44,7 @@ public QuestDbAdo(CommonUtils util, string masterConnectionString, string[] slav }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray)) diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index 55fbd7b5b..f048f0408 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -41,7 +41,7 @@ public ShenTongAdo(CommonUtils util, string masterConnectionString, string[] sla }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index 40353e17c..080ef70e6 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -48,7 +48,7 @@ public SqlServerAdo(CommonUtils util, string masterConnectionString, string[] sl static DateTime dt1970 = new DateTime(1970, 1, 1); static string[] ncharDbTypes = new[] { "NVARCHAR", "NCHAR", "NTEXT" }; - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index 1228901bd..d996c7fd4 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -46,7 +46,7 @@ public SqliteAdo(CommonUtils util, string masterConnectionString, string[] slave SlavePools.Add(slavePool); }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) diff --git a/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineAdo.cs b/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineAdo.cs index 1dcf404b9..4dda3b64f 100644 --- a/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineAdo.cs +++ b/Providers/FreeSql.Provider.TDengine/TDengineAdo/TDengineAdo.cs @@ -48,7 +48,7 @@ public TDengineAdo(CommonUtils util, string masterConnectionString, string[] sla }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs index d99fe0b57..2fc487bd5 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs @@ -11,7 +11,6 @@ using System.Text; using System.Threading; using XuguClient; - namespace FreeSql.Xugu { class XuguAdo : FreeSql.Internal.CommonProvider.AdoProvider @@ -42,7 +41,7 @@ public XuguAdo(CommonUtils util, string masterConnectionString, string[] slaveCo }); } - public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn, CommonExpression.ExpressionStyle? style) { if (param == null) return "NULL"; if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray))