From fc32710421b0cdfa08c3e4ea0dfe4febbf5a6eda Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 13 May 2022 12:32:26 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20pgsql=20numeric=20->?= =?UTF-8?q?=20BigInteger=20=E6=98=A0=E5=B0=84=EF=BC=9B#1100?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 65 ++++++++++++-- Examples/base_entity/base_entity.csproj | 1 + FreeSql.Tests.VB/FreeSql.Tests.VB.vbproj | 3 +- .../FreeSql.Tests.PerformanceTests.csproj | 3 +- .../FreeSql.Tests.Provider.GBase.csproj | 2 +- ...eeSql.Tests.Provider.MySqlConnector.csproj | 3 +- .../FreeSql.Tests.Provider.Odbc.csproj | 3 +- ...rovider.PostgreSQL.NetTopologySuite.csproj | 4 +- .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 72 ++++++++++++++-- .../FreeSql.Tests.Provider.Sqlite.Data.csproj | 1 - .../GetDataReaderValueBlockExpressionTest.cs | 11 +-- .../FreeSql.Tests/Internal/CommonUtilsTest.cs | 23 ++--- FreeSql.Tests/FreeSql.Tests/Issues/1021.cs | 19 +---- FreeSql.Tests/FreeSql.Tests/Issues/1092.cs | 18 +--- FreeSql.Tests/FreeSql.Tests/Issues/269.cs | 16 +--- .../FreeSql.Tests/Linq/ExprHelperTest.cs | 19 +---- .../Linq/QueryableRestoreToSelectTest.cs | 16 +--- .../FreeSql.Tests/Linq/QueryableTest.cs | 18 +--- .../PostgreSQL/PostgreSQLCodeFirstTest.cs | 85 +++++++++---------- .../PostgreSQLExpression/OtherTest.cs | 9 +- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 20 ++--- FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 16 ++-- FreeSql.Tests/FreeSql.Tests/UnitTest3.cs | 24 ++---- .../PostgreSQLCodeFirst.cs | 2 + .../PostgreSQLDbFirst.cs | 2 - .../PostgreSQLProvider.cs | 10 +++ .../PostgreSQLUtils.cs | 2 + 27 files changed, 223 insertions(+), 244 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 61036136..53db0578 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; @@ -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(); @@ -177,7 +182,7 @@ namespace base_entity //.UseSlave("data source=test1.db", "data source=test2.db", "data source=test3.db", "data source=test4.db") //.UseSlaveWeight(10, 1, 1, 5) - + //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") @@ -185,8 +190,8 @@ namespace base_entity //.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) @@ -211,6 +216,56 @@ 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) diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj index 390d1dec..6f286bbd 100644 --- a/Examples/base_entity/base_entity.csproj +++ b/Examples/base_entity/base_entity.csproj @@ -13,6 +13,7 @@ + diff --git a/FreeSql.Tests.VB/FreeSql.Tests.VB.vbproj b/FreeSql.Tests.VB/FreeSql.Tests.VB.vbproj index 82e4790d..56516b14 100644 --- a/FreeSql.Tests.VB/FreeSql.Tests.VB.vbproj +++ b/FreeSql.Tests.VB/FreeSql.Tests.VB.vbproj @@ -2,8 +2,7 @@ FreeSql.Tests.VB - net5.0 - + net6.0 false diff --git a/FreeSql.Tests/FreeSql.Tests.PerformanceTests/FreeSql.Tests.PerformanceTests.csproj b/FreeSql.Tests/FreeSql.Tests.PerformanceTests/FreeSql.Tests.PerformanceTests.csproj index a646671e..f6d5e5b9 100644 --- a/FreeSql.Tests/FreeSql.Tests.PerformanceTests/FreeSql.Tests.PerformanceTests.csproj +++ b/FreeSql.Tests/FreeSql.Tests.PerformanceTests/FreeSql.Tests.PerformanceTests.csproj @@ -1,8 +1,7 @@  - net5.0 - + net6.0 false diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.GBase/FreeSql.Tests.Provider.GBase.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.GBase/FreeSql.Tests.Provider.GBase.csproj index a335a9cf..2c3189e6 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.GBase/FreeSql.Tests.Provider.GBase.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.GBase/FreeSql.Tests.Provider.GBase.csproj @@ -1,7 +1,7 @@  - net5.0 + net6.0 false diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj index b2798928..68bbb01a 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/FreeSql.Tests.Provider.MySqlConnector.csproj @@ -1,8 +1,7 @@  - net5.0;netcoreapp3.1; - + net6.0;netcoreapp3.1; false diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/FreeSql.Tests.Provider.Odbc.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/FreeSql.Tests.Provider.Odbc.csproj index c6dc638d..f739f01e 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/FreeSql.Tests.Provider.Odbc.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/FreeSql.Tests.Provider.Odbc.csproj @@ -1,8 +1,7 @@  - net5.0 - + net6.0 false diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite.csproj index 651c636c..f4b9be84 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite.csproj @@ -1,8 +1,7 @@  - net5.0 - + net6.0 false @@ -12,6 +11,7 @@ + diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/PostgreSQL/PostgreSQLCodeFirstTest.cs index 5fd6226e..a099fb50 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.PostgreSQL.NetTopologySuite/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using NetTopologySuite.Geometries; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -11,7 +11,9 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Net; using System.Net.NetworkInformation; +using System.Numerics; using System.Text; +using System.Text.RegularExpressions; using Xunit; namespace FreeSql.Tests.PostgreSQL.NetTopologySuite @@ -19,11 +21,65 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite public class PostgreSQLCodeFirstTest { + [Fact] + public void UInt256Crud2() + { + var fsql = g.pgsql; + 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(); + Assert.Equal(1, fsql.Insert(new tuint256tb_01()).ExecuteAffrows()); + var find = fsql.Select().ToList(); + Assert.Single(find); + Assert.Equal("0", find[0].Number.ToString()); + var item = new tuint256tb_01 { Number = num }; + Assert.Equal(1, fsql.Insert(item).ExecuteAffrows()); + find = fsql.Select().Where(a => a.Id == item.Id).ToList(); + Assert.Single(find); + Assert.Equal(item.Number, find[0].Number); + num = num - 1; + item.Number = num; + Assert.Equal(1, fsql.Update().SetSource(item).ExecuteAffrows()); + find = fsql.Select().Where(a => a.Id == item.Id).ToList(); + Assert.Single(find); + Assert.Equal("57896044618658097711785492504343953926634992332820282019728792003956564819967", find[0].Number.ToString()); + + num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968"); + fsql.Delete().Where("1=1").ExecuteAffrows(); + Assert.Equal(1, fsql.Insert(new tuint256tb_01()).NoneParameter().ExecuteAffrows()); + find = fsql.Select().ToList(); + Assert.Single(find); + Assert.Equal("0", find[0].Number.ToString()); + item = new tuint256tb_01 { Number = num }; + Assert.Equal(1, fsql.Insert(item).NoneParameter().ExecuteAffrows()); + find = fsql.Select().Where(a => a.Id == item.Id).ToList(); + Assert.Single(find); + Assert.Equal(item.Number, find[0].Number); + num = num - 1; + item.Number = num; + Assert.Equal(1, fsql.Update().NoneParameter().SetSource(item).ExecuteAffrows()); + find = fsql.Select().Where(a => a.Id == item.Id).ToList(); + Assert.Single(find); + Assert.Equal("57896044618658097711785492504343953926634992332820282019728792003956564819967", find[0].Number.ToString()); + } + class tuint256tb_01 + { + public Guid Id { get; set; } + public BigInteger Number { get; set; } + } + [Fact] public void GetComparisonDDLStatements() { var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements(); - Assert.True(string.IsNullOrEmpty(sql)); //κ + Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后 g.pgsql.Select(); } @@ -43,8 +99,8 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite var item2 = new TableAllType { - testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("")), - testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("й")), new BitArray(Encoding.UTF8.GetBytes("")) }, + testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")), + testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) }, testFieldBool = true, testFieldBoolArray = new[] { true, true, false, false }, testFieldBoolArrayNullable = new bool?[] { true, true, null, false, false }, @@ -53,8 +109,8 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite testFieldByteArray = new byte[] { 0, 1, 2, 3, 4, 5, 6 }, testFieldByteArrayNullable = new byte?[] { 0, 1, 2, 3, null, 4, 5, 6 }, testFieldByteNullable = byte.MinValue, - testFieldBytes = Encoding.UTF8.GetBytes("й"), - testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("й"), Encoding.UTF8.GetBytes("й") }, + testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"), + testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") }, testFieldCidr = (IPAddress.Parse("10.0.0.0"), 8), testFieldCidrArray = new[] { (IPAddress.Parse("10.0.0.0"), 8), (IPAddress.Parse("192.168.0.0"), 16) }, testFieldCidrArrayNullable = new (IPAddress, int)?[] { (IPAddress.Parse("10.0.0.0"), 8), null, (IPAddress.Parse("192.168.0.0"), 16) }, @@ -229,9 +285,9 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite testFieldShortArray = new short[] { 1, 2, 3, 4, 5 }, testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 }, testFieldShortNullable = short.MinValue, - testFieldString = "йstring'\\?!@#$%^&*()_+{}}{~?><<>", + testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>", testFieldChar = 'X', - testFieldStringArray = new[] { "йString1", "йString2", null, "йString3" }, + testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" }, testFieldTimeSpan = TimeSpan.FromDays(1), testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) }, testFieldTimeSpanArrayNullable = new TimeSpan?[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), null, TimeSpan.FromSeconds(60) }, diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/FreeSql.Tests.Provider.Sqlite.Data.csproj b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/FreeSql.Tests.Provider.Sqlite.Data.csproj index 93061340..394d49c0 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/FreeSql.Tests.Provider.Sqlite.Data.csproj +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/FreeSql.Tests.Provider.Sqlite.Data.csproj @@ -3,7 +3,6 @@ net6.0 enable - false diff --git a/FreeSql.Tests/FreeSql.Tests/ExpressionTree/GetDataReaderValueBlockExpressionTest.cs b/FreeSql.Tests/FreeSql.Tests/ExpressionTree/GetDataReaderValueBlockExpressionTest.cs index ee4873c3..d49235b1 100644 --- a/FreeSql.Tests/FreeSql.Tests/ExpressionTree/GetDataReaderValueBlockExpressionTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/ExpressionTree/GetDataReaderValueBlockExpressionTest.cs @@ -1,14 +1,7 @@ -using FreeSql.DataAnnotations; -using FreeSql; +using FreeSql.Internal; using System; -using System.Collections.Generic; -using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using FreeSql.Internal; using System.Linq.Expressions; +using Xunit; namespace FreeSql.ExpressionTree { diff --git a/FreeSql.Tests/FreeSql.Tests/Internal/CommonUtilsTest.cs b/FreeSql.Tests/FreeSql.Tests/Internal/CommonUtilsTest.cs index 85552bbf..c6354349 100644 --- a/FreeSql.Tests/FreeSql.Tests/Internal/CommonUtilsTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Internal/CommonUtilsTest.cs @@ -1,23 +1,10 @@ -using FreeSql.DataAnnotations; -using FreeSql; -using System; -using System.Collections.Generic; -using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; +using FreeSql; using FreeSql.Internal; using FreeSql.Internal.CommonProvider; +using System; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Xunit; namespace FreeSql.InternalTests { diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/1021.cs b/FreeSql.Tests/FreeSql.Tests/Issues/1021.cs index 0b6c087b..d7cb3d60 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/1021.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/1021.cs @@ -1,21 +1,4 @@ -using FreeSql.DataAnnotations; -using FreeSql; -using System; -using System.Collections.Generic; -using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; +using Xunit; namespace FreeSql.Tests.Issues { diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/1092.cs b/FreeSql.Tests/FreeSql.Tests/Issues/1092.cs index ba5b9681..cb05fd84 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/1092.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/1092.cs @@ -1,22 +1,8 @@ using FreeSql.DataAnnotations; -using FreeSql; -using System; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System.Collections.Generic; using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; -using Newtonsoft.Json; namespace FreeSql.Tests.Issues { diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/269.cs b/FreeSql.Tests/FreeSql.Tests/Issues/269.cs index 93e6165c..31aa74c0 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/269.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/269.cs @@ -1,21 +1,7 @@ using FreeSql.DataAnnotations; -using FreeSql; -using System; -using System.Collections.Generic; -using Xunit; using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; +using Xunit; namespace FreeSql.Tests.Issues { diff --git a/FreeSql.Tests/FreeSql.Tests/Linq/ExprHelperTest.cs b/FreeSql.Tests/FreeSql.Tests/Linq/ExprHelperTest.cs index eb479490..d51c771f 100644 --- a/FreeSql.Tests/FreeSql.Tests/Linq/ExprHelperTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Linq/ExprHelperTest.cs @@ -1,22 +1,5 @@ -using FreeSql.DataAnnotations; -using FreeSql; -using System; -using System.Collections.Generic; +using System.Linq.Expressions; using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; -using FreeSql.Extensions.Linq; namespace FreeSql.Tests.Linq { diff --git a/FreeSql.Tests/FreeSql.Tests/Linq/QueryableRestoreToSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Linq/QueryableRestoreToSelectTest.cs index 3af1e098..33659ab7 100644 --- a/FreeSql.Tests/FreeSql.Tests/Linq/QueryableRestoreToSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Linq/QueryableRestoreToSelectTest.cs @@ -1,21 +1,7 @@ using FreeSql.DataAnnotations; -using FreeSql; -using System; using System.Collections.Generic; -using Xunit; using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; +using Xunit; namespace FreeSql.Tests.Linq { diff --git a/FreeSql.Tests/FreeSql.Tests/Linq/QueryableTest.cs b/FreeSql.Tests/FreeSql.Tests/Linq/QueryableTest.cs index 44ea5ddd..92353fb0 100644 --- a/FreeSql.Tests/FreeSql.Tests/Linq/QueryableTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Linq/QueryableTest.cs @@ -1,21 +1,9 @@ -using FreeSql.DataAnnotations; -using FreeSql; +using FreeSql; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; -using Xunit; using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; -using System.Diagnostics; -using System.IO; -using System.Text; +using Xunit; namespace FreeSql.Tests.Linq { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs index 25615b65..a790dee9 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLCodeFirstTest.cs @@ -1,5 +1,4 @@ -using FreeSql.DataAnnotations; -using Newtonsoft.Json; +using FreeSql.DataAnnotations; using Newtonsoft.Json.Linq; using Npgsql; using Npgsql.LegacyPostgis; @@ -11,6 +10,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Net; using System.Net.NetworkInformation; +using System.Numerics; using System.Text; using Xunit; @@ -18,12 +18,13 @@ namespace FreeSql.Tests.PostgreSQL { public class PostgreSQLCodeFirstTest { + [Fact] public void InsertUpdateParameter() { var fsql = g.pgsql; fsql.CodeFirst.SyncStructure(); - var item = new ts_iupstr { id = Guid.NewGuid(), title = string.Join(",", Enumerable.Range(0, 2000).Select(a => "й")) }; + var item = new ts_iupstr { id = Guid.NewGuid(), title = string.Join(",", Enumerable.Range(0, 2000).Select(a => "我是中国人")) }; Assert.Equal(1, fsql.Insert(item).ExecuteAffrows()); var find = fsql.Select().Where(a => a.id == item.id).First(); Assert.NotNull(find); @@ -91,7 +92,7 @@ namespace FreeSql.Tests.PostgreSQL [Fact] public void Blob() { - var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "й")); + var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人")); var data1 = Encoding.UTF8.GetBytes(str1); var item1 = new TS_BLB01 { Data = data1 }; @@ -137,57 +138,57 @@ namespace FreeSql.Tests.PostgreSQL } [Fact] - public void ı_ֶ() + public void 中文表_字段() { - var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<ı>(); - g.pgsql.CodeFirst.SyncStructure<ı>(); + var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<测试中文表>(); + g.pgsql.CodeFirst.SyncStructure<测试中文表>(); - var item = new ı + var item = new 测试中文表 { - = "Ա", - ʱ = DateTime.Now + 标题 = "测试标题", + 创建时间 = DateTime.Now }; - Assert.Equal(1, g.pgsql.Insert<ı>().AppendData(item).ExecuteAffrows()); - Assert.NotEqual(Guid.Empty, item.); - var item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + Assert.Equal(1, g.pgsql.Insert<测试中文表>().AppendData(item).ExecuteAffrows()); + Assert.NotEqual(Guid.Empty, item.编号); + var item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); Assert.NotNull(item2); - Assert.Equal(item., item2.); - Assert.Equal(item., item2.); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); - item. = "Ա"; - Assert.Equal(1, g.pgsql.Update<ı>().SetSource(item).ExecuteAffrows()); - item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + item.标题 = "测试标题更新"; + Assert.Equal(1, g.pgsql.Update<测试中文表>().SetSource(item).ExecuteAffrows()); + item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); Assert.NotNull(item2); - Assert.Equal(item., item2.); - Assert.Equal(item., item2.); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); - item. = "Ա_repo"; - var repo = g.pgsql.GetRepository<ı>(); + item.标题 = "测试标题更新_repo"; + var repo = g.pgsql.GetRepository<测试中文表>(); Assert.Equal(1, repo.Update(item)); - item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); Assert.NotNull(item2); - Assert.Equal(item., item2.); - Assert.Equal(item., item2.); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); - item. = "Ա_repo22"; + item.标题 = "测试标题更新_repo22"; Assert.Equal(1, repo.Update(item)); - item2 = g.pgsql.Select<ı>().Where(a => a. == item.).First(); + item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First(); Assert.NotNull(item2); - Assert.Equal(item., item2.); - Assert.Equal(item., item2.); + Assert.Equal(item.编号, item2.编号); + Assert.Equal(item.标题, item2.标题); } - class ı + class 测试中文表 { [Column(IsPrimary = true)] - public Guid { get; set; } + public Guid 编号 { get; set; } - public string { get; set; } + public string 标题 { get; set; } [Column(ServerTime = DateTimeKind.Local, CanUpdate = false)] - public DateTime ʱ { get; set; } + public DateTime 创建时间 { get; set; } [Column(ServerTime = DateTimeKind.Local)] - public DateTime ʱ { get; set; } + public DateTime 更新时间 { get; set; } } [Fact] @@ -215,7 +216,7 @@ namespace FreeSql.Tests.PostgreSQL public void AddField() { var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements(); - Assert.True(string.IsNullOrEmpty(sql)); //κ + Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后 g.pgsql.Select(); var id = g.pgsql.Insert().AppendData(new TopicAddField { }).ExecuteIdentity(); } @@ -259,8 +260,6 @@ namespace FreeSql.Tests.PostgreSQL [Fact] public void CurdAllField() { - NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis(); - var sql1 = select.Where(a => a.testFieldIntArray.Contains(1)).ToSql(); var sql2 = select.Where(a => a.testFieldIntArray.Contains(1)).ToSql(); @@ -271,8 +270,8 @@ namespace FreeSql.Tests.PostgreSQL var item2 = new TableAllType { - testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("")), - testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("й")), new BitArray(Encoding.UTF8.GetBytes("")) }, + testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")), + testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) }, testFieldBool = true, testFieldBoolArray = new[] { true, true, false, false }, testFieldBoolArrayNullable = new bool?[] { true, true, null, false, false }, @@ -281,8 +280,8 @@ namespace FreeSql.Tests.PostgreSQL testFieldByteArray = new byte[] { 0, 1, 2, 3, 4, 5, 6 }, testFieldByteArrayNullable = new byte?[] { 0, 1, 2, 3, null, 4, 5, 6 }, testFieldByteNullable = byte.MinValue, - testFieldBytes = Encoding.UTF8.GetBytes("й"), - testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("й"), Encoding.UTF8.GetBytes("й") }, + testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"), + testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") }, testFieldCidr = (IPAddress.Parse("10.0.0.0"), 8), testFieldCidrArray = new[] { (IPAddress.Parse("10.0.0.0"), 8), (IPAddress.Parse("192.168.0.0"), 16) }, testFieldCidrArrayNullable = new (IPAddress, int)?[] { (IPAddress.Parse("10.0.0.0"), 8), null, (IPAddress.Parse("192.168.0.0"), 16) }, @@ -457,9 +456,9 @@ namespace FreeSql.Tests.PostgreSQL testFieldShortArray = new short[] { 1, 2, 3, 4, 5 }, testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 }, testFieldShortNullable = short.MinValue, - testFieldString = "йstring'\\?!@#$%^&*()_+{}}{~?><<>", + testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>", testFieldChar = 'X', - testFieldStringArray = new[] { "йString1", "йString2", null, "йString3" }, + testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" }, testFieldTimeSpan = TimeSpan.FromDays(1), testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) }, testFieldTimeSpanArrayNullable = new TimeSpan?[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), null, TimeSpan.FromSeconds(60) }, diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs index 62792d53..5642db33 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -1,12 +1,10 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using Newtonsoft.Json.Linq; -using Npgsql; using Npgsql.LegacyPostgis; using NpgsqlTypes; using System; using System.Collections; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using System.Net; using System.Net.NetworkInformation; @@ -19,11 +17,6 @@ namespace FreeSql.Tests.PostgreSQLExpression ISelect select => g.pgsql.Select(); - public OtherTest() - { - NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis(); - } - [Fact] public void Div() { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 6d0e168b..a70df98d 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -1,22 +1,16 @@ using FreeSql.DataAnnotations; -using FreeSql; +using Newtonsoft.Json; using System; -using System.Collections.Generic; -using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; using System.Collections; +using System.Collections.Generic; using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; +using System.Threading.Tasks; +using Xunit; using Zeus; using Zeus.Domain.Enum; -using System.ComponentModel.DataAnnotations; -using System.Reflection; -using System.Threading; -using Newtonsoft.Json; namespace FreeSql.Tests { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs index 1526cddf..c1c64f53 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs @@ -1,19 +1,13 @@ -using FreeSql.DataAnnotations; -using FreeSql; +using FreeSql; +using FreeSql.DataAnnotations; +using kwlib; +using Microsoft.Data.SqlClient; using System; using System.Collections.Generic; -using Xunit; using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; using System.Threading; -using Microsoft.Data.SqlClient; -using kwlib; -using System.Text; +using Xunit; namespace FreeSql.Tests { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs index 0fdc8193..a4405d35 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs @@ -1,25 +1,13 @@ -using FreeSql.DataAnnotations; -using FreeSql; +using FreeSql; +using FreeSql.DataAnnotations; +using kwlib; using System; using System.Collections.Generic; -using Xunit; -using System.Linq; -using Newtonsoft.Json.Linq; -using NpgsqlTypes; -using Npgsql.LegacyPostgis; -using System.Linq.Expressions; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; -using System.Threading; -using System.Data.SqlClient; -using kwlib; using System.Diagnostics; -using System.IO; +using System.Linq; using System.Text; -using Newtonsoft.Json; -using System.Net.NetworkInformation; -using System.Net; -using System.Collections; +using System.Threading; +using Xunit; namespace FreeSql.Tests { 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;