mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 增加 实体属性 char 类型的映射#381 #235;
This commit is contained in:
		@@ -282,57 +282,7 @@ namespace FreeSql.Tests.MySqlConnector
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `testFieldBool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldSByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldShort` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldInt` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldLong` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldByte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDouble` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldFloat` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDecimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldTimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDateTime` DATETIME(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldBytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `testFieldString` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `testFieldGuid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldBoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `testFieldSByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `testFieldShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `testFieldIntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `testFieldByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldDoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `testFieldFloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `testFieldDecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `testFieldTimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `testFieldDateTimeNullable` DATETIME(3), 
 | 
					 | 
				
			||||||
  `testFieldGuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldPoint` POINT, 
 | 
					 | 
				
			||||||
  `testFieldLineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldPolygon` POLYGON, 
 | 
					 | 
				
			||||||
  `testFieldMultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `testFieldMultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldMultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `testFieldEnum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `testFieldEnum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -398,6 +348,7 @@ namespace FreeSql.Tests.MySqlConnector
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
					                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -411,10 +362,12 @@ namespace FreeSql.Tests.MySqlConnector
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -561,6 +514,10 @@ namespace FreeSql.Tests.MySqlConnector
 | 
				
			|||||||
            public string TestFieldString { get; set; }
 | 
					            public string TestFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [JsonProperty, Column(Name = "testFieldChar", DbType = "char(1)", IsNullable = true)]
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
					            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
				
			||||||
            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
					            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -665,6 +622,7 @@ namespace FreeSql.Tests.MySqlConnector
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,57 +179,7 @@ namespace FreeSql.Tests.Odbc.Dameng
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `Bool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `SByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `Short` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `Int` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `Long` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `Byte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `ULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `Double` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `Float` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `Decimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `TimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `DateTime` DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  `Bytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `String` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `Guid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `BoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `SByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `ShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `IntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `ByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `ULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `DoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `FloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `DecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `TimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `DateTimeNullable` DATETIME, 
 | 
					 | 
				
			||||||
  `GuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `Point` POINT, 
 | 
					 | 
				
			||||||
  `LineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `Polygon` POLYGON, 
 | 
					 | 
				
			||||||
  `MultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `MultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `MultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `Enum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `Enum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.dameng.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.dameng.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -272,6 +222,7 @@ namespace FreeSql.Tests.Odbc.Dameng
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -289,10 +240,12 @@ namespace FreeSql.Tests.Odbc.Dameng
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -323,6 +276,7 @@ namespace FreeSql.Tests.Odbc.Dameng
 | 
				
			|||||||
            public DateTime DateTimeOffSet { get; set; }
 | 
					            public DateTime DateTimeOffSet { get; set; }
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,6 +99,7 @@ namespace FreeSql.Tests.Odbc.Default
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
                testFieldUIntNullable = uint.MinValue,
 | 
					                testFieldUIntNullable = uint.MinValue,
 | 
				
			||||||
                testFieldULong = ulong.MaxValue,
 | 
					                testFieldULong = ulong.MaxValue,
 | 
				
			||||||
@@ -117,10 +118,12 @@ namespace FreeSql.Tests.Odbc.Default
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteIdentity();
 | 
					            var item3 = insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -148,6 +151,7 @@ namespace FreeSql.Tests.Odbc.Default
 | 
				
			|||||||
            public DateTime testFieldDateTime { get; set; }
 | 
					            public DateTime testFieldDateTime { get; set; }
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -177,8 +177,8 @@ namespace FreeSql.Tests.Odbc.KingbaseES
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            //sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,6 +221,7 @@ namespace FreeSql.Tests.Odbc.KingbaseES
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -255,19 +256,22 @@ namespace FreeSql.Tests.Odbc.KingbaseES
 | 
				
			|||||||
                a.DateTimeOffSet,
 | 
					                a.DateTimeOffSet,
 | 
				
			||||||
                a.Bytes,
 | 
					                a.Bytes,
 | 
				
			||||||
                a.String,
 | 
					                a.String,
 | 
				
			||||||
 | 
					                a.Char,
 | 
				
			||||||
                a.Guid
 | 
					                a.Guid
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            var newitem22 = select.Where(a => a.Id == item2.Id).First(a => new
 | 
					            var newitem22 = select.Where(a => a.Id == item2.Id).First(a => new
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                a.Id, a.id2, a.SByte, a.Short, a.Int, a.Long, a.Byte, a.UShort, a.UInt, a.ULong, a.Double, a.Float, a.Decimal, a.TimeSpan, a.DateTime, a.DateTimeOffSet, a.Bytes, a.String, a.Guid
 | 
					                a.Id, a.id2, a.SByte, a.Short, a.Int, a.Long, a.Byte, a.UShort, a.UInt, a.ULong, a.Double, a.Float, a.Decimal, a.TimeSpan, a.DateTime, a.DateTimeOffSet, a.Bytes, a.String, a.Char, a.Guid
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -298,6 +302,7 @@ namespace FreeSql.Tests.Odbc.KingbaseES
 | 
				
			|||||||
            public DateTime DateTimeOffSet { get; set; }
 | 
					            public DateTime DateTimeOffSet { get; set; }
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,57 +153,7 @@ namespace FreeSql.Tests.Odbc.MySql
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `testFieldBool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldSByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldShort` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldInt` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldLong` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldByte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDouble` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldFloat` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDecimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldTimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDateTime` DATETIME(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldBytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `testFieldString` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `testFieldGuid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldBoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `testFieldSByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `testFieldShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `testFieldIntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `testFieldByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldDoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `testFieldFloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `testFieldDecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `testFieldTimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `testFieldDateTimeNullable` DATETIME(3), 
 | 
					 | 
				
			||||||
  `testFieldGuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldPoint` POINT, 
 | 
					 | 
				
			||||||
  `testFieldLineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldPolygon` POLYGON, 
 | 
					 | 
				
			||||||
  `testFieldMultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `testFieldMultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldMultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `testFieldEnum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `testFieldEnum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -246,6 +196,7 @@ namespace FreeSql.Tests.Odbc.MySql
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
					                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -265,10 +216,12 @@ namespace FreeSql.Tests.Odbc.MySql
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -391,6 +344,10 @@ namespace FreeSql.Tests.Odbc.MySql
 | 
				
			|||||||
            public string TestFieldString { get; set; }
 | 
					            public string TestFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [JsonProperty, Column(Name = "testFieldChar", DbType = "char(1)", IsNullable = true)]
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
					            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
				
			||||||
            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
					            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -492,6 +449,7 @@ namespace FreeSql.Tests.Odbc.MySql
 | 
				
			|||||||
            public DateTime testFieldDateTime { get; set; }
 | 
					            public DateTime testFieldDateTime { get; set; }
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -176,59 +176,8 @@ namespace FreeSql.Tests.Odbc.Oracle
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `Bool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `SByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `Short` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `Int` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `Long` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `Byte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `ULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `Double` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `Float` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `Decimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `TimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `DateTime` DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  `Bytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `String` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `Guid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `BoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `SByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `ShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `IntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `ByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `ULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `DoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `FloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `DecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `TimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `DateTimeNullable` DATETIME, 
 | 
					 | 
				
			||||||
  `GuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `Point` POINT, 
 | 
					 | 
				
			||||||
  `LineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `Polygon` POLYGON, 
 | 
					 | 
				
			||||||
  `MultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `MultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `MultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `Enum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `Enum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.oracle.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.oracle.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -239,7 +188,17 @@ namespace FreeSql.Tests.Odbc.Oracle
 | 
				
			|||||||
        public void CurdAllField()
 | 
					        public void CurdAllField()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var item = new TableAllType { };
 | 
					            var item = new TableAllType { };
 | 
				
			||||||
            item.Id = (int)insert.AppendData(item).ExecuteIdentity();
 | 
					            for (var a = 0; a < 100; a++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                try //ERROR [23000] [Oracle][ODBC][Ora]ORA-00001: Υ<><CEA5>ΨһԼ<D2BB><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1ODBC.1ODBC_TB_ALLTYPE_pk2)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    item.Id = (int)insert.AppendData(item).ExecuteIdentity();
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                catch
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var newitem = select.Where(a => a.Id == item.Id).ToOne();
 | 
					            var newitem = select.Where(a => a.Id == item.Id).ToOne();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -271,6 +230,7 @@ namespace FreeSql.Tests.Odbc.Oracle
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -288,10 +248,12 @@ namespace FreeSql.Tests.Odbc.Oracle
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -322,6 +284,7 @@ namespace FreeSql.Tests.Odbc.Oracle
 | 
				
			|||||||
            public DateTime DateTimeOffSet { get; set; }
 | 
					            public DateTime DateTimeOffSet { get; set; }
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,8 +105,8 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
 | 
				
			|||||||
        public void AddField()
 | 
					        public void AddField()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
 | 
					            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            g.pgsql.Select<TopicAddField>();
 | 
					            g.pgsql.Select<TopicAddField>();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var id = g.pgsql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
 | 
					            var id = g.pgsql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -184,6 +184,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
					                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(90),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(90),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -202,10 +203,12 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -233,6 +236,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
 | 
				
			|||||||
            public DateTime testFieldDateTime { get; set; }
 | 
					            public DateTime testFieldDateTime { get; set; }
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,9 +166,8 @@ namespace FreeSql.Tests.Odbc.SqlServer
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -214,6 +213,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
					                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(30),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(30),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -234,10 +234,12 @@ namespace FreeSql.Tests.Odbc.SqlServer
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -367,6 +369,10 @@ namespace FreeSql.Tests.Odbc.SqlServer
 | 
				
			|||||||
            public string TestFieldString { get; set; }
 | 
					            public string TestFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [JsonProperty, Column(Name = "testFieldChar", DbType = "char(1)", IsNullable = true)]
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
					            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
				
			||||||
            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
					            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -427,6 +433,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
 | 
				
			|||||||
            public DateTimeOffset testFieldDateTimeOffset { get; set; }
 | 
					            public DateTimeOffset testFieldDateTimeOffset { get; set; }
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,8 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            g.pgsql.Select<TableAllType>();
 | 
					            g.pgsql.Select<TableAllType>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -230,6 +230,7 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
 | 
				
			|||||||
                testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
					                testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
					                testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
					                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
				
			||||||
                testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
					                testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
				
			||||||
@@ -262,10 +263,12 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -296,6 +299,7 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
            public NpgsqlPoint testFieldNpgsqlPoint { get; set; }
 | 
					            public NpgsqlPoint testFieldNpgsqlPoint { get; set; }
 | 
				
			||||||
            public NpgsqlLine testFieldNpgsqlLine { get; set; }
 | 
					            public NpgsqlLine testFieldNpgsqlLine { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -247,59 +247,8 @@ namespace FreeSql.Tests.Dameng
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `Bool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `SByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `Short` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `Int` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `Long` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `Byte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `ULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `Double` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `Float` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `Decimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `TimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `DateTime` DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  `Bytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `String` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `Guid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `BoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `SByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `ShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `IntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `ByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `ULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `DoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `FloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `DecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `TimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `DateTimeNullable` DATETIME, 
 | 
					 | 
				
			||||||
  `GuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `Point` POINT, 
 | 
					 | 
				
			||||||
  `LineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `Polygon` POLYGON, 
 | 
					 | 
				
			||||||
  `MultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `MultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `MultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `Enum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `Enum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.dameng.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.dameng.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -338,6 +287,7 @@ namespace FreeSql.Tests.Dameng
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -355,10 +305,12 @@ namespace FreeSql.Tests.Dameng
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -389,6 +341,7 @@ namespace FreeSql.Tests.Dameng
 | 
				
			|||||||
            public DateTime DateTimeOffSet { get; set; }
 | 
					            public DateTime DateTimeOffSet { get; set; }
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -177,54 +177,7 @@ namespace FreeSql.Tests.MsAccess
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.msaccess.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.msaccess.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE [tb_alltype] (  
 | 
					 | 
				
			||||||
  [Id] AUTOINCREMENT, 
 | 
					 | 
				
			||||||
  [Bool] BIT NOT NULL, 
 | 
					 | 
				
			||||||
  [SByte] DECIMAL(3,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Short] DECIMAL(6,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Int] DECIMAL(11,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Long] DECIMAL(20,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Byte] DECIMAL(3,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [UShort] DECIMAL(5,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [UInt] DECIMAL(10,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [ULong] DECIMAL(20,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Double] DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  [Float] SINGLE NOT NULL, 
 | 
					 | 
				
			||||||
  [Decimal] DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  [TimeSpan] TIME NOT NULL, 
 | 
					 | 
				
			||||||
  [DateTime] DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  [DateTimeOffSet] DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  [Bytes] BINARY(255), 
 | 
					 | 
				
			||||||
  [String] VARCHAR(255), 
 | 
					 | 
				
			||||||
  [Guid] VARCHAR(36) NOT NULL, 
 | 
					 | 
				
			||||||
  [BoolNullable] BIT, 
 | 
					 | 
				
			||||||
  [SByteNullable] DECIMAL(3,0), 
 | 
					 | 
				
			||||||
  [ShortNullable] DECIMAL(6,0), 
 | 
					 | 
				
			||||||
  [IntNullable] DECIMAL(11,0), 
 | 
					 | 
				
			||||||
  [testFielLongNullable] DECIMAL(20,0), 
 | 
					 | 
				
			||||||
  [ByteNullable] DECIMAL(3,0), 
 | 
					 | 
				
			||||||
  [UShortNullable] DECIMAL(5,0), 
 | 
					 | 
				
			||||||
  [UIntNullable] DECIMAL(10,0), 
 | 
					 | 
				
			||||||
  [ULongNullable] DECIMAL(20,0), 
 | 
					 | 
				
			||||||
  [DoubleNullable] DOUBLE, 
 | 
					 | 
				
			||||||
  [FloatNullable] SINGLE, 
 | 
					 | 
				
			||||||
  [DecimalNullable] DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  [TimeSpanNullable] TIME, 
 | 
					 | 
				
			||||||
  [DateTimeNullable] DATETIME, 
 | 
					 | 
				
			||||||
  [DateTimeOffSetNullable] DATETIME, 
 | 
					 | 
				
			||||||
  [GuidNullable] VARCHAR(36), 
 | 
					 | 
				
			||||||
  [Enum1] DECIMAL(11,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Enum1Nullable] DECIMAL(11,0), 
 | 
					 | 
				
			||||||
  [Enum2] DECIMAL(20,0) NOT NULL, 
 | 
					 | 
				
			||||||
  [Enum2Nullable] DECIMAL(20,0), 
 | 
					 | 
				
			||||||
  PRIMARY KEY ([Id])
 | 
					 | 
				
			||||||
) 
 | 
					 | 
				
			||||||
;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.msaccess.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.msaccess.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -267,6 +220,7 @@ namespace FreeSql.Tests.MsAccess
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -280,10 +234,12 @@ namespace FreeSql.Tests.MsAccess
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -318,6 +274,7 @@ namespace FreeSql.Tests.MsAccess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -281,57 +281,7 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `testFieldBool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldSByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldShort` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldInt` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldLong` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldByte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldUInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDouble` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldFloat` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDecimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldTimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldDateTime` DATETIME(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldBytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `testFieldString` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `testFieldGuid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldBoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `testFieldSByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `testFieldShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `testFieldIntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `testFieldByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldUIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `testFieldDoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `testFieldFloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `testFieldDecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `testFieldTimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `testFieldDateTimeNullable` DATETIME(3), 
 | 
					 | 
				
			||||||
  `testFieldGuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `testFieldPoint` POINT, 
 | 
					 | 
				
			||||||
  `testFieldLineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldPolygon` POLYGON, 
 | 
					 | 
				
			||||||
  `testFieldMultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `testFieldMultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `testFieldMultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `testFieldEnum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `testFieldEnum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `testFieldEnum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            sql = g.mysql.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -397,6 +347,7 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
					                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -416,10 +367,12 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -566,6 +519,10 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
            public string TestFieldString { get; set; }
 | 
					            public string TestFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [JsonProperty, Column(Name = "testFieldChar", DbType = "char(1)", IsNullable = true)]
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
					            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
				
			||||||
            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
					            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -670,6 +627,7 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -279,57 +279,7 @@ namespace FreeSql.Tests.Oracle
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS `cccddd`.`tb_alltype` ( 
 | 
					 | 
				
			||||||
  `Id` INT(11) NOT NULL AUTO_INCREMENT, 
 | 
					 | 
				
			||||||
  `Bool` BIT(1) NOT NULL, 
 | 
					 | 
				
			||||||
  `SByte` TINYINT(3) NOT NULL, 
 | 
					 | 
				
			||||||
  `Short` SMALLINT(6) NOT NULL, 
 | 
					 | 
				
			||||||
  `Int` INT(11) NOT NULL, 
 | 
					 | 
				
			||||||
  `Long` BIGINT(20) NOT NULL, 
 | 
					 | 
				
			||||||
  `Byte` TINYINT(3) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UShort` SMALLINT(5) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `UInt` INT(10) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `ULong` BIGINT(20) UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  `Double` DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  `Float` FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  `Decimal` DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  `TimeSpan` TIME NOT NULL, 
 | 
					 | 
				
			||||||
  `DateTime` DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  `Bytes` VARBINARY(255), 
 | 
					 | 
				
			||||||
  `String` VARCHAR(255), 
 | 
					 | 
				
			||||||
  `Guid` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `BoolNullable` BIT(1), 
 | 
					 | 
				
			||||||
  `SByteNullable` TINYINT(3), 
 | 
					 | 
				
			||||||
  `ShortNullable` SMALLINT(6), 
 | 
					 | 
				
			||||||
  `IntNullable` INT(11), 
 | 
					 | 
				
			||||||
  `testFielLongNullable` BIGINT(20), 
 | 
					 | 
				
			||||||
  `ByteNullable` TINYINT(3) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UShortNullable` SMALLINT(5) UNSIGNED, 
 | 
					 | 
				
			||||||
  `UIntNullable` INT(10) UNSIGNED, 
 | 
					 | 
				
			||||||
  `ULongNullable` BIGINT(20) UNSIGNED, 
 | 
					 | 
				
			||||||
  `DoubleNullable` DOUBLE, 
 | 
					 | 
				
			||||||
  `FloatNullable` FLOAT, 
 | 
					 | 
				
			||||||
  `DecimalNullable` DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  `TimeSpanNullable` TIME, 
 | 
					 | 
				
			||||||
  `DateTimeNullable` DATETIME, 
 | 
					 | 
				
			||||||
  `GuidNullable` VARCHAR(36), 
 | 
					 | 
				
			||||||
  `Point` POINT, 
 | 
					 | 
				
			||||||
  `LineString` LINESTRING, 
 | 
					 | 
				
			||||||
  `Polygon` POLYGON, 
 | 
					 | 
				
			||||||
  `MultiPoint` MULTIPOINT, 
 | 
					 | 
				
			||||||
  `MultiLineString` MULTILINESTRING, 
 | 
					 | 
				
			||||||
  `MultiPolygon` MULTIPOLYGON, 
 | 
					 | 
				
			||||||
  `Enum1` ENUM('E1','E2','E3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum1Nullable` ENUM('E1','E2','E3'), 
 | 
					 | 
				
			||||||
  `Enum2` SET('F1','F2','F3') NOT NULL, 
 | 
					 | 
				
			||||||
  `Enum2Nullable` SET('F1','F2','F3'), 
 | 
					 | 
				
			||||||
  PRIMARY KEY (`Id`)
 | 
					 | 
				
			||||||
) Engine=InnoDB;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.oracle.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.oracle.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -372,6 +322,7 @@ namespace FreeSql.Tests.Oracle
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -389,10 +340,12 @@ namespace FreeSql.Tests.Oracle
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -427,6 +380,7 @@ namespace FreeSql.Tests.Oracle
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -145,8 +145,8 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
        public void AddField()
 | 
					        public void AddField()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
 | 
					            var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            g.pgsql.Select<TopicAddField>();
 | 
					            g.pgsql.Select<TopicAddField>();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var id = g.pgsql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
 | 
					            var id = g.pgsql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -388,6 +388,7 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
                testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
					                testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
					                testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
					                testFieldTimeSpan = TimeSpan.FromDays(1),
 | 
				
			||||||
                testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
					                testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
				
			||||||
@@ -420,10 +421,12 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3.Id && object.Equals(a.testFieldJToken["a"], "1")).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -454,6 +457,7 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
            public NpgsqlPoint testFieldNpgsqlPoint { get; set; }
 | 
					            public NpgsqlPoint testFieldNpgsqlPoint { get; set; }
 | 
				
			||||||
            public NpgsqlLine testFieldNpgsqlLine { get; set; }
 | 
					            public NpgsqlLine testFieldNpgsqlLine { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,8 +143,8 @@ namespace FreeSql.Tests.ShenTong
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.shentong.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.shentong.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            g.shentong.Select<TableAllType>();
 | 
					            g.shentong.Select<TableAllType>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -217,6 +217,7 @@ namespace FreeSql.Tests.ShenTong
 | 
				
			|||||||
                //testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
					                //testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                //testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
					                //testFieldStringArray = new[] { "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String1", "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String2", null, "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>String3" },
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromHours(10),
 | 
					                testFieldTimeSpan = TimeSpan.FromHours(10),
 | 
				
			||||||
                //testFieldTimeSpanArray = new[] { TimeSpan.FromHours(10), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
					                //testFieldTimeSpanArray = new[] { TimeSpan.FromHours(10), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
 | 
				
			||||||
@@ -245,10 +246,12 @@ namespace FreeSql.Tests.ShenTong
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted().First();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -279,6 +282,7 @@ namespace FreeSql.Tests.ShenTong
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -202,9 +202,8 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void GetComparisonDDLStatements()
 | 
					        public void GetComparisonDDLStatements()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -250,6 +249,7 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
                testFieldShort = short.MaxValue,
 | 
					                testFieldShort = short.MaxValue,
 | 
				
			||||||
                testFieldShortNullable = short.MinValue,
 | 
					                testFieldShortNullable = short.MinValue,
 | 
				
			||||||
                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                testFieldString = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                testFieldChar = 'X',
 | 
				
			||||||
                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
					                testFieldTimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                testFieldTimeSpanNullable = TimeSpan.FromSeconds(30),
 | 
					                testFieldTimeSpanNullable = TimeSpan.FromSeconds(30),
 | 
				
			||||||
                testFieldUInt = uint.MaxValue,
 | 
					                testFieldUInt = uint.MaxValue,
 | 
				
			||||||
@@ -270,10 +270,12 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
            var item3 = insert.AppendData(item2).ExecuteInserted();
 | 
					            var item3 = insert.AppendData(item2).ExecuteInserted();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted();
 | 
					            item3 = insert.NoneParameter().AppendData(item2).ExecuteInserted();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item3[0].Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
					            Assert.Equal(item2.testFieldString, newitem2.testFieldString);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.testFieldChar, newitem2.testFieldChar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -403,6 +405,10 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
            public string TestFieldString { get; set; }
 | 
					            public string TestFieldString { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [JsonProperty, Column(Name = "testFieldChar", DbType = "char(1)", IsNullable = true)]
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
					            [JsonProperty, Column(Name = "testFieldTimeSpan", DbType = "time")]
 | 
				
			||||||
            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
					            public TimeSpan TestFieldTimeSpan { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -467,6 +473,7 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] testFieldBytes { get; set; }
 | 
					            public byte[] testFieldBytes { get; set; }
 | 
				
			||||||
            public string testFieldString { get; set; }
 | 
					            public string testFieldString { get; set; }
 | 
				
			||||||
 | 
					            public char testFieldChar { get; set; }
 | 
				
			||||||
            public Guid testFieldGuid { get; set; }
 | 
					            public Guid testFieldGuid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? testFieldBoolNullable { get; set; }
 | 
					            public bool? testFieldBoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -239,53 +239,7 @@ namespace FreeSql.Tests.Sqlite
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sql = g.sqlite.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
					            var sql = g.sqlite.CodeFirst.GetComparisonDDLStatements<TableAllType>();
 | 
				
			||||||
            if (string.IsNullOrEmpty(sql) == false)
 | 
					            Assert.True(string.IsNullOrEmpty(sql)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(@"CREATE TABLE IF NOT EXISTS ""main"".""tb_alltype"" ( 
 | 
					 | 
				
			||||||
  ""Id"" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
 | 
					 | 
				
			||||||
  ""Bool"" BOOLEAN NOT NULL, 
 | 
					 | 
				
			||||||
  ""SByte"" SMALLINT NOT NULL, 
 | 
					 | 
				
			||||||
  ""Short"" SMALLINT NOT NULL, 
 | 
					 | 
				
			||||||
  ""Int"" INTEGER NOT NULL, 
 | 
					 | 
				
			||||||
  ""Long"" INTEGER NOT NULL, 
 | 
					 | 
				
			||||||
  ""Byte"" INT2 NOT NULL, 
 | 
					 | 
				
			||||||
  ""UShort"" UNSIGNED NOT NULL, 
 | 
					 | 
				
			||||||
  ""UInt"" DECIMAL(10,0) NOT NULL, 
 | 
					 | 
				
			||||||
  ""ULong"" DECIMAL(21,0) NOT NULL, 
 | 
					 | 
				
			||||||
  ""Double"" DOUBLE NOT NULL, 
 | 
					 | 
				
			||||||
  ""Float"" FLOAT NOT NULL, 
 | 
					 | 
				
			||||||
  ""Decimal"" DECIMAL(10,2) NOT NULL, 
 | 
					 | 
				
			||||||
  ""TimeSpan"" BIGINT NOT NULL, 
 | 
					 | 
				
			||||||
  ""DateTime"" DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  ""DateTimeOffSet"" DATETIME NOT NULL, 
 | 
					 | 
				
			||||||
  ""Bytes"" BLOB, 
 | 
					 | 
				
			||||||
  ""String"" NVARCHAR(255), 
 | 
					 | 
				
			||||||
  ""Guid"" CHARACTER(36) NOT NULL, 
 | 
					 | 
				
			||||||
  ""BoolNullable"" BOOLEAN, 
 | 
					 | 
				
			||||||
  ""SByteNullable"" SMALLINT, 
 | 
					 | 
				
			||||||
  ""ShortNullable"" SMALLINT, 
 | 
					 | 
				
			||||||
  ""IntNullable"" INTEGER, 
 | 
					 | 
				
			||||||
  ""testFielLongNullable"" INTEGER, 
 | 
					 | 
				
			||||||
  ""ByteNullable"" INT2, 
 | 
					 | 
				
			||||||
  ""UShortNullable"" UNSIGNED, 
 | 
					 | 
				
			||||||
  ""UIntNullable"" DECIMAL(10,0), 
 | 
					 | 
				
			||||||
  ""ULongNullable"" DECIMAL(21,0), 
 | 
					 | 
				
			||||||
  ""DoubleNullable"" DOUBLE, 
 | 
					 | 
				
			||||||
  ""FloatNullable"" FLOAT, 
 | 
					 | 
				
			||||||
  ""DecimalNullable"" DECIMAL(10,2), 
 | 
					 | 
				
			||||||
  ""TimeSpanNullable"" BIGINT, 
 | 
					 | 
				
			||||||
  ""DateTimeNullable"" DATETIME, 
 | 
					 | 
				
			||||||
  ""DateTimeOffSetNullable"" DATETIME, 
 | 
					 | 
				
			||||||
  ""GuidNullable"" CHARACTER(36), 
 | 
					 | 
				
			||||||
  ""Enum1"" MEDIUMINT NOT NULL, 
 | 
					 | 
				
			||||||
  ""Enum1Nullable"" MEDIUMINT, 
 | 
					 | 
				
			||||||
  ""Enum2"" BIGINT NOT NULL, 
 | 
					 | 
				
			||||||
  ""Enum2Nullable"" BIGINT
 | 
					 | 
				
			||||||
) 
 | 
					 | 
				
			||||||
;
 | 
					 | 
				
			||||||
", sql);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //sql = g.Sqlite.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
					            //sql = g.Sqlite.CodeFirst.GetComparisonDDLStatements<Tb_alltype>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -328,6 +282,7 @@ namespace FreeSql.Tests.Sqlite
 | 
				
			|||||||
                Short = short.MaxValue,
 | 
					                Short = short.MaxValue,
 | 
				
			||||||
                ShortNullable = short.MinValue,
 | 
					                ShortNullable = short.MinValue,
 | 
				
			||||||
                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
					                String = "<22><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>string'\\?!@#$%^&*()_+{}}{~?><<>",
 | 
				
			||||||
 | 
					                Char = 'X',
 | 
				
			||||||
                TimeSpan = TimeSpan.FromSeconds(999),
 | 
					                TimeSpan = TimeSpan.FromSeconds(999),
 | 
				
			||||||
                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
					                TimeSpanNullable = TimeSpan.FromSeconds(60),
 | 
				
			||||||
                UInt = uint.MaxValue,
 | 
					                UInt = uint.MaxValue,
 | 
				
			||||||
@@ -341,10 +296,12 @@ namespace FreeSql.Tests.Sqlite
 | 
				
			|||||||
            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            var newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
					            item2.Id = (int)insert.NoneParameter().AppendData(item2).ExecuteIdentity();
 | 
				
			||||||
            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
					            newitem2 = select.Where(a => a.Id == item2.Id).ToOne();
 | 
				
			||||||
            Assert.Equal(item2.String, newitem2.String);
 | 
					            Assert.Equal(item2.String, newitem2.String);
 | 
				
			||||||
 | 
					            Assert.Equal(item2.Char, newitem2.Char);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var items = select.ToList();
 | 
					            var items = select.ToList();
 | 
				
			||||||
            var itemstb = select.ToDataTable();
 | 
					            var itemstb = select.ToDataTable();
 | 
				
			||||||
@@ -379,6 +336,7 @@ namespace FreeSql.Tests.Sqlite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            public byte[] Bytes { get; set; }
 | 
					            public byte[] Bytes { get; set; }
 | 
				
			||||||
            public string String { get; set; }
 | 
					            public string String { get; set; }
 | 
				
			||||||
 | 
					            public char Char { get; set; }
 | 
				
			||||||
            public Guid Guid { get; set; }
 | 
					            public Guid Guid { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            public bool? BoolNullable { get; set; }
 | 
					            public bool? BoolNullable { get; set; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -451,6 +451,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                var m = Regex.Match(col.Attribute.DbType, ltp);
 | 
					                var m = Regex.Match(col.Attribute.DbType, ltp);
 | 
				
			||||||
                if (m.Success == false) continue;
 | 
					                if (m.Success == false) continue;
 | 
				
			||||||
                var sizeStr = m.Groups[1].Value.Trim();
 | 
					                var sizeStr = m.Groups[1].Value.Trim();
 | 
				
			||||||
 | 
					                if (sizeStr.EndsWith(" BYTE") || sizeStr.EndsWith(" CHAR")) sizeStr = sizeStr.Remove(sizeStr.Length - 5); //ORACLE
 | 
				
			||||||
                if (string.Compare(sizeStr, "max", true) == 0)
 | 
					                if (string.Compare(sizeStr, "max", true) == 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    col.DbSize = -1;
 | 
					                    col.DbSize = -1;
 | 
				
			||||||
@@ -1257,6 +1258,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            [typeof(DateTimeOffset)] = true,
 | 
					            [typeof(DateTimeOffset)] = true,
 | 
				
			||||||
            [typeof(byte[])] = true,
 | 
					            [typeof(byte[])] = true,
 | 
				
			||||||
            [typeof(string)] = true,
 | 
					            [typeof(string)] = true,
 | 
				
			||||||
 | 
					            [typeof(char)] = true,
 | 
				
			||||||
            [typeof(Guid)] = true,
 | 
					            [typeof(Guid)] = true,
 | 
				
			||||||
            //[typeof(MygisPoint)] = true,
 | 
					            //[typeof(MygisPoint)] = true,
 | 
				
			||||||
            //[typeof(MygisLineString)] = true,
 | 
					            //[typeof(MygisLineString)] = true,
 | 
				
			||||||
@@ -1719,6 +1721,11 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            if (bytes == null) return Guid.Empty;
 | 
					            if (bytes == null) return Guid.Empty;
 | 
				
			||||||
            return Guid.TryParse(BitConverter.ToString(bytes, 0, Math.Min(bytes.Length, 36)).Replace("-", ""), out var tryguid) ? tryguid : Guid.Empty;
 | 
					            return Guid.TryParse(BitConverter.ToString(bytes, 0, Math.Min(bytes.Length, 36)).Replace("-", ""), out var tryguid) ? tryguid : Guid.Empty;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        static char StringToChar(string str)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (string.IsNullOrEmpty(str)) return default(char);
 | 
				
			||||||
 | 
					            return str.ToCharArray(0, 1)[0];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>> _dicGetDataReaderValue = new ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>>();
 | 
					        static ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>> _dicGetDataReaderValue = new ConcurrentDictionary<Type, ConcurrentDictionary<Type, Func<object, object>>>();
 | 
				
			||||||
        static MethodInfo MethodArrayGetValue = typeof(Array).GetMethod("GetValue", new[] { typeof(int) });
 | 
					        static MethodInfo MethodArrayGetValue = typeof(Array).GetMethod("GetValue", new[] { typeof(int) });
 | 
				
			||||||
@@ -1749,6 +1756,8 @@ namespace FreeSql.Internal
 | 
				
			|||||||
        static Encoding DefaultEncoding = Encoding.UTF8;
 | 
					        static Encoding DefaultEncoding = Encoding.UTF8;
 | 
				
			||||||
        static MethodInfo MethodEncodingGetBytes = typeof(Encoding).GetMethod("GetBytes", new[] { typeof(string) });
 | 
					        static MethodInfo MethodEncodingGetBytes = typeof(Encoding).GetMethod("GetBytes", new[] { typeof(string) });
 | 
				
			||||||
        static MethodInfo MethodEncodingGetString = typeof(Encoding).GetMethod("GetString", new[] { typeof(byte[]) });
 | 
					        static MethodInfo MethodEncodingGetString = typeof(Encoding).GetMethod("GetString", new[] { typeof(byte[]) });
 | 
				
			||||||
 | 
					        static MethodInfo MethodStringToCharArray = typeof(string).GetMethod("ToCharArray", new Type[0]);
 | 
				
			||||||
 | 
					        static MethodInfo MethodStringToChar = typeof(Utils).GetMethod("StringToChar", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(string) }, null);
 | 
				
			||||||
        static MethodInfo MethodGuidToBytes = typeof(Utils).GetMethod("GuidToBytes", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(Guid) }, null);
 | 
					        static MethodInfo MethodGuidToBytes = typeof(Utils).GetMethod("GuidToBytes", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(Guid) }, null);
 | 
				
			||||||
        static MethodInfo MethodBytesToGuid = typeof(Utils).GetMethod("BytesToGuid", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(byte[]) }, null);
 | 
					        static MethodInfo MethodBytesToGuid = typeof(Utils).GetMethod("BytesToGuid", BindingFlags.NonPublic | BindingFlags.Static, null, new[] { typeof(byte[]) }, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1760,21 +1769,35 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            var valueExp = Expression.Variable(typeof(object), "locvalue");
 | 
					            var valueExp = Expression.Variable(typeof(object), "locvalue");
 | 
				
			||||||
            Func<Expression> funcGetExpression = () =>
 | 
					            Func<Expression> funcGetExpression = () =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (type.FullName == "System.Byte[]") return Expression.IfThenElse(
 | 
					 | 
				
			||||||
                    Expression.TypeEqual(valueExp, type),
 | 
					 | 
				
			||||||
                    Expression.Return(returnTarget, valueExp),
 | 
					 | 
				
			||||||
                    Expression.IfThenElse(
 | 
					 | 
				
			||||||
                        Expression.TypeEqual(valueExp, typeof(string)),
 | 
					 | 
				
			||||||
                        Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Convert(valueExp, typeof(string)))),
 | 
					 | 
				
			||||||
                        Expression.IfThenElse(
 | 
					 | 
				
			||||||
                            Expression.OrElse(Expression.TypeEqual(valueExp, typeof(Guid)), Expression.TypeEqual(valueExp, typeof(Guid?))),
 | 
					 | 
				
			||||||
                            Expression.Return(returnTarget, Expression.Call(MethodGuidToBytes, Expression.Convert(valueExp, typeof(Guid)))),
 | 
					 | 
				
			||||||
                            Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Call(MethodToString, valueExp)))
 | 
					 | 
				
			||||||
                        )
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
                if (type.IsArray)
 | 
					                if (type.IsArray)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    switch (type.FullName) 
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        case "System.Byte[]":
 | 
				
			||||||
 | 
					                            return Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                Expression.TypeEqual(valueExp, type),
 | 
				
			||||||
 | 
					                                Expression.Return(returnTarget, valueExp),
 | 
				
			||||||
 | 
					                                Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                    Expression.TypeEqual(valueExp, typeof(string)),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Convert(valueExp, typeof(string)))),
 | 
				
			||||||
 | 
					                                    Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                        Expression.OrElse(Expression.TypeEqual(valueExp, typeof(Guid)), Expression.TypeEqual(valueExp, typeof(Guid?))),
 | 
				
			||||||
 | 
					                                        Expression.Return(returnTarget, Expression.Call(MethodGuidToBytes, Expression.Convert(valueExp, typeof(Guid)))),
 | 
				
			||||||
 | 
					                                        Expression.Return(returnTarget, Expression.Call(Expression.Constant(DefaultEncoding), MethodEncodingGetBytes, Expression.Call(MethodToString, valueExp)))
 | 
				
			||||||
 | 
					                                    )
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
 | 
					                        case "System.Char[]":
 | 
				
			||||||
 | 
					                            return Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                Expression.TypeEqual(valueExp, type),
 | 
				
			||||||
 | 
					                                Expression.Return(returnTarget, valueExp),
 | 
				
			||||||
 | 
					                                Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                    Expression.TypeEqual(valueExp, typeof(string)),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Call(Expression.Convert(valueExp, typeof(string)), MethodStringToCharArray)),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Call(Expression.Call(MethodToString, valueExp), MethodStringToCharArray))
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    var elementType = type.GetElementType();
 | 
					                    var elementType = type.GetElementType();
 | 
				
			||||||
                    var arrNewExp = Expression.Variable(type, "arrNew");
 | 
					                    var arrNewExp = Expression.Variable(type, "arrNew");
 | 
				
			||||||
                    var arrExp = Expression.Variable(typeof(Array), "arr");
 | 
					                    var arrExp = Expression.Variable(typeof(Array), "arr");
 | 
				
			||||||
@@ -1817,14 +1840,6 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                var typeOrg = type;
 | 
					                var typeOrg = type;
 | 
				
			||||||
                if (type.IsNullableType()) type = type.GetGenericArguments().First();
 | 
					                if (type.IsNullableType()) type = type.GetGenericArguments().First();
 | 
				
			||||||
                if (type.IsEnum)
 | 
					 | 
				
			||||||
                    return Expression.Block(
 | 
					 | 
				
			||||||
                        Expression.IfThenElse(
 | 
					 | 
				
			||||||
                            Expression.Equal(Expression.TypeAs(valueExp, typeof(string)), Expression.Constant(string.Empty)),
 | 
					 | 
				
			||||||
                            Expression.Return(returnTarget, Expression.Convert(Expression.Default(type), typeof(object))),
 | 
					 | 
				
			||||||
                            Expression.Return(returnTarget, Expression.Call(MethodEnumParse, Expression.Constant(type, typeof(Type)), Expression.Call(MethodToString, valueExp), Expression.Constant(true, typeof(bool))))
 | 
					 | 
				
			||||||
                        )
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
                Expression tryparseExp = null;
 | 
					                Expression tryparseExp = null;
 | 
				
			||||||
                Expression tryparseBooleanExp = null;
 | 
					                Expression tryparseBooleanExp = null;
 | 
				
			||||||
                ParameterExpression tryparseVarExp = null;
 | 
					                ParameterExpression tryparseVarExp = null;
 | 
				
			||||||
@@ -1860,6 +1875,16 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                                    )
 | 
					                                    )
 | 
				
			||||||
                               }
 | 
					                               }
 | 
				
			||||||
                           );
 | 
					                           );
 | 
				
			||||||
 | 
					                    case "System.Char":
 | 
				
			||||||
 | 
					                        return Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                Expression.TypeEqual(valueExp, type),
 | 
				
			||||||
 | 
					                                Expression.Return(returnTarget, valueExp),
 | 
				
			||||||
 | 
					                                Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                    Expression.TypeEqual(valueExp, typeof(string)),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Convert(Expression.Call(MethodStringToChar, Expression.Convert(valueExp, typeof(string))), typeof(object))),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Convert(Expression.Call(MethodStringToChar, Expression.Call(MethodToString, valueExp)), typeof(object)))
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
                    case "System.SByte":
 | 
					                    case "System.SByte":
 | 
				
			||||||
                        tryparseExp = Expression.Block(
 | 
					                        tryparseExp = Expression.Block(
 | 
				
			||||||
                           new[] { tryparseVarExp = Expression.Variable(typeof(sbyte)) },
 | 
					                           new[] { tryparseVarExp = Expression.Variable(typeof(sbyte)) },
 | 
				
			||||||
@@ -2029,6 +2054,14 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                        );
 | 
					                        );
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                    default:
 | 
					                    default:
 | 
				
			||||||
 | 
					                        if (type.IsEnum)
 | 
				
			||||||
 | 
					                            return Expression.Block(
 | 
				
			||||||
 | 
					                                Expression.IfThenElse(
 | 
				
			||||||
 | 
					                                    Expression.Equal(Expression.TypeAs(valueExp, typeof(string)), Expression.Constant(string.Empty)),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Convert(Expression.Default(type), typeof(object))),
 | 
				
			||||||
 | 
					                                    Expression.Return(returnTarget, Expression.Call(MethodEnumParse, Expression.Constant(type, typeof(Type)), Expression.Call(MethodToString, valueExp), Expression.Constant(true, typeof(bool))))
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
                        foreach (var switchFunc in GetDataReaderValueBlockExpressionSwitchTypeFullName)
 | 
					                        foreach (var switchFunc in GetDataReaderValueBlockExpressionSwitchTypeFullName)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            var switchFuncRet = switchFunc(returnTarget, valueExp, type);
 | 
					                            var switchFuncRet = switchFunc(returnTarget, valueExp, type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,8 +41,10 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
					                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
				
			||||||
            else if (param is bool || param is bool?)
 | 
					            else if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,7 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(DmDbType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(DmDbType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(DmDbType.VarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(DmDbType.VarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(DmDbType.Char, "char", "char(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(DmDbType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(DmDbType.Char, "char", "char(36) NULL", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(DmDbType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(DmDbType.Char, "char", "char(36) NULL", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? -1 : 0;
 | 
					                return (bool)param ? -1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,7 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OleDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OleDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OleDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OleDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OleDbType.VarChar, "varchar", "varchar(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OleDbType.Guid, "varchar", "varchar(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OleDbType.Guid, "varchar", "varchar(36)", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OleDbType.Guid, "varchar", "varchar(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OleDbType.Guid, "varchar", "varchar(36)", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,8 +45,10 @@ namespace FreeSql.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //只有 mysql 需要处理反斜杠
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //只有 mysql 需要处理反斜杠
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64();
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,7 @@ namespace FreeSql.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(MySqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(MySqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(MySqlDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(MySqlDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(MySqlDbType.VarChar, "char", "char(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(MySqlDbType.VarChar, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(MySqlDbType.VarChar, "char", "char(36)", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(MySqlDbType.VarChar, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(MySqlDbType.VarChar, "char", "char(36)", false, true, null) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
					                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
				
			||||||
            else if (param is bool || param is bool?)
 | 
					            else if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "char", "char(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OdbcType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.Char, "char", "char(36) NULL", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OdbcType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.Char, "char", "char(36) NULL", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        public virtual string MappingOdbcTypeDateTime => "datetime";
 | 
					        public virtual string MappingOdbcTypeDateTime => "datetime";
 | 
				
			||||||
        public virtual string MappingOdbcTypeVarBinary => "varbinary";
 | 
					        public virtual string MappingOdbcTypeVarBinary => "varbinary";
 | 
				
			||||||
        public virtual string MappingOdbcTypeVarChar => "nvarchar";
 | 
					        public virtual string MappingOdbcTypeVarChar => "nvarchar";
 | 
				
			||||||
 | 
					        public virtual string MappingOdbcTypeChar => "char";
 | 
				
			||||||
        public virtual string MappingOdbcTypeText => "nvarchar(max)";
 | 
					        public virtual string MappingOdbcTypeText => "nvarchar(max)";
 | 
				
			||||||
        public virtual string MappingOdbcTypeUniqueIdentifier => "uniqueidentifier";
 | 
					        public virtual string MappingOdbcTypeUniqueIdentifier => "uniqueidentifier";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
            else if (param is string)
 | 
					            else if (param is string)
 | 
				
			||||||
                return Adapter.UnicodeStringRawSql(param, mapColumn);
 | 
					                return Adapter.UnicodeStringRawSql(param, mapColumn);
 | 
				
			||||||
            else if (param is char)
 | 
					            else if (param is char)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                            { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, _utils.Adapter.MappingOdbcTypeVarBinary, $"{_utils.Adapter.MappingOdbcTypeVarBinary}(255)", false, null, new byte[0]) },
 | 
					                            { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, _utils.Adapter.MappingOdbcTypeVarBinary, $"{_utils.Adapter.MappingOdbcTypeVarBinary}(255)", false, null, new byte[0]) },
 | 
				
			||||||
                            { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, _utils.Adapter.MappingOdbcTypeVarChar, $"{_utils.Adapter.MappingOdbcTypeVarChar}(255)", false, null, "") },
 | 
					                            { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, _utils.Adapter.MappingOdbcTypeVarChar, $"{_utils.Adapter.MappingOdbcTypeVarChar}(255)", false, null, "") },
 | 
				
			||||||
 | 
					                            { typeof(char).FullName, CsToDb.New(OdbcType.Char, _utils.Adapter.MappingOdbcTypeChar, $"{_utils.Adapter.MappingOdbcTypeChar}(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            { typeof(Guid).FullName, CsToDb.New(OdbcType.UniqueIdentifier, deleteBrackets(_utils.Adapter.MappingOdbcTypeUniqueIdentifier), $"{_utils.Adapter.MappingOdbcTypeUniqueIdentifier} NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.UniqueIdentifier, deleteBrackets(_utils.Adapter.MappingOdbcTypeUniqueIdentifier), _utils.Adapter.MappingOdbcTypeUniqueIdentifier, false, true, null) },
 | 
					                            { typeof(Guid).FullName, CsToDb.New(OdbcType.UniqueIdentifier, deleteBrackets(_utils.Adapter.MappingOdbcTypeUniqueIdentifier), $"{_utils.Adapter.MappingOdbcTypeUniqueIdentifier} NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.UniqueIdentifier, deleteBrackets(_utils.Adapter.MappingOdbcTypeUniqueIdentifier), _utils.Adapter.MappingOdbcTypeUniqueIdentifier, false, true, null) },
 | 
				
			||||||
                        };
 | 
					                        };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,8 +41,10 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? "'t'" : "'f'";
 | 
					                return (bool)param ? "'t'" : "'f'";
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
                { typeof(decimal).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
					                { typeof(decimal).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "bpchar", "bpchar(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(TimeSpan).FullName, CsToDb.New(OdbcType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OdbcType.Time, "time", "time",false, true, null) },
 | 
					                { typeof(TimeSpan).FullName, CsToDb.New(OdbcType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OdbcType.Time, "time", "time",false, true, null) },
 | 
				
			||||||
                { typeof(DateTime).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp", false, true, null) },
 | 
					                { typeof(DateTime).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp", false, true, null) },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
					            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
				
			||||||
            { 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(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(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() },
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        static object getParamterValue(Type type, object value, int level = 0)
 | 
					        static object getParamterValue(Type type, object value, int level = 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,8 +41,10 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //只有 mysql 需要处理反斜杠
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //只有 mysql 需要处理反斜杠
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64();
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "char", "char(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OdbcType.VarChar, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.VarChar, "char", "char(36)", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OdbcType.VarChar, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.VarChar, "char", "char(36)", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
					                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
				
			||||||
            else if (param is bool || param is bool?)
 | 
					            else if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "char", "char(1 CHAR) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OdbcType.Char, "char", "char(36 CHAR) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.Char, "char", "char(36 CHAR) NULL", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OdbcType.Char, "char", "char(36 CHAR) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.Char, "char", "char(36 CHAR) NULL", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? "'t'" : "'f'";
 | 
					                return (bool)param ? "'t'" : "'f'";
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
                { typeof(decimal).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
					                { typeof(decimal).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OdbcType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "char", "char(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(TimeSpan).FullName, CsToDb.New(OdbcType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OdbcType.Time, "time", "time",false, true, null) },
 | 
					                { typeof(TimeSpan).FullName, CsToDb.New(OdbcType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OdbcType.Time, "time", "time",false, true, null) },
 | 
				
			||||||
                { typeof(DateTime).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp", false, true, null) },
 | 
					                { typeof(DateTime).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OdbcType.DateTime, "timestamp", "timestamp", false, true, null) },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
					            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
				
			||||||
            { 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(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(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() },
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        static object getParamterValue(Type type, object value, int level = 0)
 | 
					        static object getParamterValue(Type type, object value, int level = 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,7 +50,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                return string.Concat("N'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("N'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (param is char)
 | 
					            else if (param is char)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OdbcType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OdbcType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OdbcType.Char, "char", "char(1) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OdbcType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OdbcType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OdbcType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
					                return $"hextoraw('{CommonUtils.BytesSqlRaw(param as byte[])}')";
 | 
				
			||||||
            else if (param is bool || param is bool?)
 | 
					            else if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,7 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(OracleDbType.Blob, "blob", "blob NULL", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(OracleDbType.Blob, "blob", "blob NULL", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OracleDbType.NVarchar2, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OracleDbType.NVarchar2, "nvarchar2", "nvarchar2(255) NULL", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OracleDbType.Char, "char", "char(1 CHAR) NULL", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(OracleDbType.Char, "char", "char(36 CHAR) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OracleDbType.Char, "char", "char(36 CHAR) NULL", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(OracleDbType.Char, "char", "char(36 CHAR) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(OracleDbType.Char, "char", "char(36 CHAR) NULL", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,10 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
            bool isdic;
 | 
					            bool isdic;
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? "'t'" : "'f'";
 | 
					                return (bool)param ? "'t'" : "'f'";
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,7 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
                { typeof(decimal).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
					                { typeof(decimal).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(NpgsqlDbType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(NpgsqlDbType.Varchar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(NpgsqlDbType.Varchar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(NpgsqlDbType.Char, "bpchar", "bpchar(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(TimeSpan).FullName, CsToDb.New(NpgsqlDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(NpgsqlDbType.Time, "time", "time",false, true, null) },
 | 
					                { typeof(TimeSpan).FullName, CsToDb.New(NpgsqlDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(NpgsqlDbType.Time, "time", "time",false, true, null) },
 | 
				
			||||||
                { typeof(DateTime).FullName, CsToDb.New(NpgsqlDbType.Timestamp, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(NpgsqlDbType.Timestamp, "timestamp", "timestamp", false, true, null) },
 | 
					                { typeof(DateTime).FullName, CsToDb.New(NpgsqlDbType.Timestamp, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(NpgsqlDbType.Timestamp, "timestamp", "timestamp", false, true, null) },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,7 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
					            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
				
			||||||
            { 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(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(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(NpgsqlPath).FullName, a => {
 | 
					            { typeof(NpgsqlPath).FullName, a => {
 | 
				
			||||||
                var path = (NpgsqlPath)a;
 | 
					                var path = (NpgsqlPath)a;
 | 
				
			||||||
@@ -70,6 +71,7 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
        static object getParamterValue(Type type, object value, int level = 0)
 | 
					        static object getParamterValue(Type type, object value, int level = 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (type.FullName == "System.Byte[]") return value;
 | 
					            if (type.FullName == "System.Byte[]") return value;
 | 
				
			||||||
 | 
					            if (type.FullName == "System.Char[]") return value;
 | 
				
			||||||
            if (type.IsArray && level == 0)
 | 
					            if (type.IsArray && level == 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var elementType = type.GetElementType();
 | 
					                var elementType = type.GetElementType();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,10 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? "'t'" : "'f'";
 | 
					                return (bool)param ? "'t'" : "'f'";
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,7 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
                { typeof(decimal).FullName, CsToDb.New(OscarDbType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OscarDbType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
					                { typeof(decimal).FullName, CsToDb.New(OscarDbType.Numeric, "numeric", "numeric(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(OscarDbType.Numeric, "numeric", "numeric(10,2)", false, true, null) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(OscarDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(OscarDbType.VarChar, "varchar", "varchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(OscarDbType.Char, "bpchar", "bpchar(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(TimeSpan).FullName, CsToDb.New(OscarDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OscarDbType.Time, "time", "time",false, true, null) },
 | 
					                { typeof(TimeSpan).FullName, CsToDb.New(OscarDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(OscarDbType.Time, "time", "time",false, true, null) },
 | 
				
			||||||
                { typeof(DateTime).FullName, CsToDb.New(OscarDbType.TimeStamp, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OscarDbType.TimeStamp, "timestamp", "timestamp", false, true, null) },
 | 
					                { typeof(DateTime).FullName, CsToDb.New(OscarDbType.TimeStamp, "timestamp", "timestamp NOT NULL", false, false, new DateTime(1970,1,1)) },{ typeof(DateTime?).FullName, CsToDb.New(OscarDbType.TimeStamp, "timestamp", "timestamp", false, true, null) },
 | 
				
			||||||
@@ -242,7 +243,7 @@ where ns.nspname = {0} and c.relname = {1}", tboldname ?? tbname);
 | 
				
			|||||||
                            var isCommentChanged = tbstructcol.comment != (tbcol.Comment ?? "");
 | 
					                            var isCommentChanged = tbstructcol.comment != (tbcol.Comment ?? "");
 | 
				
			||||||
                            if (tbcol.Attribute.DbType.StartsWith(tbstructcol.sqlType, StringComparison.CurrentCultureIgnoreCase) == false ||
 | 
					                            if (tbcol.Attribute.DbType.StartsWith(tbstructcol.sqlType, StringComparison.CurrentCultureIgnoreCase) == false ||
 | 
				
			||||||
                                tbcol.Attribute.DbType.Contains("[]") != (tbstructcol.attndims > 0))
 | 
					                                tbcol.Attribute.DbType.Contains("[]") != (tbstructcol.attndims > 0))
 | 
				
			||||||
                                sbalter.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER COLUMN ").Append(_commonUtils.QuoteSqlName(tbstructcol.column)).Append(" TYPE ").Append(tbcol.Attribute.DbType.Split(' ').First()).Append(";\r\n");
 | 
					                                sbalter.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER TYPE ").Append(_commonUtils.QuoteSqlName(tbstructcol.column)).Append(" ").Append(tbcol.Attribute.DbType.Split(' ').First()).Append(";\r\n");
 | 
				
			||||||
                            if (tbcol.Attribute.IsNullable != tbstructcol.is_nullable)
 | 
					                            if (tbcol.Attribute.IsNullable != tbstructcol.is_nullable)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if (tbcol.Attribute.IsNullable != true || tbcol.Attribute.IsNullable == true && tbcol.Attribute.IsPrimary == false)
 | 
					                                if (tbcol.Attribute.IsNullable != true || tbcol.Attribute.IsNullable == true && tbcol.Attribute.IsPrimary == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
					            { typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
 | 
				
			||||||
            { 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(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(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() },
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        static object getParamterValue(Type type, object value, int level = 0)
 | 
					        static object getParamterValue(Type type, object value, int level = 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,7 +51,7 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
                return string.Concat("N'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("N'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (param is char)
 | 
					            else if (param is char)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,7 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(SqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(SqlDbType.VarBinary, "varbinary", "varbinary(255)", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(SqlDbType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(SqlDbType.NVarChar, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(SqlDbType.Char, "char", "char(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(SqlDbType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(SqlDbType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(SqlDbType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(SqlDbType.UniqueIdentifier, "uniqueidentifier", "uniqueidentifier", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,8 +43,10 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            if (param is bool || param is bool?)
 | 
					            if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string || param is char)
 | 
					            else if (param is string)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            else if (param is char)
 | 
				
			||||||
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
                return ((Enum)param).ToInt64();
 | 
					                return ((Enum)param).ToInt64();
 | 
				
			||||||
            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
					            else if (decimal.TryParse(string.Concat(param), out var trydec))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                { typeof(byte[]).FullName, CsToDb.New(DbType.Binary, "blob", "blob", false, null, new byte[0]) },
 | 
					                { typeof(byte[]).FullName, CsToDb.New(DbType.Binary, "blob", "blob", false, null, new byte[0]) },
 | 
				
			||||||
                { typeof(string).FullName, CsToDb.New(DbType.String, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
					                { typeof(string).FullName, CsToDb.New(DbType.String, "nvarchar", "nvarchar(255)", false, null, "") },
 | 
				
			||||||
 | 
					                { typeof(char).FullName, CsToDb.New(DbType.AnsiString, "char", "char(1)", false, null, '\0') },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { typeof(Guid).FullName, CsToDb.New(DbType.Guid, "character", "character(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(DbType.Guid, "character", "character(36)", false, true, null) },
 | 
					                { typeof(Guid).FullName, CsToDb.New(DbType.Guid, "character", "character(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(DbType.Guid, "character", "character(36)", false, true, null) },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user