- 修复 CodeFirst + AsTable + 自动迁移,导致索性名重复的问题 #366;

This commit is contained in:
28810 2020-07-12 12:34:55 +08:00
parent 9c3b5b15c4
commit 8c38922331
30 changed files with 157 additions and 90 deletions

View File

@ -238,6 +238,7 @@ namespace FreeSql.Tests.MySqlConnector
{ {
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>(); g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -134,11 +134,12 @@ namespace FreeSql.Tests.Odbc.Dameng
{ {
var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.dameng.CodeFirst.SyncStructure<AddUniquesInfo>(); g.dameng.CodeFirst.SyncStructure<AddUniquesInfo>();
g.dameng.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInf1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInf", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", true)] [Index("{tablename}_uk_group_index22", "group, index22", true)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -134,11 +134,12 @@ namespace FreeSql.Tests.Odbc.KingbaseES
{ {
var sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.kingbaseES.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.kingbaseES.CodeFirst.SyncStructure<AddUniquesInfo>(); g.kingbaseES.CodeFirst.SyncStructure<AddUniquesInfo>();
g.kingbaseES.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", true)] [Index("{tablename}_uk_group_index22", "group, index22", true)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -109,6 +109,7 @@ namespace FreeSql.Tests.Odbc.MySql
{ {
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>(); g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -85,11 +85,12 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
{ {
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.pgsql.CodeFirst.SyncStructure<AddUniquesInfo>(); g.pgsql.CodeFirst.SyncStructure<AddUniquesInfo>();
g.pgsql.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", true)] [Index("{tablename}_uk_group_index22", "group, index22", true)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -118,6 +118,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
{ {
var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.sqlserver.CodeFirst.SyncStructure<AddUniquesInfo>(); g.sqlserver.CodeFirst.SyncStructure<AddUniquesInfo>();
g.sqlserver.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -204,11 +204,12 @@ namespace FreeSql.Tests.Dameng
{ {
var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.dameng.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.dameng.CodeFirst.SyncStructure<AddUniquesInfo>(); g.dameng.CodeFirst.SyncStructure<AddUniquesInfo>();
g.dameng.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInf1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInf", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", true)] [Index("{tablename}_uk_group_index22", "group, index22", true)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -237,6 +237,7 @@ namespace FreeSql.Tests.MySql
{ {
var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.mysql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>(); g.mysql.CodeFirst.SyncStructure<AddUniquesInfo>();
g.mysql.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -234,6 +234,7 @@ namespace FreeSql.Tests.Oracle
{ {
var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.oracle.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.oracle.CodeFirst.SyncStructure<AddUniquesInfo>(); g.oracle.CodeFirst.SyncStructure<AddUniquesInfo>();
//g.oracle.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -125,11 +125,12 @@ namespace FreeSql.Tests.PostgreSQL
{ {
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.pgsql.CodeFirst.SyncStructure<AddUniquesInfo>(); g.pgsql.CodeFirst.SyncStructure<AddUniquesInfo>();
g.pgsql.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", false)] [Index("{tablename}_uk_group_index22", "group, index22", false)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -90,11 +90,12 @@ namespace FreeSql.Tests.ShenTong
{ {
var sql = g.shentong.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.shentong.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.shentong.CodeFirst.SyncStructure<AddUniquesInfo>(); g.shentong.CodeFirst.SyncStructure<AddUniquesInfo>();
g.shentong.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group, index22", false)] [Index("{tablename}_uk_group_index22", "group, index22", false)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -154,6 +154,7 @@ namespace FreeSql.Tests.SqlServer
{ {
var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.sqlserver.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.sqlserver.CodeFirst.SyncStructure<AddUniquesInfo>(); g.sqlserver.CodeFirst.SyncStructure<AddUniquesInfo>();
g.sqlserver.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")] [Table(Name = "AddUniquesInfo", OldName = "AddUniquesInfo2")]
[Index("uk_phone", "phone", true)] [Index("uk_phone", "phone", true)]

View File

@ -146,11 +146,12 @@ namespace FreeSql.Tests.Sqlite
{ {
var sql = g.sqlite.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>(); var sql = g.sqlite.CodeFirst.GetComparisonDDLStatements<AddUniquesInfo>();
g.sqlite.CodeFirst.SyncStructure<AddUniquesInfo>(); g.sqlite.CodeFirst.SyncStructure<AddUniquesInfo>();
g.sqlite.CodeFirst.SyncStructure(typeof(AddUniquesInfo), "AddUniquesInfo1");
} }
[Table(Name = "AddUniquesInfo2", OldName = "AddUniquesInfo")] [Table(Name = "AddUniquesInfo2", OldName = "AddUniquesInfo")]
[Index("uk_phone", "phone", true)] [Index("{tablename}_uk_phone", "phone", true)]
[Index("uk_group_index", "group,index", true)] [Index("{tablename}_uk_group_index", "group,index", true)]
[Index("uk_group_index22", "group desc, index22", true)] [Index("{tablename}_uk_group_index22", "group desc, index22", true)]
class AddUniquesInfo class AddUniquesInfo
{ {
public Guid id { get; set; } public Guid id { get; set; }

View File

@ -4,14 +4,28 @@ using System.Text;
namespace FreeSql.DataAnnotations namespace FreeSql.DataAnnotations
{ {
/// <summary>
/// 索引设置,如:[Index("{tablename}_idx_01", "name")]
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class IndexAttribute : Attribute public class IndexAttribute : Attribute
{ {
/// <summary>
/// 索引设置,如:[Index("{tablename}_idx_01", "name")]
/// </summary>
/// <param name="name">索引名<para></para>v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)</param>
/// <param name="fields">索引字段为属性名以逗号分隔Create_time ASC, Title ASC</param>
public IndexAttribute(string name, string fields) public IndexAttribute(string name, string fields)
{ {
this.Name = name; this.Name = name;
this.Fields = fields; this.Fields = fields;
} }
/// <summary>
/// 索引设置,如:[Index("{tablename}_idx_01", "name", true)]
/// </summary>
/// <param name="name">索引名<para></para>v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)</param>
/// <param name="fields">索引字段为属性名以逗号分隔Create_time ASC, Title ASC</param>
/// <param name="isUnique">是否唯一</param>
public IndexAttribute(string name, string fields, bool isUnique) public IndexAttribute(string name, string fields, bool isUnique)
{ {
this.Name = name; this.Name = name;
@ -19,7 +33,8 @@ namespace FreeSql.DataAnnotations
this.IsUnique = isUnique; this.IsUnique = isUnique;
} }
/// <summary> /// <summary>
/// 索引名 /// 索引名<para></para>
/// v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
/// </summary> /// </summary>
public string Name { get; set; } public string Name { get; set; }
/// <summary> /// <summary>

View File

@ -274,9 +274,30 @@
<param name="exp"></param> <param name="exp"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="T:FreeSql.DataAnnotations.IndexAttribute">
<summary>
索引设置,如:[Index("{tablename}_idx_01", "name")]
</summary>
</member>
<member name="M:FreeSql.DataAnnotations.IndexAttribute.#ctor(System.String,System.String)">
<summary>
索引设置,如:[Index("{tablename}_idx_01", "name")]
</summary>
<param name="name">索引名<para></para>v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)</param>
<param name="fields">索引字段为属性名以逗号分隔Create_time ASC, Title ASC</param>
</member>
<member name="M:FreeSql.DataAnnotations.IndexAttribute.#ctor(System.String,System.String,System.Boolean)">
<summary>
索引设置,如:[Index("{tablename}_idx_01", "name", true)]
</summary>
<param name="name">索引名<para></para>v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)</param>
<param name="fields">索引字段为属性名以逗号分隔Create_time ASC, Title ASC</param>
<param name="isUnique">是否唯一</param>
</member>
<member name="P:FreeSql.DataAnnotations.IndexAttribute.Name"> <member name="P:FreeSql.DataAnnotations.IndexAttribute.Name">
<summary> <summary>
索引名 索引名<para></para>
v1.7.0 增加占位符 {TableName} 表名区分索引名 (解决 AsTable 分表 CodeFirst 导致索引名重复的问题)
</summary> </summary>
</member> </member>
<member name="P:FreeSql.DataAnnotations.IndexAttribute.Fields"> <member name="P:FreeSql.DataAnnotations.IndexAttribute.Fields">

View File

@ -9,6 +9,7 @@ using System.Data.Common;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace FreeSql.Internal.CommonProvider namespace FreeSql.Internal.CommonProvider
@ -124,5 +125,7 @@ namespace FreeSql.Internal.CommonProvider
} }
public virtual int ExecuteDDLStatements(string ddl) => _orm.Ado.ExecuteNonQuery(CommandType.Text, ddl); public virtual int ExecuteDDLStatements(string ddl) => _orm.Ado.ExecuteNonQuery(CommandType.Text, ddl);
public static string ReplaceIndexName(string indexName, string tbname) => string.IsNullOrEmpty(indexName) ? indexName : Regex.Replace(indexName, @"\{\s*TableName\s*\}", tbname, RegexOptions.IgnoreCase);
} }
} }

View File

@ -149,7 +149,7 @@ namespace FreeSql.Dameng
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -282,13 +282,14 @@ and not exists(select 1 from all_constraints where index_name = a.index_name and
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append("';\r\n"); if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append("';\r\n");
sbalter.Append("execute immediate 'CREATE "); sbalter.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -373,7 +374,7 @@ and not exists(select 1 from all_constraints where index_name = a.index_name and
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -139,13 +139,14 @@ namespace FreeSql.MsAccess
}; };
Action<string> createTableIndex = tn => Action<string> createTableIndex = tn =>
{ {
var oldtn = tn;
tn = _commonUtils.QuoteSqlName(tn); tn = _commonUtils.QuoteSqlName(tn);
//创建表的索引 //创建表的索引
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tn).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, oldtn))).Append(" ON ").Append(tn).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -379,7 +380,8 @@ namespace FreeSql.MsAccess
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
istmpatler = true; istmpatler = true;
} }

View File

@ -167,7 +167,7 @@ namespace FreeSql.MySql
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -282,13 +282,14 @@ where a.table_schema IN ({0}) and a.table_name IN ({1}) and a.index_name <> 'PRI
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -364,7 +365,7 @@ where a.table_schema IN ({0}) and a.table_name IN ({1}) and a.index_name <> 'PRI
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -150,7 +150,7 @@ namespace FreeSql.Odbc.Dameng
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -283,13 +283,14 @@ and not exists(select 1 from all_constraints where index_name = a.index_name and
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append("';\r\n"); if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append("';\r\n");
sbalter.Append("execute immediate 'CREATE "); sbalter.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -374,7 +375,7 @@ and not exists(select 1 from all_constraints where index_name = a.index_name and
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -138,7 +138,7 @@ namespace FreeSql.Odbc.KingbaseES
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -272,13 +272,14 @@ where ns.nspname in ({0}) and d.relname in ({1}) and a.indisprimary = 'f'", tbol
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -368,7 +369,7 @@ where sys_namespace.nspname={0} and sys_class.relname={1} and sys_constraint.con
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -160,7 +160,7 @@ namespace FreeSql.Odbc.MySql
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -275,13 +275,14 @@ where a.table_schema IN ({0}) and a.table_name IN ({1}) and a.index_name <> 'PRI
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[0], tbname[1])).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -357,7 +358,7 @@ where a.table_schema IN ({0}) and a.table_name IN ({1}) and a.index_name <> 'PRI
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -150,7 +150,7 @@ namespace FreeSql.Odbc.Oracle
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -281,13 +281,14 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append("';\r\n"); if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append("';\r\n");
sbalter.Append("execute immediate 'CREATE "); sbalter.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -370,7 +371,7 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -150,7 +150,7 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -284,13 +284,14 @@ where ns.nspname in ({{0}}) and d.relname in ({{1}}) and a.indisprimary = 'f'",
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && ((a[2] == "1") == b.IsDesc || is96 == false)).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && ((a[2] == "1") == b.IsDesc || is96 == false)).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -380,7 +381,7 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -230,7 +230,7 @@ ELSE
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -342,13 +342,14 @@ use [" + database + "];", tboldname ?? tbname);
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -450,7 +451,7 @@ use [" + database + "];", tboldname ?? tbname);
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -151,7 +151,7 @@ namespace FreeSql.Oracle
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -282,13 +282,14 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append("';\r\n"); if (dsukfind1.Any()) sbalter.Append("execute immediate 'DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append("';\r\n");
sbalter.Append("execute immediate 'CREATE "); sbalter.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -371,7 +372,7 @@ and not exists(select 1 from all_constraints where constraint_name = a.index_nam
{ {
sb.Append("execute immediate 'CREATE "); sb.Append("execute immediate 'CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -185,7 +185,7 @@ namespace FreeSql.PostgreSQL
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -319,13 +319,14 @@ where ns.nspname in ({{0}}) and d.relname in ({{1}}) and a.indisprimary = 'f'",
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && ((a[2] == "1") == b.IsDesc || is96 == false)).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && ((a[2] == "1") == b.IsDesc || is96 == false)).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -415,7 +416,7 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -150,7 +150,7 @@ namespace FreeSql.ShenTong
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -285,13 +285,14 @@ where ns.nspname in ({0}) and d.relname in ({1}) and a.indisprimary = 'f'", tbol
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => uk.Columns.Where(b => (a[3] == "1") == uk.IsUnique && string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -381,7 +382,7 @@ where sys_namespace.nspname={0} and sys_class.relname={1} and sys_constraint.con
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -229,7 +229,7 @@ ELSE
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(createTableName).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[2]))).Append(" ON ").Append(createTableName).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -341,13 +341,14 @@ use [" + database + "];", tboldname ?? tbname);
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[2]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
{ {
if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append(";\r\n"); if (dsukfind1.Any()) sbalter.Append("DROP INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append(";\r\n");
sbalter.Append("CREATE "); sbalter.Append("CREATE ");
if (uk.IsUnique) sbalter.Append("UNIQUE "); if (uk.IsUnique) sbalter.Append("UNIQUE ");
sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append("("); sbalter.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ukname)).Append(" ON ").Append(_commonUtils.QuoteSqlName(tbname[1], tbname[2])).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sbalter.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -449,7 +450,7 @@ use [" + database + "];", tboldname ?? tbname);
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tablename).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[2]))).Append(" ON ").Append(tablename).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));

View File

@ -135,7 +135,7 @@ namespace FreeSql.Sqlite
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON ").Append(tbname[1]).Append("("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON ").Append(tbname[1]).Append("(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
@ -223,7 +223,8 @@ namespace FreeSql.Sqlite
foreach (var uk in tb.Indexes) foreach (var uk in tb.Indexes)
{ {
if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue; if (string.IsNullOrEmpty(uk.Name) || uk.Columns.Any() == false) continue;
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], uk.Name, true) == 0).ToArray(); var ukname = ReplaceIndexName(uk.Name, tbname[1]);
var dsukfind1 = dsuk.Where(a => string.Compare(a[1], ukname, true) == 0).ToArray();
if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length) if (dsukfind1.Any() == false || dsukfind1.Length != uk.Columns.Length || dsukfind1.Where(a => (a[3] == "1") == uk.IsUnique && uk.Columns.Where(b => string.Compare(b.Column.Attribute.Name, a[0], true) == 0 && (a[2] == "1") == b.IsDesc).Any()).Count() != uk.Columns.Length)
istmpatler = true; istmpatler = true;
} }
@ -290,7 +291,7 @@ namespace FreeSql.Sqlite
{ {
sb.Append("CREATE "); sb.Append("CREATE ");
if (uk.IsUnique) sb.Append("UNIQUE "); if (uk.IsUnique) sb.Append("UNIQUE ");
sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(uk.Name)).Append(" ON \"").Append(tablenameOnlyTb).Append("\"("); sb.Append("INDEX ").Append(_commonUtils.QuoteSqlName(ReplaceIndexName(uk.Name, tbname[1]))).Append(" ON \"").Append(tablenameOnlyTb).Append("\"(");
foreach (var tbcol in uk.Columns) foreach (var tbcol in uk.Columns)
{ {
sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name)); sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));