- 修复 Duckdb CodeFirst Index 与 Id Identity冲突问题

This commit is contained in:
d4ilys
2025-05-13 11:30:55 +08:00
parent 7142aad822
commit a672b430e3

View File

@@ -116,6 +116,7 @@ namespace FreeSql.Duckdb
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
var seqcols = new List<NativeTuple<ColumnInfo, string[], bool>>(); //序列 var seqcols = new List<NativeTuple<ColumnInfo, string[], bool>>(); //序列
var indexSb = new StringBuilder();
foreach (var obj in objects) foreach (var obj in objects)
{ {
if (sb.Length > 0) sb.Append("\r\n"); if (sb.Length > 0) sb.Append("\r\n");
@@ -185,20 +186,20 @@ namespace FreeSql.Duckdb
//创建表的索引 //创建表的索引
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
sb.Append("CREATE "); indexSb.Append("CREATE ");
if (uk.IsUnique) if (uk.IsUnique)
sb.Append("UNIQUE "); indexSb.Append("UNIQUE ");
sb.Append("INDEX "); indexSb.Append("INDEX ");
sb.Append(uk.Name).Append(" ON ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(createTableName, tbname[1]))); indexSb.Append(uk.Name).Append(" ON ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(createTableName, tbname[1])));
sb.Append("("); indexSb.Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); indexSb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
if (tbcol.IsDesc) if (tbcol.IsDesc)
sb.Append(" DESC"); indexSb.Append(" DESC");
sb.Append(", "); indexSb.Append(", ");
} }
sb.Remove(sb.Length - 2, 2).Append(");\r\n"); indexSb.Remove(indexSb.Length - 2, 2).Append(");\r\n");
} }
//备注 //备注
foreach (var tbcol in tb.ColumnsByPosition) foreach (var tbcol in tb.ColumnsByPosition)
@@ -221,6 +222,7 @@ namespace FreeSql.Duckdb
else else
tboldname = null; //如果新表已经存在,不走改表名逻辑 tboldname = null; //如果新表已经存在,不走改表名逻辑
} }
foreach (var seqcol in seqcols) foreach (var seqcol in seqcols)
{ {
var tbname = seqcol.Item2; var tbname = seqcol.Item2;
@@ -236,6 +238,9 @@ namespace FreeSql.Duckdb
//sb.Append(" SELECT case when max(").Append(colname2).Append(") is null then 0 else setval('").Append(seqname).Append("', max(").Append(colname2).Append(")) end FROM ").Append(tbname2).Append(";\r\n"); //sb.Append(" SELECT case when max(").Append(colname2).Append(") is null then 0 else setval('").Append(seqname).Append("', max(").Append(colname2).Append(")) end FROM ").Append(tbname2).Append(";\r\n");
} }
} }
sb.Append(indexSb);
return sb.Length == 0 ? null : sb.ToString(); return sb.Length == 0 ? null : sb.ToString();
} }
} }