- 修复 StringLength 设置后 IsNullable = false 无生效的问题;

This commit is contained in:
2881099 2021-12-28 17:15:04 +08:00
parent 60f876db92
commit 864eca6d72

View File

@ -266,12 +266,13 @@ namespace FreeSql.Internal
{ {
int strlen = colattr.StringLength; int strlen = colattr.StringLength;
var charPatten = @"(CHARACTER|CHAR2|CHAR)\s*(\([^\)]*\))?"; var charPatten = @"(CHARACTER|CHAR2|CHAR)\s*(\([^\)]*\))?";
var strNotNull = colattr.IsNullable == false ? " NOT NULL" : "";
switch (common._orm.Ado.DataType) switch (common._orm.Ado.DataType)
{ {
case DataType.MySql: case DataType.MySql:
case DataType.OdbcMySql: case DataType.OdbcMySql:
if (strlen == -2) colattr.DbType = "LONGTEXT"; if (strlen == -2) colattr.DbType = $"LONGTEXT{strNotNull}";
else if (strlen < 0) colattr.DbType = "TEXT"; else if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.SqlServer: case DataType.SqlServer:
@ -284,15 +285,15 @@ namespace FreeSql.Internal
case DataType.KingbaseES: case DataType.KingbaseES:
case DataType.OdbcKingbaseES: case DataType.OdbcKingbaseES:
case DataType.ShenTong: case DataType.ShenTong:
if (strlen < 0) colattr.DbType = "TEXT"; if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.Oracle: case DataType.Oracle:
if (strlen < 0) colattr.DbType = "NCLOB"; //v1.3.2+ https://github.com/dotnetcore/FreeSql/issues/259 if (strlen < 0) colattr.DbType = $"NCLOB{strNotNull}"; //v1.3.2+ https://github.com/dotnetcore/FreeSql/issues/259
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.Dameng: case DataType.Dameng:
if (strlen < 0) colattr.DbType = "TEXT"; if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.OdbcOracle: case DataType.OdbcOracle:
@ -301,21 +302,21 @@ namespace FreeSql.Internal
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.Sqlite: case DataType.Sqlite:
if (strlen < 0) colattr.DbType = "TEXT"; if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.MsAccess: case DataType.MsAccess:
charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?"; charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?";
if (strlen < 0) colattr.DbType = "LONGTEXT"; if (strlen < 0) colattr.DbType = $"LONGTEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.Firebird: case DataType.Firebird:
charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?"; charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?";
if (strlen < 0) colattr.DbType = "BLOB SUB_TYPE 1"; if (strlen < 0) colattr.DbType = $"BLOB SUB_TYPE 1{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
case DataType.GBase: case DataType.GBase:
if (strlen < 0) colattr.DbType = "TEXT"; if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
break; break;
} }
@ -325,12 +326,13 @@ namespace FreeSql.Internal
{ {
int strlen = colattr.StringLength; int strlen = colattr.StringLength;
var bytePatten = @"(VARBINARY|BINARY|BYTEA)\s*(\([^\)]*\))?"; var bytePatten = @"(VARBINARY|BINARY|BYTEA)\s*(\([^\)]*\))?";
var strNotNull = colattr.IsNullable == false ? " NOT NULL" : "";
switch (common._orm.Ado.DataType) switch (common._orm.Ado.DataType)
{ {
case DataType.MySql: case DataType.MySql:
case DataType.OdbcMySql: case DataType.OdbcMySql:
if (strlen == -2) colattr.DbType = "LONGBLOB"; if (strlen == -2) colattr.DbType = $"LONGBLOB{strNotNull}";
else if (strlen < 0) colattr.DbType = "BLOB"; else if (strlen < 0) colattr.DbType = $"BLOB{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})");
break; break;
case DataType.SqlServer: case DataType.SqlServer:
@ -343,30 +345,30 @@ namespace FreeSql.Internal
case DataType.KingbaseES: case DataType.KingbaseES:
case DataType.OdbcKingbaseES: case DataType.OdbcKingbaseES:
case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中) case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中)
colattr.DbType = "BYTEA"; //变长二进制串 colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串
break; break;
case DataType.Oracle: case DataType.Oracle:
colattr.DbType = "BLOB"; colattr.DbType = $"BLOB{strNotNull}";
break; break;
case DataType.Dameng: case DataType.Dameng:
colattr.DbType = "BLOB"; colattr.DbType = $"BLOB{strNotNull}";
break; break;
case DataType.OdbcOracle: case DataType.OdbcOracle:
case DataType.OdbcDameng: case DataType.OdbcDameng:
colattr.DbType = "BLOB"; colattr.DbType = $"BLOB{strNotNull}";
break; break;
case DataType.Sqlite: case DataType.Sqlite:
colattr.DbType = "BLOB"; colattr.DbType = $"BLOB{strNotNull}";
break; break;
case DataType.MsAccess: case DataType.MsAccess:
if (strlen < 0) colattr.DbType = "BLOB"; if (strlen < 0) colattr.DbType = $"BLOB{strNotNull}";
else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})"); else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})");
break; break;
case DataType.Firebird: case DataType.Firebird:
colattr.DbType = "BLOB"; colattr.DbType = $"BLOB{strNotNull}";
break; break;
case DataType.GBase: case DataType.GBase:
colattr.DbType = "BYTE"; colattr.DbType = $"BYTE{strNotNull}";
break; break;
} }
} }