diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 35984858..aa67b813 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -134,7 +134,7 @@ namespace base_entity { #region 初始化 IFreeSql var fsql = new FreeSql.FreeSqlBuilder() - //.UseAutoSyncStructure(true) + .UseAutoSyncStructure(true) .UseNoneCommandParameter(true) .UseConnectionString(FreeSql.DataType.Sqlite, "data source=test1.db;max pool size=5") @@ -144,10 +144,10 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2") - //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3") + .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") - .UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") - .UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) + //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower) //.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) @@ -172,75 +172,75 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion - fsql.Aop.ParseExpression += (_, e) => - { - //解析 POCO Jsonb a.Customer.Name - if (e.Expression is MemberExpression memExp) - { - var parentMemExps = new Stack(); - parentMemExps.Push(memExp); - while (true) - { - switch (memExp.Expression.NodeType) - { - case ExpressionType.MemberAccess: - memExp = memExp.Expression as MemberExpression; - if (memExp == null) return; - parentMemExps.Push(memExp); - break; - case ExpressionType.Parameter: - var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type); - if (tb == null) return; - if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return; - if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return; - var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First(); - var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName])); - result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name); - while (parentMemExps.Any()) - { - memExp = parentMemExps.Pop(); - result = $"{result}->>'{memExp.Member.Name}'"; - } - e.Result = result; - return; - } - } - } - }; +// fsql.Aop.ParseExpression += (_, e) => +// { +// //解析 POCO Jsonb a.Customer.Name +// if (e.Expression is MemberExpression memExp) +// { +// var parentMemExps = new Stack(); +// parentMemExps.Push(memExp); +// while (true) +// { +// switch (memExp.Expression.NodeType) +// { +// case ExpressionType.MemberAccess: +// memExp = memExp.Expression as MemberExpression; +// if (memExp == null) return; +// parentMemExps.Push(memExp); +// break; +// case ExpressionType.Parameter: +// var tb = fsql.CodeFirst.GetTableByEntity(memExp.Expression.Type); +// if (tb == null) return; +// if (tb.ColumnsByCs.TryGetValue(parentMemExps.Pop().Member.Name, out var trycol) == false) return; +// if (new[] { typeof(JToken), typeof(JObject), typeof(JArray) }.Contains(trycol.Attribute.MapType.NullableTypeOrThis()) == false) return; +// var tmpcol = tb.ColumnsByPosition.OrderBy(a => a.Attribute.Name.Length).First(); +// var result = e.FreeParse(Expression.MakeMemberAccess(memExp.Expression, tb.Properties[tmpcol.CsName])); +// result = result.Replace(tmpcol.Attribute.Name, trycol.Attribute.Name); +// while (parentMemExps.Any()) +// { +// memExp = parentMemExps.Pop(); +// result = $"{result}->>'{memExp.Member.Name}'"; +// } +// e.Result = result; +// return; +// } +// } +// } +// }; - var methodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string), typeof(Type) }); - var methodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod("SerializeObject", new[] { typeof(object), typeof(JsonSerializerSettings) }); - var jsonConvertSettings = JsonConvert.DefaultSettings?.Invoke() ?? new JsonSerializerSettings(); - FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple[typeof(Customer)] = true; - FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionObjectToStringIfThenElse.Add((LabelTarget returnTarget, Expression valueExp, Expression elseExp, Type type) => - { - return Expression.IfThenElse( - Expression.TypeIs(valueExp, typeof(Customer)), - Expression.Return(returnTarget, Expression.Call(methodJsonConvertSerializeObject, Expression.Convert(valueExp, typeof(object)), Expression.Constant(jsonConvertSettings)), typeof(object)), - elseExp); - }); - FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionSwitchTypeFullName.Add((LabelTarget returnTarget, Expression valueExp, Type type) => - { - if (type == typeof(Customer)) return Expression.Return(returnTarget, Expression.TypeAs(Expression.Call(methodJsonConvertDeserializeObject, Expression.Convert(valueExp, typeof(string)), Expression.Constant(type)), type)); - return null; - }); +// var methodJsonConvertDeserializeObject = typeof(JsonConvert).GetMethod("DeserializeObject", new[] { typeof(string), typeof(Type) }); +// var methodJsonConvertSerializeObject = typeof(JsonConvert).GetMethod("SerializeObject", new[] { typeof(object), typeof(JsonSerializerSettings) }); +// var jsonConvertSettings = JsonConvert.DefaultSettings?.Invoke() ?? new JsonSerializerSettings(); +// FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple[typeof(Customer)] = true; +// FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionObjectToStringIfThenElse.Add((LabelTarget returnTarget, Expression valueExp, Expression elseExp, Type type) => +// { +// return Expression.IfThenElse( +// Expression.TypeIs(valueExp, typeof(Customer)), +// Expression.Return(returnTarget, Expression.Call(methodJsonConvertSerializeObject, Expression.Convert(valueExp, typeof(object)), Expression.Constant(jsonConvertSettings)), typeof(object)), +// elseExp); +// }); +// FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionSwitchTypeFullName.Add((LabelTarget returnTarget, Expression valueExp, Type type) => +// { +// if (type == typeof(Customer)) return Expression.Return(returnTarget, Expression.TypeAs(Expression.Call(methodJsonConvertDeserializeObject, Expression.Convert(valueExp, typeof(string)), Expression.Constant(type)), type)); +// return null; +// }); - var seid = fsql.Insert(new SomeEntity - { - Customer = JsonConvert.DeserializeObject(@"{ - ""Age"": 25, - ""Name"": ""Joe"", - ""Orders"": [ - { ""OrderPrice"": 9, ""ShippingAddress"": ""Some address 1"" }, - { ""OrderPrice"": 23, ""ShippingAddress"": ""Some address 2"" } - ] -}") - }).ExecuteIdentity(); - var selist = fsql.Select().ToList(); +// var seid = fsql.Insert(new SomeEntity +// { +// Customer = JsonConvert.DeserializeObject(@"{ +// ""Age"": 25, +// ""Name"": ""Joe"", +// ""Orders"": [ +// { ""OrderPrice"": 9, ""ShippingAddress"": ""Some address 1"" }, +// { ""OrderPrice"": 23, ""ShippingAddress"": ""Some address 2"" } +// ] +//}") +// }).ExecuteIdentity(); +// var selist = fsql.Select().ToList(); - var joes = fsql.Select() - .Where(e => e.Customer.Name == "Joe") - .ToSql(); +// var joes = fsql.Select() +// .Where(e => e.Customer.Name == "Joe") +// .ToSql(); var testitems = new[] { @@ -293,6 +293,18 @@ namespace base_entity var sqlatd801 = sqlatd8.ToSql(); var sqlatd802 = sqlatd8.ExecuteAffrows(); + var sqlatd12 = fsql.InsertOrUpdate().SetSource(testitems[0]); + var sqlatd1201 = sqlatd12.ToSql(); + var sqlatd1202 = sqlatd12.ExecuteAffrows(); + + var sqlatd22 = fsql.InsertOrUpdate().SetSource(testitems[5]); + var sqlatd2201 = sqlatd22.ToSql(); + var sqlatd2202 = sqlatd22.ExecuteAffrows(); + + var sqlatd32 = fsql.InsertOrUpdate().SetSource(testitems); + var sqlatd3201 = sqlatd32.ToSql(); + var sqlatd3202 = sqlatd32.ExecuteAffrows(); + var sqls1 = fsql.Select(); var sqls101 = sqls1.ToSql(); var sqls102 = sqls1.ToList(); diff --git a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs index 0c67b569..d9e612fa 100644 --- a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs @@ -124,13 +124,25 @@ namespace FreeSql.Internal.CommonProvider protected string TableRuleInvoke() { - if (_tableRule == null) return _table.DbName; - var newname = _tableRule(_table.DbName); - if (newname == _table.DbName) return _table.DbName; - if (string.IsNullOrEmpty(newname)) return _table.DbName; + var tbname = _table?.DbName ?? ""; + if (_tableRule == null && _table.AsTableImpl == null) return tbname; + string newname = null; + if (_table.AsTableImpl != null) + { + if (_source.Any()) + newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault())); + else if (_tableRule == null) + newname = _table.AsTableImpl.GetTableNameByColumnValue(DateTime.Now); + else + newname = _tableRule(_table.DbName); + } + else + newname = _tableRule(_table.DbName); + if (newname == tbname) return tbname; + if (string.IsNullOrEmpty(newname)) return tbname; if (_orm.CodeFirst.IsSyncStructureToLower) newname = newname.ToLower(); if (_orm.CodeFirst.IsSyncStructureToUpper) newname = newname.ToUpper(); - if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(_table.Type, newname); + if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(_table?.Type, newname); return newname; } public IInsertOrUpdate AsTable(Func tableRule) @@ -204,20 +216,35 @@ namespace FreeSql.Internal.CommonProvider /// /// /// - public NativeTuple, List> SplitSourceByIdentityValueIsNull(List source) + public NativeTuple[], List[]> SplitSourceByIdentityValueIsNull(List source) { - if (_SplitSourceByIdentityValueIsNullFlag == 1) return NativeTuple.Create(source, new List()); - if (_SplitSourceByIdentityValueIsNullFlag == 2) return NativeTuple.Create(new List(), source); - if (IdentityColumn == null) return NativeTuple.Create(source, new List()); - var ret = NativeTuple.Create(new List(), new List()); + if (_SplitSourceByIdentityValueIsNullFlag == 1) return NativeTuple.Create(new[] { source }, new List[0]); + if (_SplitSourceByIdentityValueIsNullFlag == 2) return NativeTuple.Create(new List[0], new[] { source }); + if (IdentityColumn == null) return NativeTuple.Create(LocalSplitSourceByAsTable(source), new List[0]); + var item1 = new List(); + var item2 = new List(); foreach (var item in source) { if (object.Equals(_orm.GetEntityValueWithPropertyName(_table.Type, item, IdentityColumn.CsName), IdentityColumn.CsType.CreateInstanceGetDefaultValue())) - ret.Item2.Add(item); //自增无值的,记录为直接插入 + item2.Add(item); //自增无值的,记录为直接插入 else - ret.Item1.Add(item); + item1.Add(item); + } + return NativeTuple.Create(LocalSplitSourceByAsTable(item1), LocalSplitSourceByAsTable(item2)); + + List[] LocalSplitSourceByAsTable(List loc1) + { + if (_table.AsTableImpl != null) + { + var atarr = loc1.Select(a => new + { + item = a, + splitKey = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(a), true) + }).GroupBy(a => a.splitKey, a => a.item).Select(a => a.ToList()).ToArray(); + return atarr; + } + return new[] { loc1 }; } - return ret; } public abstract string ToSql(); @@ -235,12 +262,18 @@ namespace FreeSql.Internal.CommonProvider if (_transaction != null || _orm.Ado.MasterPool == null) { - _source = ss.Item1; _SplitSourceByIdentityValueIsNullFlag = 1; - affrows += this.RawExecuteAffrows(); - _source = ss.Item2; + foreach (var tmpsource in ss.Item1) + { + _source = tmpsource; + affrows += this.RawExecuteAffrows(); + } _SplitSourceByIdentityValueIsNullFlag = 2; - affrows += this.RawExecuteAffrows(); + foreach (var tmpsource in ss.Item2) + { + _source = tmpsource; + affrows += this.RawExecuteAffrows(); + } } else { @@ -251,12 +284,18 @@ namespace FreeSql.Internal.CommonProvider _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); try { - _source = ss.Item1; _SplitSourceByIdentityValueIsNullFlag = 1; - affrows += this.RawExecuteAffrows(); - _source = ss.Item2; + foreach (var tmpsource in ss.Item1) + { + _source = tmpsource; + affrows += this.RawExecuteAffrows(); + } _SplitSourceByIdentityValueIsNullFlag = 2; - affrows += this.RawExecuteAffrows(); + foreach (var tmpsource in ss.Item2) + { + _source = tmpsource; + affrows += this.RawExecuteAffrows(); + } _transaction.Commit(); _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); } @@ -341,12 +380,18 @@ namespace FreeSql.Internal.CommonProvider if (_transaction != null || _orm.Ado.MasterPool == null) { - _source = ss.Item1; _SplitSourceByIdentityValueIsNullFlag = 1; - affrows += await this.RawExecuteAffrowsAsync(cancellationToken); - _source = ss.Item2; + foreach (var tmpsource in ss.Item1) + { + _source = tmpsource; + affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + } _SplitSourceByIdentityValueIsNullFlag = 2; - affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + foreach (var tmpsource in ss.Item2) + { + _source = tmpsource; + affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + } } else { @@ -357,12 +402,18 @@ namespace FreeSql.Internal.CommonProvider _orm.Aop.TraceBeforeHandler?.Invoke(this, transBefore); try { - _source = ss.Item1; _SplitSourceByIdentityValueIsNullFlag = 1; - affrows += await this.RawExecuteAffrowsAsync(cancellationToken); - _source = ss.Item2; + foreach (var tmpsource in ss.Item1) + { + _source = tmpsource; + affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + } _SplitSourceByIdentityValueIsNullFlag = 2; - affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + foreach (var tmpsource in ss.Item2) + { + _source = tmpsource; + affrows += await this.RawExecuteAffrowsAsync(cancellationToken); + } _transaction.Commit(); _orm.Aop.TraceAfterHandler?.Invoke(this, new Aop.TraceAfterEventArgs(transBefore, "提交", null)); } diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs index 8eb4d26a..345da6bc 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Dameng.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs b/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs index 10b07f3c..82d36273 100644 --- a/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Firebird/Curd/FirebirdInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Firebird.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs index 170653d9..afc8a674 100644 --- a/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.GBase/Curd/GBaseInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.GBase.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESInsertOrUpdate.cs b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESInsertOrUpdate.cs index a529cf51..a82fbe73 100644 --- a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESInsertOrUpdate.cs @@ -20,8 +20,8 @@ namespace FreeSql.KingbaseES var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs index 85769c95..96989800 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.MySql.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsertOrUpdate.cs index 0f363b68..a6422179 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Odbc.Dameng var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESInsertOrUpdate.cs index 34b6b4ea..a03500bd 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Odbc.KingbaseES var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs index 6feac813..4b278196 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs @@ -21,8 +21,8 @@ namespace FreeSql.Odbc.MySql var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs index 750ec905..70666350 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Odbc.Oracle var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsertOrUpdate.cs index e6bdc6a4..38ad983c 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsertOrUpdate.cs @@ -20,8 +20,8 @@ namespace FreeSql.Odbc.PostgreSQL var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs index 064eccb4..8f090733 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Odbc.SqlServer var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs index 00c611ea..f1b09eaa 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.Oracle.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsertOrUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsertOrUpdate.cs index 4096e713..5ca0ff92 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsertOrUpdate.cs @@ -20,8 +20,8 @@ namespace FreeSql.PostgreSQL.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs index e254523f..c4ddcd7f 100644 --- a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.ShenTong.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs index 159c650b..b999844c 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsertOrUpdate.cs @@ -22,8 +22,8 @@ namespace FreeSql.SqlServer.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getMergeSql(ds.Item1); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1]; diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs index bb2836a2..34d9ad1f 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs @@ -21,8 +21,8 @@ namespace FreeSql.Sqlite.Curd var sqls = new string[2]; var dbParams = new List(); var ds = SplitSourceByIdentityValueIsNull(_source); - if (ds.Item1.Any()) sqls[0] = getInsertSql(ds.Item1, false); - if (ds.Item2.Any()) sqls[1] = getInsertSql(ds.Item2, true); + if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false))); + if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true))); _params = dbParams.ToArray(); if (ds.Item2.Any() == false) return sqls[0]; if (ds.Item1.Any() == false) return sqls[1];