From c6f0e4455fc80af68a2dbc00f93e0a255e879824 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 17 Jan 2023 21:37:38 +0800 Subject: [PATCH] =?UTF-8?q?v3.2.687-preview20230119=20pgsql15.0=20Version?= =?UTF-8?q?=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Directory.Build.props | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../PostgreSQL/CustomPostgreSQLCodeFirst.cs | 4 +-- .../PostgreSQL/CustomPostgreSQLDbFirst.cs | 26 ++++++++++++------ .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../PostgreSQL/OdbcPostgreSQLCodeFirst.cs | 4 +-- .../PostgreSQL/OdbcPostgreSQLDbFirst.cs | 26 ++++++++++++------ .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../PostgreSQLCodeFirst.cs | 4 +-- .../PostgreSQLDbFirst.cs | 27 +++++++++++++------ .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- 34 files changed, 89 insertions(+), 58 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 92129de4..90c1fdf2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 05bf1e37..bd016448 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 3d7d43d9..5c1d3451 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 0d064c26..abc46d12 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index a703d3ac..97df110a 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 12ca4f4c..4a445890 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index ac571673..7f838959 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 7532ca9d..68b7ed2a 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index bffc9dff..399ef198 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index c2330922..1413df7f 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 55e5fc26..499397b6 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 60165510..5fa18bef 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs index 7d165395..b39d7f44 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLCodeFirst.cs @@ -89,8 +89,8 @@ namespace FreeSql.Custom.PostgreSQL var isPg10 = (_orm.DbFirst as CustomPostgreSQLDbFirst).IsPg10; using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { - isPg95 = CustomPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5); - isPg96 = CustomPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6); + isPg95 = CustomPostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 5).Item1; + isPg96 = CustomPostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } foreach (var obj in objects) diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs index 261dfdec..30f11442 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLDbFirst.cs @@ -32,7 +32,7 @@ namespace FreeSql.Custom.PostgreSQL { try { - _ServerVersionValue = int.Parse(conn.Value.ServerVersion.Split('.')[0]); + _ServerVersionValue = ParsePgVersion(conn.Value.ServerVersion, 10, 0).Item2; } catch { @@ -148,7 +148,7 @@ namespace FreeSql.Custom.PostgreSQL using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { olddatabase = conn.Value.Database; - is96 = PgVersionIs(conn.Value.ServerVersion, 9, 6); + is96 = ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } string[] tbname = null; string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database; @@ -542,13 +542,23 @@ where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information return ret.Select(a => new DbEnumInfo { Name = a.Key, Labels = a.Value }).ToList(); } - public static bool PgVersionIs(string serverVersion, int version1, int version2 = 0) + public static NativeTuple ParsePgVersion(string versionString, int v1, int v2) { - int[] version = serverVersion.Split('.').Select(a => int.TryParse(a, out var tryint) ? tryint : 0).ToArray(); - if (version?.Any() != true) return true; - if (version[0] > version1) return true; - if (version[0] == version1 && version.Length > 1 && version[1] >= version2) return true; - return false; + int[] version = new int[] { 0, 0 }; + var vmatch = Regex.Match(versionString, @"(\d+)\.(\d+)"); + if (vmatch.Success) + { + version[0] = int.Parse(vmatch.Groups[1].Value); + version[1] = int.Parse(vmatch.Groups[2].Value); + } + else + { + vmatch = Regex.Match(versionString, @"(\d+)"); + version[0] = int.Parse(vmatch.Groups[1].Value); + } + if (version[0] > v1) return NativeTuple.Create(true, version[0], version[1]); + if (version[0] == v1 && version[1] >= v2) return NativeTuple.Create(true, version[0], version[1]); + return NativeTuple.Create(false, version[0], version[1]); } } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index f971786a..e24c0dc6 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 0c4523e5..5170fbde 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 14891fb4..1882b1df 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 114e0d68..00e0beb9 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index de2b418b..346d8142 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index d9b2ba78..9e2a3bd1 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 147fc4b2..c351b99c 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 4977caab..c9452127 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs index f86ad5d1..3a52548f 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLCodeFirst.cs @@ -90,8 +90,8 @@ namespace FreeSql.Odbc.PostgreSQL var isPg10 = (_orm.DbFirst as OdbcPostgreSQLDbFirst).IsPg10; using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { - isPg95 = OdbcPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5); - isPg96 = OdbcPostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6); + isPg95 = OdbcPostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 5).Item1; + isPg96 = OdbcPostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } foreach (var obj in objects) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs index e87144cc..db32d8d6 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs @@ -33,7 +33,7 @@ namespace FreeSql.Odbc.PostgreSQL { try { - _ServerVersionValue = int.Parse(conn.Value.ServerVersion.Split('.')[0]); + _ServerVersionValue = ParsePgVersion(conn.Value.ServerVersion, 10, 0).Item2; } catch { @@ -142,7 +142,7 @@ namespace FreeSql.Odbc.PostgreSQL using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { olddatabase = conn.Value.Database; - is96 = PgVersionIs(conn.Value.ServerVersion, 9, 6); + is96 = ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } string[] tbname = null; string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database; @@ -536,13 +536,23 @@ where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information return ret.Select(a => new DbEnumInfo { Name = a.Key, Labels = a.Value }).ToList(); } - public static bool PgVersionIs(string serverVersion, int version1, int version2 = 0) + public static NativeTuple ParsePgVersion(string versionString, int v1, int v2) { - int[] version = serverVersion.Split('.').Select(a => int.TryParse(a, out var tryint) ? tryint : 0).ToArray(); - if (version?.Any() != true) return true; - if (version[0] > version1) return true; - if (version[0] == version1 && version.Length > 1 && version[1] >= version2) return true; - return false; + int[] version = new int[] { 0, 0 }; + var vmatch = Regex.Match(versionString, @"(\d+)\.(\d+)"); + if (vmatch.Success) + { + version[0] = int.Parse(vmatch.Groups[1].Value); + version[1] = int.Parse(vmatch.Groups[2].Value); + } + else + { + vmatch = Regex.Match(versionString, @"(\d+)"); + version[0] = int.Parse(vmatch.Groups[1].Value); + } + if (version[0] > v1) return NativeTuple.Create(true, version[0], version[1]); + if (version[0] == v1 && version[1] >= v2) return NativeTuple.Create(true, version[0], version[1]); + return NativeTuple.Create(false, version[0], version[1]); } } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 2e4ef767..2fb75269 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index a102b703..98765581 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 4da563bb..6352c656 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs index a1db5732..afefcdc1 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLCodeFirst.cs @@ -139,8 +139,8 @@ namespace FreeSql.PostgreSQL var isPg10 = (_orm.DbFirst as PostgreSQLDbFirst).IsPg10; using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { - isPg95 = PostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 5); - isPg96 = PostgreSQLDbFirst.PgVersionIs(conn.Value.ServerVersion, 9, 6); + isPg95 = PostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 5).Item1; + isPg96 = PostgreSQLDbFirst.ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } foreach (var obj in objects) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs index 89577024..3d7ee3c0 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs @@ -1,5 +1,6 @@ using FreeSql.DatabaseModel; using FreeSql.Internal; +using FreeSql.Internal.Model; using Newtonsoft.Json.Linq; using Npgsql.LegacyPostgis; using NpgsqlTypes; @@ -37,7 +38,7 @@ namespace FreeSql.PostgreSQL { try { - _ServerVersionValue = int.Parse(conn.Value.ServerVersion.Split('.')[0]); + _ServerVersionValue = ParsePgVersion(conn.Value.ServerVersion, 10, 0).Item2; } catch { @@ -250,7 +251,7 @@ namespace FreeSql.PostgreSQL using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5))) { olddatabase = conn.Value.Database; - is96 = PgVersionIs(conn.Value.ServerVersion, 9, 6); + is96 = ParsePgVersion(conn.Value.ServerVersion, 9, 6).Item1; } string[] tbname = null; string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database; @@ -639,13 +640,23 @@ where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information return ret.Select(a => new DbEnumInfo { Name = a.Key, Labels = a.Value }).ToList(); } - public static bool PgVersionIs(string serverVersion, int version1, int version2 = 0) + public static NativeTuple ParsePgVersion(string versionString, int v1, int v2) { - int[] version = serverVersion.Split('.').Select(a => int.TryParse(a, out var tryint) ? tryint : 0).ToArray(); - if (version?.Any() != true) return true; - if (version[0] > version1) return true; - if (version[0] == version1 && version.Length > 1 && version[1] >= version2) return true; - return false; + int[] version = new int[] { 0, 0 }; + var vmatch = Regex.Match(versionString, @"(\d+)\.(\d+)"); + if (vmatch.Success) + { + version[0] = int.Parse(vmatch.Groups[1].Value); + version[1] = int.Parse(vmatch.Groups[2].Value); + } + else + { + vmatch = Regex.Match(versionString, @"(\d+)"); + version[0] = int.Parse(vmatch.Groups[1].Value); + } + if (version[0] > v1) return NativeTuple.Create(true, version[0], version[1]); + if (version[0] == v1 && version[1] >= v2) return NativeTuple.Create(true, version[0], version[1]); + return NativeTuple.Create(false, version[0], version[1]); } } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index c50e3ad9..00261b89 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 7296654b..f0212983 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index fabab4a6..205cb837 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index f618e99d..d44b4b95 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index ed7a4022..c47cd5ef 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.687-preview20230118 + 3.2.687-preview20230119