- 增加 创建表时指定字段位置,如:[Column(Position = 1],可为负数即反方向位置;

This commit is contained in:
28810 2019-09-04 22:52:05 +08:00
parent 4d2406aa1e
commit 6e75a8cebc
13 changed files with 103 additions and 36 deletions

View File

@ -30,6 +30,7 @@ namespace FreeSql
/// <summary> /// <summary>
/// 主键 /// 主键
/// </summary> /// </summary>
[Column(Position = 1)]
public virtual TKey Id { get; set; } public virtual TKey Id { get; set; }
/// <summary> /// <summary>

View File

@ -42,18 +42,22 @@ namespace FreeSql
/// <summary> /// <summary>
/// 创建时间 /// 创建时间
/// </summary> /// </summary>
[Column(Position = -4)]
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
/// <summary> /// <summary>
/// 更新时间 /// 更新时间
/// </summary> /// </summary>
[Column(Position = -3)]
public DateTime UpdateTime { get; set; } public DateTime UpdateTime { get; set; }
/// <summary> /// <summary>
/// 逻辑删除 /// 逻辑删除
/// </summary> /// </summary>
[Column(Position = -2)]
public bool IsDeleted { get; set; } public bool IsDeleted { get; set; }
/// <summary> /// <summary>
/// 排序 /// 排序
/// </summary> /// </summary>
[Column(Position = -1)]
public int Sort { get; set; } public int Sort { get; set; }
/// <summary> /// <summary>

View File

@ -79,5 +79,17 @@ namespace FreeSql.DataAnnotations
/// 类型映射,比如:可将 enum 属性映射成 typeof(string) /// 类型映射,比如:可将 enum 属性映射成 typeof(string)
/// </summary> /// </summary>
public Type MapType { get; set; } public Type MapType { get; set; }
}
internal short? _Position;
/// <summary>
/// 创建表时字段位置,规则如下:
/// <para></para>
/// &gt;0时排前面1,2,3...
/// <para></para>
/// =0时排中间(默认)
/// <para></para>
/// &lt;0时排后面...-3,-2,-1
/// </summary>
public short Position { get => _Position ?? 0; set => _Position = value; }
}
} }

View File

@ -89,11 +89,28 @@ namespace FreeSql.DataAnnotations
/// <summary> /// <summary>
/// 类型映射,比如:可将 enum 属性映射成 typeof(string) /// 类型映射,比如:可将 enum 属性映射成 typeof(string)
/// </summary> /// </summary>
/// <param name="type"></param> /// <param name="value"></param>
/// <returns></returns> /// <returns></returns>
public ColumnFluent MapType(Type type) public ColumnFluent MapType(Type value)
{ {
_column.MapType = type; _column.MapType = value;
return this;
}
/// <summary>
/// 创建表时字段位置,规则如下:
/// <para></para>
/// &gt;0时排前面
/// <para></para>
/// =0时排中间(默认)
/// <para></para>
/// &lt;0时排后面
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public ColumnFluent Position(short value)
{
_column.Position = value;
return this; return this;
} }
} }

View File

@ -59,6 +59,17 @@
类型映射,比如:可将 enum 属性映射成 typeof(string) 类型映射,比如:可将 enum 属性映射成 typeof(string)
</summary> </summary>
</member> </member>
<member name="P:FreeSql.DataAnnotations.ColumnAttribute.Position">
<summary>
创建表时字段位置,规则如下:
<para></para>
&gt;0时排前面1,2,3...
<para></para>
=0时排中间(默认)
<para></para>
&lt;0时排后面...-3,-2,-1
</summary>
</member>
<member name="M:FreeSql.DataAnnotations.ColumnFluent.Name(System.String)"> <member name="M:FreeSql.DataAnnotations.ColumnFluent.Name(System.String)">
<summary> <summary>
数据库列名 数据库列名
@ -110,7 +121,20 @@
<summary> <summary>
类型映射,比如:可将 enum 属性映射成 typeof(string) 类型映射,比如:可将 enum 属性映射成 typeof(string)
</summary> </summary>
<param name="type"></param> <param name="value"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DataAnnotations.ColumnFluent.Position(System.Int16)">
<summary>
创建表时字段位置,规则如下:
<para></para>
&gt;0时排前面
<para></para>
=0时排中间(默认)
<para></para>
&lt;0时排后面
</summary>
<param name="value"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="P:FreeSql.DataAnnotations.NavigateAttribute.Bind"> <member name="P:FreeSql.DataAnnotations.NavigateAttribute.Bind">

View File

@ -126,6 +126,7 @@ namespace FreeSql.Internal
if (trycol._IsVersion != null) attr._IsVersion = trycol.IsVersion; if (trycol._IsVersion != null) attr._IsVersion = trycol.IsVersion;
if (trycol._Uniques != null) attr._Uniques = trycol._Uniques; if (trycol._Uniques != null) attr._Uniques = trycol._Uniques;
if (trycol.MapType != null) attr.MapType = trycol.MapType; if (trycol.MapType != null) attr.MapType = trycol.MapType;
if (trycol._Position != null) attr._Position = trycol.Position;
if (trycol.DbDefautValue != null) attr.DbDefautValue = trycol.DbDefautValue; if (trycol.DbDefautValue != null) attr.DbDefautValue = trycol.DbDefautValue;
} }
var attrs = proto.GetCustomAttributes(typeof(ColumnAttribute), false); var attrs = proto.GetCustomAttributes(typeof(ColumnAttribute), false);
@ -143,6 +144,7 @@ namespace FreeSql.Internal
if (tryattr._IsVersion != null) attr._IsVersion = tryattr.IsVersion; if (tryattr._IsVersion != null) attr._IsVersion = tryattr.IsVersion;
if (tryattr._Uniques != null) attr._Uniques = tryattr._Uniques; if (tryattr._Uniques != null) attr._Uniques = tryattr._Uniques;
if (tryattr.MapType != null) attr.MapType = tryattr.MapType; if (tryattr.MapType != null) attr.MapType = tryattr.MapType;
if (tryattr._Position != null) attr._Position = tryattr.Position;
if (tryattr.DbDefautValue != null) attr.DbDefautValue = tryattr.DbDefautValue; if (tryattr.DbDefautValue != null) attr.DbDefautValue = tryattr.DbDefautValue;
} }
ColumnAttribute ret = null; ColumnAttribute ret = null;
@ -156,6 +158,7 @@ namespace FreeSql.Internal
if (attr._IsVersion != null) ret = attr; if (attr._IsVersion != null) ret = attr;
if (attr._Uniques != null) ret = attr; if (attr._Uniques != null) ret = attr;
if (attr.MapType != null) ret = attr; if (attr.MapType != null) ret = attr;
if (attr._Position != null) ret = attr;
if (attr.DbDefautValue != null) ret = attr; if (attr.DbDefautValue != null) ret = attr;
if (ret != null && ret.MapType == null) ret.MapType = proto.PropertyType; if (ret != null && ret.MapType == null) ret.MapType = proto.PropertyType;
return ret; return ret;

View File

@ -14,6 +14,7 @@ namespace FreeSql.Internal.Model
public Dictionary<string, ColumnInfo> Columns { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase); public Dictionary<string, ColumnInfo> Columns { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase);
public Dictionary<string, ColumnInfo> ColumnsByCs { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase); public Dictionary<string, ColumnInfo> ColumnsByCs { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase);
public Dictionary<string, ColumnInfo> ColumnsByCsIgnore { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase); public Dictionary<string, ColumnInfo> ColumnsByCsIgnore { get; set; } = new Dictionary<string, ColumnInfo>(StringComparer.CurrentCultureIgnoreCase);
public ColumnInfo[] ColumnsByPosition { get; set; }
public ColumnInfo[] Primarys { get; set; } public ColumnInfo[] Primarys { get; set; }
public Dictionary<string, List<ColumnInfo>> Uniques { get; set; } public Dictionary<string, List<ColumnInfo>> Uniques { get; set; }
public string CsName { get; set; } public string CsName { get; set; }

View File

@ -70,6 +70,7 @@ namespace FreeSql.Internal
var propsLazy = new List<(PropertyInfo, bool, bool)>(); var propsLazy = new List<(PropertyInfo, bool, bool)>();
var propsNavObjs = new List<PropertyInfo>(); var propsNavObjs = new List<PropertyInfo>();
var propsComment = CommonUtils.GetProperyCommentBySummary(entity); var propsComment = CommonUtils.GetProperyCommentBySummary(entity);
var columnsList = new List<ColumnInfo>();
foreach (var p in trytb.Properties.Values) foreach (var p in trytb.Properties.Values)
{ {
var setMethod = trytb.Type.GetMethod($"set_{p.Name}"); var setMethod = trytb.Type.GetMethod($"set_{p.Name}");
@ -169,6 +170,7 @@ namespace FreeSql.Internal
trytb.Columns.Add(colattr.Name, col); trytb.Columns.Add(colattr.Name, col);
trytb.ColumnsByCs.Add(p.Name, col); trytb.ColumnsByCs.Add(p.Name, col);
columnsList.Add(col);
} }
trytb.VersionColumn = trytb.Columns.Values.Where(a => a.Attribute.IsVersion == true).LastOrDefault(); trytb.VersionColumn = trytb.Columns.Values.Where(a => a.Attribute.IsVersion == true).LastOrDefault();
if (trytb.VersionColumn != null) if (trytb.VersionColumn != null)
@ -241,6 +243,9 @@ namespace FreeSql.Internal
} }
var allunique = trytb.Columns.Values.Where(a => a.Attribute._Uniques != null).SelectMany(a => a.Attribute._Uniques).Distinct(); var allunique = trytb.Columns.Values.Where(a => a.Attribute._Uniques != null).SelectMany(a => a.Attribute._Uniques).Distinct();
trytb.Uniques = allunique.ToDictionary(a => a, a => trytb.Columns.Values.Where(b => b.Attribute._Uniques != null && b.Attribute._Uniques.Contains(a)).ToList()); trytb.Uniques = allunique.ToDictionary(a => a, a => trytb.Columns.Values.Where(b => b.Attribute._Uniques != null && b.Attribute._Uniques.Contains(a)).ToList());
trytb.ColumnsByPosition = columnsList.Where(a => a.Attribute.Position > 0).OrderBy(a => a.Attribute.Position)
.Concat(columnsList.Where(a => a.Attribute.Position == 0))
.Concat(columnsList.Where(a => a.Attribute.Position < 0).OrderBy(a => a.Attribute.Position)).ToArray();
tbc.AddOrUpdate(entity, trytb, (oldkey, oldval) => trytb); tbc.AddOrUpdate(entity, trytb, (oldkey, oldval) => trytb);
#region virtual #region virtual

View File

@ -132,7 +132,7 @@ namespace FreeSql.MySql
{ {
//创建表 //创建表
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -197,7 +197,7 @@ where a.table_schema in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
if (istmpatler == false) if (istmpatler == false)
{ {
var existsPrimary = ExecuteScalar(tbname[0], _commonUtils.FormatSql("select 1 from information_schema.key_column_usage where table_schema={0} and table_name={1} and constraint_name = 'PRIMARY' limit 1", tbname)); var existsPrimary = ExecuteScalar(tbname[0], _commonUtils.FormatSql("select 1 from information_schema.key_column_usage where table_schema={0} and table_name={1} and constraint_name = 'PRIMARY' limit 1", tbname));
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var isIdentityChanged = tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1; var isIdentityChanged = tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1;
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
@ -263,7 +263,7 @@ where a.constraint_schema IN ({0}) and a.table_name IN ({1})", tboldname ?? tbna
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}"); var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
//创建临时表 //创建临时表
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -286,10 +286,10 @@ where a.constraint_schema IN ({0}) and a.table_name IN ({1})", tboldname ?? tbna
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) Engine=InnoDB;\r\n"); sb.Append("\r\n) Engine=InnoDB;\r\n");
sb.Append("INSERT INTO ").Append(tmptablename).Append(" ("); sb.Append("INSERT INTO ").Append(tmptablename).Append(" (");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT "); sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var insertvalue = "NULL"; var insertvalue = "NULL";
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||

View File

@ -110,7 +110,7 @@ namespace FreeSql.Oracle
{ {
//创建表 //创建表
sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( "); sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(","); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true)); if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@ -131,7 +131,7 @@ namespace FreeSql.Oracle
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) \r\nLOGGING \r\nNOCOMPRESS \r\nNOCACHE\r\n';\r\n"); sb.Append("\r\n) \r\nLOGGING \r\nNOCOMPRESS \r\nNOCACHE\r\n';\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
sb.Append("execute immediate 'COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment).Replace("'", "''")).Append("';\r\n"); sb.Append("execute immediate 'COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment).Replace("'", "''")).Append("';\r\n");
@ -182,7 +182,7 @@ where a.owner={{0}} and a.table_name={{1}}", tboldname ?? tbname);
if (istmpatler == false) if (istmpatler == false)
{ {
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var dbtypeNoneNotNull = Regex.Replace(tbcol.Attribute.DbType, @"NOT\s+NULL", "NULL"); var dbtypeNoneNotNull = Regex.Replace(tbcol.Attribute.DbType, @"NOT\s+NULL", "NULL");
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
@ -264,7 +264,7 @@ and a.owner in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}"); var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}");
//创建临时表 //创建临时表
sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" ( "); sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(","); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true)); if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@ -285,16 +285,16 @@ and a.owner in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) LOGGING \r\nNOCOMPRESS \r\nNOCACHE\r\n';\r\n"); sb.Append("\r\n) LOGGING \r\nNOCOMPRESS \r\nNOCACHE\r\n';\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
sb.Append("execute immediate 'COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment).Replace("'", "''")).Append("';\r\n"); sb.Append("execute immediate 'COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment).Replace("'", "''")).Append("';\r\n");
} }
sb.Append("execute immediate 'INSERT INTO ").Append(tmptablename).Append(" ("); sb.Append("execute immediate 'INSERT INTO ").Append(tmptablename).Append(" (");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT "); sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var insertvalue = "NULL"; var insertvalue = "NULL";
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||

View File

@ -151,7 +151,7 @@ namespace FreeSql.PostgreSQL
{ {
//创建表 //创建表
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(","); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true)); if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@ -171,7 +171,7 @@ namespace FreeSql.PostgreSQL
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) WITH (OIDS=FALSE);\r\n"); sb.Append("\r\n) WITH (OIDS=FALSE);\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
sb.Append("COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment)).Append(";\r\n"); sb.Append("COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment)).Append(";\r\n");
@ -242,7 +242,7 @@ where ns.nspname = {0} and c.relname = {1}", tboldname ?? tbname);
if (istmpatler == false) if (istmpatler == false)
{ {
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
string.IsNullOrEmpty(tbcol.Attribute.OldName) == false && tbstruct.TryGetValue(tbcol.Attribute.OldName, out tbstructcol)) string.IsNullOrEmpty(tbcol.Attribute.OldName) == false && tbstruct.TryGetValue(tbcol.Attribute.OldName, out tbstructcol))
@ -311,7 +311,7 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}"); var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
//创建临时表 //创建临时表
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(","); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true)); if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@ -331,16 +331,16 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) WITH (OIDS=FALSE);\r\n"); sb.Append("\r\n) WITH (OIDS=FALSE);\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
sb.Append("COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment)).Append(";\r\n"); sb.Append("COMMENT ON COLUMN ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}.{tbcol.Attribute.Name}")).Append(" IS ").Append(_commonUtils.FormatSql("{0}", tbcol.Comment)).Append(";\r\n");
} }
sb.Append("INSERT INTO ").Append(tmptablename).Append(" ("); sb.Append("INSERT INTO ").Append(tmptablename).Append(" (");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT "); sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var insertvalue = "NULL"; var insertvalue = "NULL";
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||

View File

@ -162,7 +162,7 @@ ELSE
//创建新表 //创建新表
sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" ( "); sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" ( ");
var pkidx = 0; var pkidx = 0;
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -188,7 +188,7 @@ ELSE
} }
sb.Remove(sb.Length - 1, 1).Append("\r\n);\r\n"); sb.Remove(sb.Length - 1, 1).Append("\r\n);\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
AddOrUpdateMS_Description(sb, tbname[1], tbname[2], tbcol.Attribute.Name, tbcol.Comment); AddOrUpdateMS_Description(sb, tbname[1], tbname[2], tbcol.Attribute.Name, tbcol.Comment);
@ -242,7 +242,7 @@ use " + database, tboldname ?? tbname);
if (istmpatler == false) if (istmpatler == false)
{ {
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
string.IsNullOrEmpty(tbcol.Attribute.OldName) == false && tbstruct.TryGetValue(tbcol.Attribute.OldName, out tbstructcol)) string.IsNullOrEmpty(tbcol.Attribute.OldName) == false && tbstruct.TryGetValue(tbcol.Attribute.OldName, out tbstructcol))
@ -321,7 +321,7 @@ use " + database, tboldname ?? tbname);
//创建临时表 //创建临时表
sb.Append("CREATE TABLE ").Append(tmptablename).Append(" ( "); sb.Append("CREATE TABLE ").Append(tmptablename).Append(" ( ");
var pkidx2 = 0; var pkidx2 = 0;
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -348,7 +348,7 @@ use " + database, tboldname ?? tbname);
} }
sb.Remove(sb.Length - 1, 1).Append("\r\n);\r\n"); sb.Remove(sb.Length - 1, 1).Append("\r\n);\r\n");
//备注 //备注
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
if (string.IsNullOrEmpty(tbcol.Comment) == false) if (string.IsNullOrEmpty(tbcol.Comment) == false)
AddOrUpdateMS_Description(sb, tbname[1], $"FreeSqlTmp_{tbname[2]}", tbcol.Attribute.Name, tbcol.Comment); AddOrUpdateMS_Description(sb, tbname[1], $"FreeSqlTmp_{tbname[2]}", tbcol.Attribute.Name, tbcol.Comment);
@ -357,10 +357,10 @@ use " + database, tboldname ?? tbname);
if (idents) sb.Append("SET IDENTITY_INSERT ").Append(tmptablename).Append(" ON;\r\n"); if (idents) sb.Append("SET IDENTITY_INSERT ").Append(tmptablename).Append(" ON;\r\n");
sb.Append("IF EXISTS(SELECT 1 FROM ").Append(tablename).Append(")\r\n"); sb.Append("IF EXISTS(SELECT 1 FROM ").Append(tablename).Append(")\r\n");
sb.Append("\tEXEC('INSERT INTO ").Append(tmptablename).Append(" ("); sb.Append("\tEXEC('INSERT INTO ").Append(tmptablename).Append(" (");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append(")\r\n\t\tSELECT "); sb.Remove(sb.Length - 2, 2).Append(")\r\n\t\tSELECT ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var insertvalue = "NULL"; var insertvalue = "NULL";
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||

View File

@ -100,7 +100,7 @@ namespace FreeSql.Sqlite
{ {
//创建表 //创建表
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -163,7 +163,7 @@ namespace FreeSql.Sqlite
if (istmpatler == false) if (istmpatler == false)
{ {
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var dbtypeNoneNotNull = Regex.Replace(tbcol.Attribute.DbType, @"NOT\s+NULL", "NULL"); var dbtypeNoneNotNull = Regex.Replace(tbcol.Attribute.DbType, @"NOT\s+NULL", "NULL");
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
@ -217,7 +217,7 @@ namespace FreeSql.Sqlite
//创建表 //创建表
isIndent = false; isIndent = false;
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( "); sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" "); sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
sb.Append(tbcol.Attribute.DbType); sb.Append(tbcol.Attribute.DbType);
@ -243,10 +243,10 @@ namespace FreeSql.Sqlite
sb.Remove(sb.Length - 1, 1); sb.Remove(sb.Length - 1, 1);
sb.Append("\r\n) \r\n;\r\n"); sb.Append("\r\n) \r\n;\r\n");
sb.Append("INSERT INTO ").Append(tmptablename).Append(" ("); sb.Append("INSERT INTO ").Append(tmptablename).Append(" (");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", "); sb.Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(", ");
sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT "); sb.Remove(sb.Length - 2, 2).Append(")\r\nSELECT ");
foreach (var tbcol in tb.Columns.Values) foreach (var tbcol in tb.ColumnsByPosition)
{ {
var insertvalue = "NULL"; var insertvalue = "NULL";
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) || if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||