///// <summary> ///// 检索应用于类型成员的自定义属性。 ///// </summary> ///// <param name="element"></param> ///// <returns></returns> //public new static BindIndexAttribute[] GetCustomAttributes(MemberInfo element) //{ // Attribute[] atts = GetCustomAttributes(element, typeof(BindIndexAttribute), true); // if (atts == null || atts.Length < 1) return null; // List<BindIndexAttribute> list = new List<BindIndexAttribute>(); // foreach (Attribute item in atts) // { // list.Add(item as BindIndexAttribute); // } // return list.ToArray(); //} /// <summary>填充索引</summary> /// <param name="index"></param> internal void Fill(IDataIndex index) { if (!String.IsNullOrEmpty(Name)) index.Name = Name; index.Unique = Unique; if (!String.IsNullOrEmpty(Columns)) { String[] ss = Columns.Split(new Char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); List<String> list = new List<string>(); foreach (String item in ss) { String column = item.Trim(); if (!String.IsNullOrEmpty(column)) list.Add(column); } index.Columns = list.ToArray(); } }
private void btnAddIndex_Click(object sender, EventArgs e) { IDataTable table = GetSelectedTable(); if (table == null) { return; } IDataIndex di = table.CreateIndex(); table.Indexes.Add(di); dgvIndex.DataSource = null; dgvIndex.DataSource = table.Indexes; pgColumn.SelectedObject = di; }
public virtual String CreateIndexSQL(IDataIndex index) { var sb = Pool.StringBuilder.Get(); if (index.Unique) { sb.Append("Create Unique Index "); } else { sb.Append("Create Index "); } sb.Append(index.Name); var dcs = index.Table.GetColumns(index.Columns); sb.AppendFormat(" On {0} ({1})", FormatName(index.Table), dcs.Join(",", FormatName)); return(sb.Put(true)); }
/// <summary>填充索引</summary> /// <param name="index"></param> internal void Fill(IDataIndex index) { if (!String.IsNullOrEmpty(Name)) { index.Name = Name; } index.Unique = Unique; if (!String.IsNullOrEmpty(Columns)) { var ss = Columns.Split(",", ";"); var list = new List <String>(); foreach (var item in ss) { var column = item.Trim(); if (!String.IsNullOrEmpty(column)) { list.Add(column); } } index.Columns = list.ToArray(); } }
///// <summary> ///// 检索应用于类型成员的自定义属性。 ///// </summary> ///// <param name="element"></param> ///// <returns></returns> //public new static BindIndexAttribute[] GetCustomAttributes(MemberInfo element) //{ // Attribute[] atts = GetCustomAttributes(element, typeof(BindIndexAttribute), true); // if (atts == null || atts.Length < 1) return null; // List<BindIndexAttribute> list = new List<BindIndexAttribute>(); // foreach (Attribute item in atts) // { // list.Add(item as BindIndexAttribute); // } // return list.ToArray(); //} /// <summary>填充索引</summary> /// <param name="index"></param> internal void Fill(IDataIndex index) { if (!String.IsNullOrEmpty(Name)) { index.Name = Name; } index.Unique = Unique; if (!String.IsNullOrEmpty(Columns)) { String[] ss = Columns.Split(new Char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); List <String> list = new List <string>(); foreach (String item in ss) { String column = item.Trim(); if (!String.IsNullOrEmpty(column)) { list.Add(column); } } index.Columns = list.ToArray(); } }
/// <summary>根据字段名等信息计算索引的名称</summary> /// <param name="di"></param> /// <returns></returns> public virtual String GetName(IDataIndex di) { if (di.Columns == null || di.Columns.Length < 1) return null; var sb = new StringBuilder(); if (di.PrimaryKey) sb.Append("PK"); else if (di.Unique) sb.Append("IU"); else sb.Append("IX"); if (di.Table != null) { sb.Append("_"); sb.Append(di.Table.TableName); } for (var i = 0; i < di.Columns.Length; i++) { sb.Append("_"); sb.Append(di.Columns[i]); } return sb.ToString(); }
public override String CreateIndexSQL(IDataIndex index) { var sb = new StringBuilder(); if (index.Unique) { sb.Append("Create Unique Index "); } else { sb.Append("Create Index "); } //sb.Append(FormatName(index.Name)); // SQLite中不同表的索引名也不能相同 sb.Append(FormatName(index.Table.Name)); foreach (var item in index.Columns) { sb.AppendFormat("_{0}", item); } sb.AppendFormat(" On {0} (", FormatName(index.Table.Name)); for (int i = 0; i < index.Columns.Length; i++) { if (i > 0) { sb.Append(", "); } sb.Append(FormatName(index.Columns[i])); //else // sb.AppendFormat("{0} {1}", FormatKeyWord(index.Columns[i].Name), isAscs[i].Value ? "Asc" : "Desc"); } sb.Append(")"); return(sb.ToString()); }
/// <summary>获取索引</summary> /// <param name="table"></param> /// <returns></returns> protected virtual List <IDataIndex> GetIndexes(IDataTable table) { if (_indexes == null) { return(null); } DataRow[] drs = _indexes.Select(String.Format("{0}='{1}'", _.TalbeName, table.TableName)); if (drs == null || drs.Length < 1) { return(null); } List <IDataIndex> list = new List <IDataIndex>(); foreach (DataRow dr in drs) { String name = null; if (!TryGetDataRowValue <String>(dr, _.IndexName, out name)) { continue; } IDataIndex di = table.CreateIndex(); di.Name = name; if (TryGetDataRowValue <string>(dr, _.ColumnName, out name) && !String.IsNullOrEmpty(name)) { di.Columns = name.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries); } else if (_indexColumns != null) { String orderby = null; // Oracle数据库用ColumnPosition,其它数据库用OrdinalPosition if (_indexColumns.Columns.Contains(_.OrdinalPosition)) { orderby = _.OrdinalPosition; } else if (_indexColumns.Columns.Contains(_.ColumnPosition)) { orderby = _.ColumnPosition; } DataRow[] dics = _indexColumns.Select(String.Format("{0}='{1}' And {2}='{3}'", _.TalbeName, table.TableName, _.IndexName, di.Name), orderby); if (dics != null && dics.Length > 0) { List <String> ns = new List <string>(); foreach (DataRow item in dics) { String dcname = null; if (TryGetDataRowValue <String>(item, _.ColumnName, out dcname) && !String.IsNullOrEmpty(dcname) && !ns.Contains(dcname)) { ns.Add(dcname); } } if (ns.Count < 1) { DAL.WriteLog("表{0}的索引{1}无法取得字段列表!", table, di.Name); } di.Columns = ns.ToArray(); } } Boolean b = false; if (TryGetDataRowValue <Boolean>(dr, "UNIQUE", out b)) { di.Unique = b; } if (TryGetDataRowValue <Boolean>(dr, "PRIMARY", out b)) { di.PrimaryKey = b; } else if (TryGetDataRowValue <Boolean>(dr, "PRIMARY_KEY", out b)) { di.PrimaryKey = b; } FixIndex(di, dr); list.Add(di); } return(list != null && list.Count > 0 ? list : null); }
/// <summary>删除索引方法</summary> /// <param name="index"></param> /// <returns></returns> public override string DropIndexSQL(IDataIndex index) { return(String.Format("Drop Index {0}", FormatName(index.Name))); }
/// <summary>修正索引</summary> /// <param name="index"></param> /// <param name="dr"></param> protected virtual void FixIndex(IDataIndex index, DataRow dr) { }
public override String CreateIndexSQL(IDataIndex index) { var sb = new StringBuilder(32 + index.Columns.Length * 20); if (index.Unique) sb.Append("Create Unique Index "); else sb.Append("Create Index "); // SQLite索引优先采用自带索引名 if (!String.IsNullOrEmpty(index.Name) && index.Name.Contains(index.Table.TableName)) sb.Append(FormatName(index.Name)); else { // SQLite中不同表的索引名也不能相同 sb.Append("IX_"); sb.Append(FormatName(index.Table.TableName)); foreach (var item in index.Columns) { sb.AppendFormat("_{0}", item); } } sb.AppendFormat(" On {0} (", FormatName(index.Table.TableName)); for (int i = 0; i < index.Columns.Length; i++) { if (i > 0) sb.Append(", "); sb.Append(FormatName(index.Columns[i])); //else // sb.AppendFormat("{0} {1}", FormatKeyWord(index.Columns[i].Name), isAscs[i].Value ? "Asc" : "Desc"); } //foreach (var item in index.Columns) //{ // sb.Append(FormatName(item)); // sb.Append(", "); //} //sb.Remove(sb.Length - 2, 2); sb.Append(")"); return sb.ToString(); }
public virtual String DropIndexSQL(IDataIndex index) => $"Drop Index {FormatName(index.Name)} On {FormatName(index.Table.TableName)}";
public override string CreateIndexSQL(IDataIndex index) { String sql = base.CreateIndexSQL(index); if (String.IsNullOrEmpty(sql) || !index.PrimaryKey) return sql; return sql + " WITH PRIMARY"; }
/// <summary>赋值数据列到另一个数据列</summary> /// <param name="src"></param> /// <param name="des"></param> /// <returns></returns> public static IDataIndex CopyFrom(this IDataIndex src, IDataIndex des) { src.Name = des.Name; src.Columns = des.Columns; src.Unique = des.Unique; src.PrimaryKey = des.PrimaryKey; src.Computed = des.Computed; return src; }
/// <summary>删除索引方法</summary> /// <param name="index"></param> /// <returns></returns> public override string DropIndexSQL(IDataIndex index) { return String.Format("Drop Index {0}", FormatName(index.Name)); }
/// <summary>根据字段名等信息计算索引的名称</summary> /// <param name="di"></param> /// <returns></returns> public virtual String GetName(IDataIndex di) { if (di.Columns == null || di.Columns.Length < 1) return null; var sb = new StringBuilder(); if (di.PrimaryKey) sb.Append("PK"); else if (di.Unique) sb.Append("IU"); else sb.Append("IX"); if (di.Table != null) { sb.Append("_"); sb.Append(di.Table.TableName); } for (int i = 0; i < di.Columns.Length; i++) { sb.Append("_"); sb.Append(di.Columns[i]); } return sb.ToString(); }
protected override void FixIndex(IDataIndex index, DataRow dr) { String str = null; if (TryGetDataRowValue<String>(dr, "UNIQUENESS", out str)) index.Unique = str == "UNIQUE"; base.FixIndex(index, dr); }
public override String DropIndexSQL(IDataIndex index) { return(String.Format("Drop Index {1}.{0}", FormatName(index.Name), FormatName(index.Table.TableName))); }
protected override void FixTable(IDataTable table, DataRow dr) { base.FixTable(table, dr); // 主键 if (MetaDataCollections.Contains(_.PrimaryKeys)) { DataTable dt = null; if (IsUseOwner) { dt = GetSchema(_.PrimaryKeys, new String[] { Owner, table.TableName, null }); } else { dt = GetSchema(_.PrimaryKeys, new String[] { null, table.TableName, null }); } if (dt != null && dt.Rows.Count > 0) { // 找到主键所在索引,这个索引的列才是主键 String name = null; if (TryGetDataRowValue <String>(dt.Rows[0], _.IndexName, out name) && !String.IsNullOrEmpty(name)) { IDataIndex di = table.Indexes.FirstOrDefault(i => i.Name == name); if (di != null) { di.PrimaryKey = true; foreach (IDataColumn dc in table.Columns) { dc.PrimaryKey = di.Columns.Contains(dc.ColumnName); } } } } } // 表注释 USER_TAB_COMMENTS //String sql = String.Format("Select COMMENTS From USER_TAB_COMMENTS Where TABLE_NAME='{0}'", table.Name); //String comment = (String)Database.CreateSession().ExecuteScalar(sql); String comment = GetTableComment(table.TableName); if (!String.IsNullOrEmpty(comment)) { table.Description = comment; } if (table == null || table.Columns == null || table.Columns.Count < 1) { return; } // 自增 Boolean exists = false; foreach (IDataColumn field in table.Columns) { // 不管是否主键 if (!field.DataType.IsIntType()) { continue; } String name = String.Format("SEQ_{0}_{1}", table.TableName, field.ColumnName); if (CheckSeqExists(name)) { field.Identity = true; exists = true; break; } } if (!exists) { // 检查该表是否有序列,如有,让主键成为自增 String name = String.Format("SEQ_{0}", table.TableName); if (CheckSeqExists(name)) { foreach (IDataColumn field in table.Columns) { if (!field.PrimaryKey || !field.DataType.IsIntType()) { continue; } field.Identity = true; exists = true; break; } } } //if (!exists) //{ // // 处理自增,整型、主键、名为ID认为是自增 // foreach (IDataColumn field in table.Columns) // { // if (field.DataType.IsIntType()) // { // if (field.PrimaryKey && field.ColumnName.ToLower().Contains("id")) field.Identity = true; // } // } //} }
public virtual String DropIndexSQL(IDataIndex index) { return(String.Format("Drop Index {0} On {1}", FormatName(index.Name), FormatName(index.Table.TableName))); }
public virtual String CreateIndexSQL(IDataIndex index) { StringBuilder sb = new StringBuilder(); if (index.Unique) sb.Append("Create Unique Index "); else sb.Append("Create Index "); sb.Append(FormatName(index.Name)); sb.AppendFormat(" On {0} (", FormatName(index.Table.Name)); for (int i = 0; i < index.Columns.Length; i++) { if (i > 0) sb.Append(", "); sb.Append(FormatName(index.Columns[i])); //else // sb.AppendFormat("{0} {1}", FormatKeyWord(index.Columns[i].Name), isAscs[i].Value ? "Asc" : "Desc"); } sb.Append(")"); return sb.ToString(); }
/// <summary>修正索引</summary> /// <param name="index"></param> /// <param name="dr"></param> protected virtual void FixIndex(IDataIndex index, DataRow dr) { }
public virtual String DropIndexSQL(IDataIndex index) { return String.Format("Drop Index {0} On {1}", FormatName(index.Name), FormatName(index.Table.Name)); }