コード例 #1
0
ファイル: BindIndexAttribute.cs プロジェクト: BiYiTuan/soa
        ///// <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();
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: BindIndexAttribute.cs プロジェクト: zeroyou/X
 /// <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();
     }
 }
コード例 #5
0
ファイル: BindIndexAttribute.cs プロジェクト: rebider/soa
        ///// <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();
            }
        }
コード例 #6
0
ファイル: IModelResolver.cs プロジェクト: toby2o12/X
        /// <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();
        }
コード例 #7
0
        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());
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
 /// <summary>删除索引方法</summary>
 /// <param name="index"></param>
 /// <returns></returns>
 public override string DropIndexSQL(IDataIndex index)
 {
     return(String.Format("Drop Index {0}", FormatName(index.Name)));
 }
コード例 #10
0
ファイル: DbMetaData_Positive.cs プロジェクト: BiYiTuan/soa
 /// <summary>修正索引</summary>
 /// <param name="index"></param>
 /// <param name="dr"></param>
 protected virtual void FixIndex(IDataIndex index, DataRow dr) { }
コード例 #11
0
ファイル: SQLite.cs プロジェクト: tommybiteme/X
        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();
        }
コード例 #12
0
 public virtual String DropIndexSQL(IDataIndex index) => $"Drop Index {FormatName(index.Name)} On {FormatName(index.Table.TableName)}";
コード例 #13
0
ファイル: Access.cs プロジェクト: vebin/soa
        public override string CreateIndexSQL(IDataIndex index)
        {
            String sql = base.CreateIndexSQL(index);
            if (String.IsNullOrEmpty(sql) || !index.PrimaryKey) return sql;

            return sql + " WITH PRIMARY";
        }
コード例 #14
0
ファイル: ModelHelper.cs プロジェクト: windygu/asxinyunet
        /// <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;
        }
コード例 #15
0
ファイル: SQLite.cs プロジェクト: tommybiteme/X
 /// <summary>删除索引方法</summary>
 /// <param name="index"></param>
 /// <returns></returns>
 public override string DropIndexSQL(IDataIndex index)
 {
     return String.Format("Drop Index {0}", FormatName(index.Name));
 }
コード例 #16
0
ファイル: IModelResolver.cs プロジェクト: tommybiteme/X
        /// <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();
        }
コード例 #17
0
        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);
        }
コード例 #18
0
 public override String DropIndexSQL(IDataIndex index)
 {
     return(String.Format("Drop Index {1}.{0}", FormatName(index.Name), FormatName(index.Table.TableName)));
 }
コード例 #19
0
ファイル: Oracle.cs プロジェクト: youngbeangeek/X
        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;
            //        }
            //    }
            //}
        }
コード例 #20
0
 public virtual String DropIndexSQL(IDataIndex index)
 {
     return(String.Format("Drop Index {0} On {1}", FormatName(index.Name), FormatName(index.Table.TableName)));
 }
コード例 #21
0
        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();
        }
コード例 #22
0
ファイル: DbMetaData_Positive.cs プロジェクト: pjy612/X
 /// <summary>修正索引</summary>
 /// <param name="index"></param>
 /// <param name="dr"></param>
 protected virtual void FixIndex(IDataIndex index, DataRow dr)
 {
 }
コード例 #23
0
 public virtual String DropIndexSQL(IDataIndex index)
 {
     return String.Format("Drop Index {0} On {1}", FormatName(index.Name), FormatName(index.Table.Name));
 }