Update Doris database

This commit is contained in:
sunkaixuan 2024-06-30 21:37:27 +08:00
parent 1aaa865940
commit 2c8bc264b3
2 changed files with 60 additions and 1 deletions

View File

@ -7,6 +7,22 @@ namespace SqlSugar
internal class DorisHelper internal class DorisHelper
{ {
public static List<DbColumnInfo> GetColumns(List<DbColumnInfo> colums)
{
foreach (var item in colums)
{
if (item.DataType?.Contains("(") == true)
{
item.DataType = item.DataType.Substring(0, item.DataType.IndexOf("("));
}
if (item.DataType == "tinyint" && item.Length == 4)
{
item.Length = 1;
}
}
return colums;
}
public static bool IsDoris(ISqlSugarClient context) public static bool IsDoris(ISqlSugarClient context)
{ {
return context.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Doris; return context.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Doris;

View File

@ -40,6 +40,10 @@ namespace SqlSugar
LOCATE( 'unsigned',COLUMN_type ) >0 as IsUnsigned LOCATE( 'unsigned',COLUMN_type ) >0 as IsUnsigned
FROM FROM
Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY ordinal_position"; Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY ordinal_position";
if (DorisHelper.IsDoris(this.Context))
{
sql = sql.Replace("CASE WHEN left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1)='' THEN COLUMN_TYPE ELSE left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1) END AS DataType", "COLUMN_TYPE AS DataType ");
}
return sql; return sql;
} }
} }
@ -284,6 +288,17 @@ namespace SqlSugar
#endregion #endregion
#region Methods #region Methods
public override List<DbColumnInfo> GetColumnInfosByTableName(string tableName, bool isCache = true)
{
if (DorisHelper.IsDoris(this.Context))
{
var colums = base.GetColumnInfosByTableName(tableName, isCache);
colums= DorisHelper.GetColumns(colums);
return colums;
}
return base.GetColumnInfosByTableName(tableName, isCache);
}
public override bool SetAutoIncrementInitialValue(string tableName, int initialValue) public override bool SetAutoIncrementInitialValue(string tableName, int initialValue)
{ {
initialValue++; initialValue++;
@ -579,9 +594,14 @@ WHERE EVENT_OBJECT_TABLE = '" + tableName + "'");
public override bool UpdateColumn(string tableName, DbColumnInfo column) public override bool UpdateColumn(string tableName, DbColumnInfo column)
{ {
ConvertCreateColumnInfo(column); ConvertCreateColumnInfo(column);
if (DorisHelper.IsDoris(this.Context))
{
return DorisUpadteColumns(ref tableName, column);
}
return base.UpdateColumn(tableName, column); return base.UpdateColumn(tableName, column);
} }
protected override string GetSize(DbColumnInfo item) protected override string GetSize(DbColumnInfo item)
{ {
string dataSize = null; string dataSize = null;
@ -712,6 +732,29 @@ WHERE EVENT_OBJECT_TABLE = '" + tableName + "'");
#endregion #endregion
#region Helper #region Helper
private bool DorisUpadteColumns(ref string tableName, DbColumnInfo column)
{
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
var columName = this.SqlBuilder.GetTranslationTableName(column.DbColumnName);
string sql = GetUpdateColumnSql(tableName, column)
.Replace("change column", " MODIFY COLUMN")
.Replace("DEFAULT NULL ", " NULL ")
.Replace($"{columName} {columName}", columName);
try
{
this.Context.Ado.ExecuteCommand(sql);
}
catch (Exception ex)
{
if (ex.Message == "errCode = 2, detailMessage = Nothing is changed. please check your alter stmt.")
{
return true;
}
throw ex;
}
return true;
}
private bool ContainsCharSet(string charset) private bool ContainsCharSet(string charset)
{ {
if (this.Context.CurrentConnectionConfig.ConnectionString.ObjToString().ToLower().Contains(charset)) if (this.Context.CurrentConnectionConfig.ConnectionString.ObjToString().ToLower().Contains(charset))