diff --git a/Directory.Build.props b/Directory.Build.props
index 1325aa85..1fb4e591 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -9,7 +9,7 @@
- 3.2.606
+ 3.2.650-preview20220518
diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs
index fd4c629a..1dad165e 100644
--- a/Examples/base_entity/Program.cs
+++ b/Examples/base_entity/Program.cs
@@ -14,10 +14,12 @@ using System.Data.SQLite;
using System.Diagnostics;
using System.Linq;
using System.Linq.Expressions;
+using System.Numerics;
using System.Reflection;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
+using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
@@ -131,7 +133,7 @@ namespace base_entity
public string ShippingAddress { get; set; }
}
- [Table(Name = "tb_TopicMapTypeToListDto")]
+ [Table(Name = "tb_tmttld"), OraclePrimaryKeyName("TMTTLD_PK01")]
class TopicMapTypeToListDto
{
[Column(IsIdentity = true, IsPrimary = true)]
@@ -158,8 +160,11 @@ namespace base_entity
public string Title { get; set; }
public DateTime CreateTime { get; set; }
}
-
-
+ class tuint256tb_01
+ {
+ public Guid Id { get; set; }
+ public BigInteger Number { get; set; }
+ }
class CommandTimeoutCascade : IDisposable
{
public static AsyncLocal _asyncLocalTimeout = new AsyncLocal();
@@ -178,12 +183,15 @@ namespace base_entity
//.UseSlaveWeight(10, 1, 1, 5)
+ //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
+
+
//.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;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)
@@ -208,12 +216,62 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
+ if (fsql.Ado.DataType == DataType.PostgreSQL)
+ {
+ fsql.CodeFirst.IsNoneCommandParameter = false;
+ fsql.Aop.AuditDataReader += (_, e) =>
+ {
+ var dbtype = e.DataReader.GetDataTypeName(e.Index);
+ var m = Regex.Match(dbtype, @"numeric\((\d+)\)", RegexOptions.IgnoreCase);
+ if (m.Success && int.Parse(m.Groups[1].Value) > 19)
+ e.Value = e.DataReader.GetFieldValue(e.Index); //否则会报溢出错误
+ };
+
+ var num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
+ fsql.Delete().Where("1=1").ExecuteAffrows();
+ if (1 != fsql.Insert(new tuint256tb_01()).ExecuteAffrows()) throw new Exception("not equal");
+ var find = fsql.Select().ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if ("0" != find[0].Number.ToString()) throw new Exception("not equal");
+ var item = new tuint256tb_01 { Number = num };
+ if (1 != fsql.Insert(item).ExecuteAffrows()) throw new Exception("not equal");
+ find = fsql.Select().Where(a => a.Id == item.Id).ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if (item.Number != find[0].Number) throw new Exception("not equal");
+ num = num - 1;
+ item.Number = num;
+ if (1 != fsql.Update().SetSource(item).ExecuteAffrows()) throw new Exception("not equal");
+ find = fsql.Select().Where(a => a.Id == item.Id).ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if ("57896044618658097711785492504343953926634992332820282019728792003956564819967" != find[0].Number.ToString()) throw new Exception("not equal");
+
+ num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
+ fsql.Delete().Where("1=1").ExecuteAffrows();
+ if (1 != fsql.Insert(new tuint256tb_01()).NoneParameter().ExecuteAffrows()) throw new Exception("not equal");
+ find = fsql.Select().ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if ("0" != find[0].Number.ToString()) throw new Exception("not equal");
+ item = new tuint256tb_01 { Number = num };
+ if (1 != fsql.Insert(item).NoneParameter().ExecuteAffrows()) throw new Exception("not equal");
+ find = fsql.Select().Where(a => a.Id == item.Id).ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if (item.Number != find[0].Number) throw new Exception("not equal");
+ num = num - 1;
+ item.Number = num;
+ if (1 != fsql.Update().NoneParameter().SetSource(item).ExecuteAffrows()) throw new Exception("not equal");
+ find = fsql.Select().Where(a => a.Id == item.Id).ToList();
+ if (find.Count != 1) throw new Exception("not single");
+ if ("57896044618658097711785492504343953926634992332820282019728792003956564819967" != find[0].Number.ToString()) throw new Exception("not equal");
+ }
+
+
+
fsql.Aop.CommandBefore += (_, e) =>
{
if (CommandTimeoutCascade._asyncLocalTimeout.Value > 0)
e.Command.CommandTimeout = CommandTimeoutCascade._asyncLocalTimeout.Value;
};
-
+
using (new CommandTimeoutCascade(1000))
{
fsql.Select().ToList();
@@ -222,6 +280,16 @@ namespace base_entity
}
+ var sql1 = fsql.Select()
+ .RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId")
+ .Where((a, b) => a.IsDeleted == false)
+ .ToSql((a, b) => new
+ {
+ user = a, group = b
+ });
+ sql1 = sql1.Replace("INNER JOIN ", "FULL JOIN ");
+
+
fsql.UseJsonMap();
@@ -384,6 +452,14 @@ namespace base_entity
var sqlat = sqlatb.ToSql();
var sqlatr = sqlatb.ExecuteAffrows();
+ var sqlatc1 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13"));
+ var sqlatca1 = sqlatc1.ToSql();
+ var sqlatcr1 = sqlatc1.ExecuteAffrows();
+
+ var sqlatc2 = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13"));
+ var sqlatca2 = sqlatc2.ToSql();
+ var sqlatcr2 = sqlatc2.ExecuteAffrows();
+
var sqlatc = fsql.Delete().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
var sqlatca = sqlatc.ToSql();
var sqlatcr = sqlatc.ExecuteAffrows();
@@ -452,6 +528,10 @@ namespace base_entity
var sqls501 = sqls5.ToSql();
var sqls502 = sqls5.ToList();
+ var sqls6 = fsql.Select().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime);
+ var sqls601 = sqls6.ToSql();
+ var sqls602 = sqls6.ToList();
+
fsql.Aop.AuditValue += new EventHandler((_, e) =>
{
diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj
index aab00eea..6f286bbd 100644
--- a/Examples/base_entity/base_entity.csproj
+++ b/Examples/base_entity/base_entity.csproj
@@ -13,6 +13,7 @@
+
@@ -21,6 +22,7 @@
+
diff --git a/Examples/orm_vs/Program.cs b/Examples/orm_vs/Program.cs
index 262b9816..f1259d36 100644
--- a/Examples/orm_vs/Program.cs
+++ b/Examples/orm_vs/Program.cs
@@ -28,17 +28,25 @@ namespace orm_vs
static SqlSugarClient sugar
{
- get => new SqlSugarClient(new ConnectionConfig()
+ get
{
- //ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
- //DbType = DbType.SqlServer,
- ConnectionString = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=20;Max Pool Size=20",
- DbType = DbType.MySql,
- //ConnectionString = "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=21",
- //DbType = DbType.PostgreSQL,
- IsAutoCloseConnection = true,
- InitKeyType = InitKeyType.Attribute
- });
+ var db = new SqlSugarClient(new ConnectionConfig()
+ {
+ //ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
+ //DbType = DbType.SqlServer,
+ ConnectionString = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Min Pool Size=20;Max Pool Size=20",
+ DbType = DbType.MySql,
+ //ConnectionString = "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=21",
+ //DbType = DbType.PostgreSQL,
+ IsAutoCloseConnection = true,
+ InitKeyType = InitKeyType.Attribute
+ });
+ db.Aop.OnLogExecuting = (sql, pars) =>
+ {
+ Console.WriteLine(sql);//输出sql,查看执行sql
+ };
+ return db;
+ }
}
class SongContext : DbContext
@@ -83,6 +91,12 @@ namespace orm_vs
var sql222 = fsql.Select().Where(a => DateTime.Now.Subtract(a.create_time.Value).TotalHours > 0).ToSql();
+ var conModels = new List();
+ conModels.Add(new ConditionalModel { FieldName = "`id` = 1 or 1=1; delete from song_tag; -- ", ConditionalType = ConditionalType.Equal, FieldValue = "1" });
+
+ var student = sugar.Queryable().Where(conModels).ToList();
+
+
#region ET test
////var t31 = fsql.Select().ToList();
//fsql.Select().First();
diff --git a/Examples/orm_vs/Properties/launchSettings.json b/Examples/orm_vs/Properties/launchSettings.json
deleted file mode 100644
index 33504c94..00000000
--- a/Examples/orm_vs/Properties/launchSettings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "profiles": {
- "WSL": {
- "commandName": "WSL2",
- "distributionName": ""
- }
- }
-}
\ No newline at end of file
diff --git a/Examples/orm_vs/orm_vs.csproj b/Examples/orm_vs/orm_vs.csproj
index a7a240e4..08ab5687 100644
--- a/Examples/orm_vs/orm_vs.csproj
+++ b/Examples/orm_vs/orm_vs.csproj
@@ -10,7 +10,7 @@
-
+
@@ -20,10 +20,4 @@
-
-
- ..\..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore\2.2.0\lib\netstandard2.0\Microsoft.EntityFrameworkCore.dll
-
-
-
diff --git a/Extensions/FreeSql.Generator/ConsoleApp.cs b/Extensions/FreeSql.Generator/ConsoleApp.cs
index aebdef8b..bbeed9a0 100644
--- a/Extensions/FreeSql.Generator/ConsoleApp.cs
+++ b/Extensions/FreeSql.Generator/ConsoleApp.cs
@@ -90,7 +90,7 @@ new Colorful.Formatter("v" + string.Join(".", typeof(ConsoleApp).Assembly.GetNam
-Razor 1 * 选择模板:实体类+特性
-Razor 2 * 选择模板:实体类+特性+导航属性
- -Razor ""d:\diy.cshtml"" * 自定义模板文件
+ -Razor ""d:\diy.cshtml"" * 自定义模板文件,如乱码请修改为UTF8(不带BOM)编码格式
-NameOptions * 4个布尔值对应:
首字母大写
@@ -152,7 +152,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
{
case "1": ArgsRazor = RazorContentManager.实体类_特性_cshtml; break;
case "2": ArgsRazor = RazorContentManager.实体类_特性_导航属性_cshtml; break;
- default: ArgsRazor = File.ReadAllText(args[a + 1]); break;
+ default: ArgsRazor = File.ReadAllText(args[a + 1], Encoding.UTF8); break;
}
a++;
break;
diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs
index d822afc3..13533430 100644
--- a/FreeSql.DbContext/DbSet/DbSetAsync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs
@@ -328,7 +328,8 @@ namespace FreeSql
}
break;
case Internal.Model.TableRefType.OneToMany:
- var addlist = isAdd ? new List
-
+
diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
index 5c803c21..5f61046e 100644
--- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
+++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseConnectionPool.cs
@@ -133,7 +133,7 @@ namespace FreeSql.GBase
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -163,7 +163,7 @@ namespace FreeSql.GBase
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESSelect.cs b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESSelect.cs
index 927a26cd..a54248f2 100644
--- a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESSelect.cs
+++ b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.KingbaseES
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
index f5dec5c9..048119c9 100644
--- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
+++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESConnectionPool.cs
@@ -155,7 +155,7 @@ namespace FreeSql.KingbaseES
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -185,7 +185,7 @@ namespace FreeSql.KingbaseES
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
index 9abd47c1..bea29f94 100644
--- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
+++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
@@ -78,9 +78,11 @@ namespace FreeSql.MsAccess.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
if (ioinCounter++ > 0) sb.Insert(fromIndex, "(").Append(") ");
sb.Append(" \r\nLEFT JOIN ");
diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
index 0c019330..7ccc7f1b 100644
--- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
+++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessConnectionPool.cs
@@ -138,7 +138,7 @@ namespace FreeSql.MsAccess
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -169,7 +169,7 @@ namespace FreeSql.MsAccess
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
index eb5177a0..8c2f0c0b 100644
--- a/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
+++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.MySql.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
index 7ff174ee..1a8f125d 100644
--- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
+++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj
@@ -25,7 +25,7 @@
-
+
diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
index f9a6b7a7..ecde7d58 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlConnectionPool.cs
@@ -138,7 +138,7 @@ namespace FreeSql.MySql
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -168,7 +168,7 @@ namespace FreeSql.MySql
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
index 88b9d25d..7066b98b 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
@@ -22,40 +22,40 @@ namespace FreeSql.Odbc.Dameng
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
var sb = new StringBuilder();
+ var sbunion = new StringBuilder();
+ var sbnav = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
- if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];
- var sbnav = new StringBuilder();
- sb.Append(_select);
- if (_distinct) sb.Append("DISTINCT ");
- sb.Append(field);
- if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
- sb.Append(" \r\nFROM ");
+ sbunion.Append(_select);
+ if (_distinct) sbunion.Append("DISTINCT ");
+ sbunion.Append(field);
+ if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
+ sbunion.Append(" \r\nFROM ");
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
for (var a = 0; a < tbsfrom.Length; a++)
{
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
if (tbsjoin.Length > 0)
{
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
for (var b = 1; b < tbsfrom.Length; b++)
{
- sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
+ sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
- if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
+ if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
else
{
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
- sb.Append(" ON ").Append(onSql);
+ sbunion.Append(" ON ").Append(onSql);
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
{
- if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
- else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
+ if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
+ else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
}
}
}
@@ -67,28 +67,30 @@ namespace FreeSql.Odbc.Dameng
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
}
- if (a < tbsfrom.Length - 1) sb.Append(", ");
+ if (a < tbsfrom.Length - 1) sbunion.Append(", ");
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
- sb.Append(" \r\nLEFT JOIN ");
+ sbunion.Append(" \r\nLEFT JOIN ");
break;
case SelectTableInfoType.InnerJoin:
- sb.Append(" \r\nINNER JOIN ");
+ sbunion.Append(" \r\nINNER JOIN ");
break;
case SelectTableInfoType.RightJoin:
- sb.Append(" \r\nRIGHT JOIN ");
+ sbunion.Append(" \r\nRIGHT JOIN ");
break;
}
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
- if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
+ if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
}
- if (_join.Length > 0) sb.Append(_join);
+ if (_join.Length > 0) sbunion.Append(_join);
sbnav.Append(_where);
if (!string.IsNullOrEmpty(_tables[0].Cascade))
@@ -97,31 +99,39 @@ namespace FreeSql.Odbc.Dameng
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
if (sbnav.Length > 0)
- sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
+ sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
if (string.IsNullOrEmpty(_groupby) == false)
{
- sb.Append(_groupby);
+ sbunion.Append(_groupby);
if (string.IsNullOrEmpty(_having) == false)
- sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
+ sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
}
- sb.Append(_orderby);
+ sbunion.Append(_orderby);
if (string.IsNullOrEmpty(_orderby))
{
if (_skip > 0)
- sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
}
else
{
- if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
- else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
- else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
+ if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
+ else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
}
+ if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
+ sb.Append(sbunion);
sbnav.Clear();
- if (tbUnionsGt0) sb.Append(") ftb");
+ sbunion.Clear();
}
- return sb.Append(_tosqlAppendContent).ToString();
+ var sql = sb.Append(_tosqlAppendContent).ToString();
+
+ var aliasGreater30 = 0;
+ foreach (var tb in _tables)
+ if (tb.Alias.Length > 30) sql = sql.Replace(tb.Alias, $"than30_{aliasGreater30++}");
+
+ return sql;
}
public OdbcDamengSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { }
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
index 76c2a573..d0570fed 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengConnectionPool.cs
@@ -155,7 +155,7 @@ namespace FreeSql.Odbc.Dameng
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -185,7 +185,7 @@ namespace FreeSql.Odbc.Dameng
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
index cb35af9b..292c933c 100644
--- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
@@ -74,9 +74,11 @@ namespace FreeSql.Odbc.Default
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
index 783b2db9..86094ee0 100644
--- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcConnectionPool.cs
@@ -139,7 +139,7 @@ namespace FreeSql.Odbc.Default
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -170,7 +170,7 @@ namespace FreeSql.Odbc.Default
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESSelect.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESSelect.cs
index dece7c0a..0a3afbb3 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.Odbc.KingbaseES
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
index 60010ae2..f9e989ff 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESConnectionPool.cs
@@ -155,7 +155,7 @@ namespace FreeSql.Odbc.KingbaseES
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -185,7 +185,7 @@ namespace FreeSql.Odbc.KingbaseES
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
index de181810..115dc0e6 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.Odbc.MySql
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
index df2e22c7..e1b4ce1b 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlConnectionPool.cs
@@ -133,7 +133,7 @@ namespace FreeSql.Odbc.MySql
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -163,7 +163,7 @@ namespace FreeSql.Odbc.MySql
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
index 04f69ca7..54dd773c 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
@@ -22,40 +22,40 @@ namespace FreeSql.Odbc.Oracle
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
var sb = new StringBuilder();
+ var sbunion = new StringBuilder();
+ var sbnav = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
- if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];
- var sbnav = new StringBuilder();
- sb.Append(_select);
- if (_distinct) sb.Append("DISTINCT ");
- sb.Append(field);
- if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
- sb.Append(" \r\nFROM ");
+ sbunion.Append(_select);
+ if (_distinct) sbunion.Append("DISTINCT ");
+ sbunion.Append(field);
+ if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
+ sbunion.Append(" \r\nFROM ");
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
for (var a = 0; a < tbsfrom.Length; a++)
{
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
if (tbsjoin.Length > 0)
{
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
for (var b = 1; b < tbsfrom.Length; b++)
{
- sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
+ sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
- if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
+ if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
else
{
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
- sb.Append(" ON ").Append(onSql);
+ sbunion.Append(" ON ").Append(onSql);
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
{
- if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
- else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
+ if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
+ else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
}
}
}
@@ -67,28 +67,30 @@ namespace FreeSql.Odbc.Oracle
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
}
- if (a < tbsfrom.Length - 1) sb.Append(", ");
+ if (a < tbsfrom.Length - 1) sbunion.Append(", ");
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
- sb.Append(" \r\nLEFT JOIN ");
+ sbunion.Append(" \r\nLEFT JOIN ");
break;
case SelectTableInfoType.InnerJoin:
- sb.Append(" \r\nINNER JOIN ");
+ sbunion.Append(" \r\nINNER JOIN ");
break;
case SelectTableInfoType.RightJoin:
- sb.Append(" \r\nRIGHT JOIN ");
+ sbunion.Append(" \r\nRIGHT JOIN ");
break;
}
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
- if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
+ if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
}
- if (_join.Length > 0) sb.Append(_join);
+ if (_join.Length > 0) sbunion.Append(_join);
sbnav.Append(_where);
if (!string.IsNullOrEmpty(_tables[0].Cascade))
@@ -97,29 +99,31 @@ namespace FreeSql.Odbc.Oracle
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
if (sbnav.Length > 0)
- sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
+ sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
if (string.IsNullOrEmpty(_groupby) == false)
{
- sb.Append(_groupby);
+ sbunion.Append(_groupby);
if (string.IsNullOrEmpty(_having) == false)
- sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
+ sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
}
- sb.Append(_orderby);
+ sbunion.Append(_orderby);
if (string.IsNullOrEmpty(_orderby))
{
if (_skip > 0)
- sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
}
else
{
- if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
- else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
- else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
+ if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
+ else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
}
+ if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
+ sb.Append(sbunion);
sbnav.Clear();
- if (tbUnionsGt0) sb.Append(") ftb");
+ sbunion.Clear();
}
var sql = sb.Append(_tosqlAppendContent).ToString();
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
index 0da4b66a..7505b033 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleConnectionPool.cs
@@ -155,7 +155,7 @@ namespace FreeSql.Odbc.Oracle
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -185,7 +185,7 @@ namespace FreeSql.Odbc.Oracle
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
index 79677e82..14abbee6 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.Odbc.PostgreSQL
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
index a6fb1096..638fe5b3 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLConnectionPool.cs
@@ -145,7 +145,7 @@ namespace FreeSql.Odbc.PostgreSQL
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -175,7 +175,7 @@ namespace FreeSql.Odbc.PostgreSQL
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
index 45c87130..eca1e5b7 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
@@ -90,9 +90,11 @@ namespace FreeSql.Odbc.SqlServer
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
@@ -195,9 +197,11 @@ namespace FreeSql.Odbc.SqlServer
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
index 70906e5a..745b924c 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerConnectionPool.cs
@@ -139,7 +139,7 @@ namespace FreeSql.Odbc.SqlServer
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -170,7 +170,7 @@ namespace FreeSql.Odbc.SqlServer
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
index 0a04eac5..636d961b 100644
--- a/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
+++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
@@ -22,40 +22,40 @@ namespace FreeSql.Oracle.Curd
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
var sb = new StringBuilder();
+ var sbunion = new StringBuilder();
+ var sbnav = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
- if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];
- var sbnav = new StringBuilder();
- sb.Append(_select);
- if (_distinct) sb.Append("DISTINCT ");
- sb.Append(field);
- if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
- sb.Append(" \r\nFROM ");
+ sbunion.Append(_select);
+ if (_distinct) sbunion.Append("DISTINCT ");
+ sbunion.Append(field);
+ if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
+ sbunion.Append(" \r\nFROM ");
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
for (var a = 0; a < tbsfrom.Length; a++)
{
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
if (tbsjoin.Length > 0)
{
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
for (var b = 1; b < tbsfrom.Length; b++)
{
- sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
+ sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
- if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
+ if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
else
{
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
- sb.Append(" ON ").Append(onSql);
+ sbunion.Append(" ON ").Append(onSql);
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
{
- if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
- else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
+ if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
+ else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
}
}
}
@@ -67,28 +67,30 @@ namespace FreeSql.Oracle.Curd
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
}
- if (a < tbsfrom.Length - 1) sb.Append(", ");
+ if (a < tbsfrom.Length - 1) sbunion.Append(", ");
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
- sb.Append(" \r\nLEFT JOIN ");
+ sbunion.Append(" \r\nLEFT JOIN ");
break;
case SelectTableInfoType.InnerJoin:
- sb.Append(" \r\nINNER JOIN ");
+ sbunion.Append(" \r\nINNER JOIN ");
break;
case SelectTableInfoType.RightJoin:
- sb.Append(" \r\nRIGHT JOIN ");
+ sbunion.Append(" \r\nRIGHT JOIN ");
break;
}
- sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
- if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
+ sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
+ if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
}
- if (_join.Length > 0) sb.Append(_join);
+ if (_join.Length > 0) sbunion.Append(_join);
sbnav.Append(_where);
if (!string.IsNullOrEmpty(_tables[0].Cascade))
@@ -97,29 +99,31 @@ namespace FreeSql.Oracle.Curd
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
if (sbnav.Length > 0)
- sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
+ sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
if (string.IsNullOrEmpty(_groupby) == false)
{
- sb.Append(_groupby);
+ sbunion.Append(_groupby);
if (string.IsNullOrEmpty(_having) == false)
- sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
+ sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
}
- sb.Append(_orderby);
+ sbunion.Append(_orderby);
if (string.IsNullOrEmpty(_orderby))
{
if (_skip > 0)
- sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
}
else
{
- if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
- else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
- else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
+ if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
+ else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
+ else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
}
+ if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
+ sb.Append(sbunion);
sbnav.Clear();
- if (tbUnionsGt0) sb.Append(") ftb");
+ sbunion.Clear();
}
var sql = sb.Append(_tosqlAppendContent).ToString();
diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
index 31683a01..2fc83fcd 100644
--- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
+++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net60;net50;net45;net40
+ netstandard2.0;netstandard2.1;net60;net50;net45;net40
true
FreeSql;ncc;YeXiangQin
FreeSql 数据库实现,基于 Oracle 11
@@ -28,11 +28,11 @@
-
+
-
+
diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
index 3af56509..68865e20 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleConnectionPool.cs
@@ -156,7 +156,7 @@ namespace FreeSql.Oracle
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -186,7 +186,7 @@ namespace FreeSql.Oracle
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
index 76df4935..aece7ca7 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.PostgreSQL.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
index cce2e648..2708ac47 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLConnectionPool.cs
@@ -146,7 +146,7 @@ namespace FreeSql.PostgreSQL
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -176,7 +176,7 @@ namespace FreeSql.PostgreSQL
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs
index 1d053470..da13e9de 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs
@@ -10,6 +10,7 @@ using System.Data;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
+using System.Numerics;
using System.Text;
using System.Text.RegularExpressions;
@@ -47,6 +48,7 @@ namespace FreeSql.PostgreSQL
{ typeof(bool).FullName, CsToDb.New(NpgsqlDbType.Boolean, "bool","bool NOT NULL", null, false, false) },{ typeof(bool?).FullName, CsToDb.New(NpgsqlDbType.Boolean, "bool","bool", null, true, null) },
{ typeof(Byte[]).FullName, CsToDb.New(NpgsqlDbType.Bytea, "bytea", "bytea", false, null, new byte[0]) },
{ typeof(BitArray).FullName, CsToDb.New(NpgsqlDbType.Varbit, "varbit", "varbit(64)", false, null, new BitArray(new byte[64])) },
+ { typeof(BigInteger).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(78,0) NOT NULL", false, false, 0) },{ typeof(BigInteger?).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(78,0)", false, true, null) },
{ typeof(NpgsqlPoint).FullName, CsToDb.New(NpgsqlDbType.Point, "point", "point NOT NULL", false, false, new NpgsqlPoint(0, 0)) },{ typeof(NpgsqlPoint?).FullName, CsToDb.New(NpgsqlDbType.Point, "point", "point", false, true, null) },
{ typeof(NpgsqlLine).FullName, CsToDb.New(NpgsqlDbType.Line, "line", "line NOT NULL", false, false, new NpgsqlLine(0, 0, 1)) },{ typeof(NpgsqlLine?).FullName, CsToDb.New(NpgsqlDbType.Line, "line", "line", false, true, null) },
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
index b6ef1fba..b6fa8c05 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
@@ -3,12 +3,10 @@ using FreeSql.Internal;
using Newtonsoft.Json.Linq;
using Npgsql.LegacyPostgis;
using NpgsqlTypes;
-using FreeSql.Internal.ObjectPool;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
-using System.Data.Common;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
index 3570378a..fe845f8b 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
@@ -12,6 +12,7 @@ using System.Data.Common;
using System.Linq.Expressions;
using System.Net;
using System.Net.NetworkInformation;
+using System.Numerics;
using System.Reflection;
using System.Threading;
@@ -23,6 +24,7 @@ namespace FreeSql.PostgreSQL
static PostgreSQLProvider()
{
+ Utils.dicExecuteArrayRowReadClassOrTuple[typeof(BigInteger)] = true;
Utils.dicExecuteArrayRowReadClassOrTuple[typeof(BitArray)] = true;
Utils.dicExecuteArrayRowReadClassOrTuple[typeof(NpgsqlPoint)] = true;
Utils.dicExecuteArrayRowReadClassOrTuple[typeof(NpgsqlLine)] = true;
@@ -121,6 +123,14 @@ namespace FreeSql.PostgreSQL
this.DbFirst = new PostgreSQLDbFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
this.CodeFirst = new PostgreSQLCodeFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
+
+ //this.Aop.AuditDataReader += (_, e) =>
+ //{
+ // var dbtype = e.DataReader.GetDataTypeName(e.Index);
+ // var m = Regex.Match(dbtype, @"numeric\((\d+)\)", RegexOptions.IgnoreCase);
+ // if (m.Success && int.Parse(m.Groups[1].Value) > 19)
+ // e.Value = e.DataReader.GetFieldValue(e.Index);
+ //};
}
~PostgreSQLProvider() => this.Dispose();
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs
index 89dd4343..2fb59508 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs
@@ -12,6 +12,7 @@ using System.Data.Common;
using System.Globalization;
using System.Linq;
using System.Net;
+using System.Numerics;
using System.Text;
namespace FreeSql.PostgreSQL
@@ -45,6 +46,7 @@ namespace FreeSql.PostgreSQL
{ typeof(byte).FullName, a => short.Parse(string.Concat(a)) }, { typeof(byte[]).FullName, a => getParamterArrayValue(typeof(short), a, 0) }, { typeof(byte?[]).FullName, a => getParamterArrayValue(typeof(short?), a, null) },
{ typeof(sbyte).FullName, a => short.Parse(string.Concat(a)) }, { typeof(sbyte[]).FullName, a => getParamterArrayValue(typeof(short), a, 0) }, { typeof(sbyte?[]).FullName, a => getParamterArrayValue(typeof(short?), a, null) },
{ typeof(char).FullName, a => string.Concat(a).Replace('\0', ' ').ToCharArray().FirstOrDefault() },
+ { typeof(BigInteger).FullName, a => BigInteger.Parse(string.Concat(a), System.Globalization.NumberStyles.Any) }, { typeof(BigInteger[]).FullName, a => getParamterArrayValue(typeof(BigInteger), a, 0) }, { typeof(BigInteger?[]).FullName, a => getParamterArrayValue(typeof(BigInteger?), a, null) },
{ typeof(NpgsqlPath).FullName, a => {
var path = (NpgsqlPath)a;
diff --git a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongSelect.cs b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongSelect.cs
index 36fbaca0..70772de1 100644
--- a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongSelect.cs
+++ b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.ShenTong.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
index a375a4f7..cc63202a 100644
--- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
+++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongConnectionPool.cs
@@ -144,7 +144,7 @@ namespace FreeSql.ShenTong
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -174,7 +174,7 @@ namespace FreeSql.ShenTong
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
index bd1592b3..c045b3ec 100644
--- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
+++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
@@ -90,9 +90,11 @@ namespace FreeSql.SqlServer.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
@@ -195,9 +197,11 @@ namespace FreeSql.SqlServer.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
index 76129798..06950324 100644
--- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
+++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
@@ -28,7 +28,7 @@
-
+
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
index 32b12918..922d9ee9 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerConnectionPool.cs
@@ -144,7 +144,7 @@ namespace FreeSql.SqlServer
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -174,7 +174,7 @@ namespace FreeSql.SqlServer
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
index 30843855..9d597515 100644
--- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
+++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
@@ -69,9 +69,11 @@ namespace FreeSql.Sqlite.Curd
}
foreach (var tb in tbsjoin)
{
- if (tb.Type == SelectTableInfoType.Parent) continue;
switch (tb.Type)
{
+ case SelectTableInfoType.Parent:
+ case SelectTableInfoType.RawJoin:
+ continue;
case SelectTableInfoType.LeftJoin:
sb.Append(" \r\nLEFT JOIN ");
break;
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
index 7ed19d00..f5677b1a 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteConnectionPool.cs
@@ -173,7 +173,7 @@ namespace FreeSql.Sqlite
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
@@ -203,7 +203,7 @@ namespace FreeSql.Sqlite
catch (Exception ex)
{
if (_pool.SetUnavailable(ex) == true)
- throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
+ throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
}
}
}
diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
index 9cb760af..2d15b6d1 100644
--- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
+++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj
@@ -29,7 +29,7 @@
-
+