Exemple #1
0
        /// <summary>
        /// 在范围分区过程中创建分区详细信息
        /// </summary>
        /// <returns></returns>
        private string CreateDbtuneParamValueInRange()
        {
            string dbtuneParamValue = string.Empty;

            dbtuneParamValue = PartitionKeyWordInfo.DBTUNE_PARAM_VALUE_PREFIX + SqlTemplate.CreatePartition.PARTITION_02;
            dbtuneParamValue = dbtuneParamValue.Replace("{basic_field}", this._basicField);

            string paramSection = string.Empty;

            Dictionary <string, double> boundary = QueryUnityInfo.QueryBoundary(this._featureClass, this._basicField);

            List <string> range = QueryUnityInfo.QueryRange(boundary["MIN"], boundary["MAX"], this._partitionCount);

            //按照字段唯一值进行分区信息的生成
            for (int i = 0; i < this._partitionCount; i++)
            {
                paramSection += SqlTemplate.PartitionInfo.PARTITION_INFO_05;
                paramSection  = paramSection.Replace("{partition_name}", "PARTITION_" + this._basicField + "_" + i);
                paramSection  = paramSection.Replace("{values}", range[i]);
                paramSection  = paramSection.Replace("{tablespace_name}", this._tablespaceSet[i]);
                paramSection += ",";
            }
            //在最后添加默认分区
            paramSection += SqlTemplate.PartitionInfo.PARTITION_INFO_07;
            paramSection  = paramSection.Replace("{partition_name}", "PARTITION_" + this._basicField + "_MAXVALUE");
            paramSection  = paramSection.Replace("{tablespace_name}", this._tablespaceSet[this._tablespaceSet.Count - 1]);

            dbtuneParamValue = dbtuneParamValue.Replace("{partition_info}", paramSection);

            return(dbtuneParamValue);
        }
Exemple #2
0
        /// <summary>
        /// 在列表分区过程中创建分区详细信息
        /// </summary>
        /// <returns></returns>
        private string CreateDbtuneParamValueInList()
        {
            string dbtuneParamValue = string.Empty;

            dbtuneParamValue = PartitionKeyWordInfo.DBTUNE_PARAM_VALUE_PREFIX + SqlTemplate.CreatePartition.PARTITION_01;
            dbtuneParamValue = dbtuneParamValue.Replace("{basic_field}", this._basicField);

            List <string> uniqueValue = QueryUnityInfo.QueryUniqueValue(this._featureClass, this._basicField);

            string paramSection = string.Empty;

            //按照字段唯一值进行分区信息的生成
            for (int i = 0; i < uniqueValue.Count; i++)
            {
                paramSection += GetFieldBaseType() == EnumBaseDataType.NUMERIC ? SqlTemplate.PartitionInfo.PARTITION_INFO_01 : SqlTemplate.PartitionInfo.PARTITION_INFO_02;
                paramSection  = paramSection.Replace("{partition_name}", "PARTITION_" + this._basicField + "_" + i);
                paramSection  = paramSection.Replace("{values}", uniqueValue[i]);
                paramSection  = paramSection.Replace("{tablespace_name}", this._tablespaceSet[i]);
                paramSection += ",";
            }

            //在最后添加默认分区
            paramSection += SqlTemplate.PartitionInfo.PARTITION_INFO_04;
            paramSection  = paramSection.Replace("{partition_name}", "PARTITION_" + this._basicField + "_DEFAULT");
            paramSection  = paramSection.Replace("{tablespace_name}", this._tablespaceSet[this._tablespaceSet.Count - 1]);

            dbtuneParamValue = dbtuneParamValue.Replace("{partition_info}", paramSection);

            return(dbtuneParamValue);
        }
Exemple #3
0
        /// <summary>
        /// 获取分区目录(要素列表分区)
        /// </summary>
        /// <param name="basicField"></param>
        /// <param name="featureClass"></param>
        /// <returns></returns>
        internal static List <string> GetPartitionRefer(string basicField, IFeatureClass featureClass)
        {
            List <string> partitionRefer = new List <string>();

            partitionRefer = QueryUnityInfo.QueryUniqueValue(featureClass, basicField);

            return(partitionRefer);
        }
Exemple #4
0
        /// <summary>
        /// 为源表下拉菜单提供数据绑定
        /// </summary>
        /// <param name="cmbOriginTable"></param>
        /// <param name="tablespace"></param>
        /// <param name="dbHelper"></param>
        internal static void BindcmbOriginTable(ComboBoxEdit cmbOriginTable, string tablespace, IDBHelper dbHelper)
        {
            List <string> originTableSet = QueryUnityInfo.QueryTotalTable(dbHelper, tablespace);

            cmbOriginTable.Invoke(new Action(() => { cmbOriginTable.Properties.Items.Clear(); }));

            cmbOriginTable.Invoke(new Action(() => { cmbOriginTable.Properties.Items.AddRange(originTableSet); }));
        }
Exemple #5
0
        /// <summary>
        /// 获取分区目录(范围分区)
        /// </summary>
        /// <param name="partitionCount"></param>
        /// <param name="boundary"></param>
        /// <returns></returns>
        internal static List <string> GetPartitionRefer(int partitionCount, Dictionary <string, double> boundary)
        {
            List <string> partitionRefer = new List <string>();

            partitionRefer = QueryUnityInfo.QueryRange(boundary["MIN"], boundary["MAX"], partitionCount);

            return(partitionRefer);
        }
Exemple #6
0
        /// <summary>
        /// 获取分区目录(普通表列表分区)
        /// </summary>
        /// <param name="basicField"></param>
        /// <param name="originTable"></param>
        /// <param name="dbHelper"></param>
        /// <returns></returns>
        internal static List <string> GetPartitionRefer(string basicField, string originTable, IDBHelper dbHelper)
        {
            List <string> partitionRefer = new List <string>();

            partitionRefer = QueryUnityInfo.QueryUniqueValue(dbHelper, basicField, originTable);

            return(partitionRefer);
        }
Exemple #7
0
        /// <summary>
        /// 为表空间下拉菜单提供数据绑定
        /// </summary>
        /// <param name="cmbTablespace"></param>
        /// <param name="dbHelper"></param>
        internal static void BindcmbTablespace(ComboBoxEdit cmbTablespace, IDBHelper dbHelper)
        {
            List <string> tablespaceSet = QueryUnityInfo.QueryTablespace(dbHelper);

            cmbTablespace.Invoke(new Action(() => { cmbTablespace.Properties.Items.Clear(); }));

            foreach (var tablespace in tablespaceSet)
            {
                cmbTablespace.Invoke(new Action(() => { cmbTablespace.Properties.Items.Add(tablespace); }));
            }
        }
Exemple #8
0
        /// <summary>
        /// 获取数据表字段集合(要素)
        /// </summary>
        /// <param name="columnInfoSet"></param>
        /// <param name="featureClass"></param>
        /// <returns></returns>
        private static List <string> GetColumnIdentitySet(ref Dictionary <string, string> columnInfoSet, IFeatureClass featureClass)
        {
            columnInfoSet = QueryUnityInfo.QueryColumnInfo(featureClass);

            List <string> columnIdentitySet = new List <string>();

            foreach (var columnIdentity in columnInfoSet.Keys)
            {
                columnIdentitySet.Add(columnIdentity);
            }

            return(columnIdentitySet);
        }
Exemple #9
0
        /// <summary>
        /// 获取数据表字段集合
        /// </summary>
        /// <param name="columnInfoSet"></param>
        /// <param name="originTable"></param>
        /// <param name="dbHelper"></param>
        /// <returns></returns>
        internal static List <string> GetColumnIdentitySet(ref Dictionary <string, string> columnInfoSet, string originTable, IDBHelper dbHelper)
        {
            columnInfoSet = QueryUnityInfo.QueryColumnInfo(dbHelper, originTable);

            List <string> columnIdentitySet = new List <string>();

            foreach (var columnIdentity in columnInfoSet.Keys)
            {
                columnIdentitySet.Add(columnIdentity);
            }

            return(columnIdentitySet);
        }
Exemple #10
0
 /// <summary>
 /// 检查分区流程涉及参数
 /// </summary>
 /// <returns></returns>
 internal static bool CheckPartitionParam(MemoEdit txbBlog, PartitionParam partitionParam)
 {
     if (partitionParam.DBHelper == null)
     {
         WriteBlog(txbBlog, "---  数据库连接异常, 请查看错误日志");
         return(false);
     }
     else if (RegexCheck.IsEmpty(partitionParam.TablespaceName))
     {
         WriteBlog(txbBlog, "---  未指定表空间");
         return(false);
     }
     else if (RegexCheck.IsEmpty(partitionParam.OriginTableName))
     {
         WriteBlog(txbBlog, "---  未指定初始表");
         return(false);
     }
     else if (RegexCheck.IsEmpty(partitionParam.BasicField))
     {
         WriteBlog(txbBlog, "---  未指定分区列");
         return(false);
     }
     else if (partitionParam.PartitionWay == EnumPartitionWay.Unknow)
     {
         WriteBlog(txbBlog, "---  未指定分区方式");
         return(false);
     }
     else if (!RegexCheck.IsFull(partitionParam.TablespaceSet))
     {
         WriteBlog(txbBlog, "---  存在没有指定表空间的分区");
         return(false);
     }
     else if (RegexCheck.IsExist(QueryUnityInfo.QueryTotalTable(partitionParam.DBHelper, partitionParam.TablespaceName), partitionParam.PartitionedTableName))
     {
         WriteBlog(txbBlog, "---  名字为 " + partitionParam.PartitionedTableName + "的表已经存在,请更改导出名");
         return(false);
     }
     else
     {
         if (partitionParam.PartitionWay == EnumPartitionWay.Range && partitionParam.PartitionCount == -1)
         {
             WriteBlog(txbBlog, "---未指定范围分区数");
             return(false);
         }
         else
         {
             return(true);
         }
     }
 }
Exemple #11
0
        /// <summary>
        /// 获取分区基准字段的基本类型
        /// </summary>
        /// <returns></returns>
        private EnumBaseDataType GetFieldBaseType()
        {
            Dictionary <string, string> columnInfoSet = QueryUnityInfo.QueryColumnInfo(this._featureClass);

            if (RegexCheck.IsExist(ScreenTemplate.ScreenNumericType, this._basicField))
            {
                return(EnumBaseDataType.NUMERIC);
            }
            else if (RegexCheck.IsExist(ScreenTemplate.ScreenCharacterType, this._basicField))
            {
                return(EnumBaseDataType.CHARACTER);
            }
            else
            {
                return(EnumBaseDataType.DATATIME);
            }
        }
Exemple #12
0
        /// <summary>
        /// 范围分区工作准备
        /// </summary>
        private void PrepareRangePartition()
        {
            GwWaitForm.Start("正在查找范围边界");
            this.Cursor = Cursors.WaitCursor;

            //根据工作流程,查找分区基准列的边界
            if (this.tabWorkFlow.SelectedTabPageIndex == (int)EnumWorkFlow.TablePartition)
            {
                this._boundary = QueryUnityInfo.QueryBoundary(this._dbHelper, this.cmbColumnIdentity.SelectedItem.ToString(), this.cmbOriginTable.SelectedItem.ToString());
            }
            else if (this.tabWorkFlow.SelectedTabPageIndex == (int)EnumWorkFlow.DbtuneConfigure)
            {
                this._boundary = QueryUnityInfo.QueryBoundary(this._featureClass, this.cmbColumnIdentity.SelectedItem.ToString());
            }

            this.Cursor = Cursors.Arrow;
            GwWaitForm.Stop();

            //打开指定分区数的窗体
            if (this._frmAssignRange == null || this._frmAssignRange.IsDisposed)
            {
                this._frmAssignRange = new FormAssignRange(this._boundary["MIN"], this._boundary["MAX"]);
            }

            this._frmAssignRange.ShowDialog();

            //如果取消指定分区数,则默认采用列表分区
            if (this._frmAssignRange.IsCancel)
            {
                this.cmbPartitionWay.SelectedIndex = (int)EnumPartitionWay.List;
                //转而进行列表分区工作准备
                PrepareListPartition("已取消范围分区,默认采用列表分区,正在分析分区数量");
            }
            else
            {
                this._partitionCount = this._frmAssignRange.PartitionCount;

                this._partitionRefer = CommonUtil.GetPartitionRefer(this._partitionCount, this._boundary);

                this._partitionInfoSet = CommonUtil.GetPartitionInfoSet(this.cmbPartitionWay.SelectedIndex, this.cmbColumnIdentity.SelectedItem.ToString(), this._partitionRefer);

                this.txbTips.Text = string.Format("{0} ~ {1}   分区数:{2}", this._boundary["MIN"].ToString("0.00"), this._boundary["MAX"].ToString("0.00"), this._partitionCount);
            }

            this._frmAssignRange = null;
        }
Exemple #13
0
        /// <summary>
        /// 在范围分区过程中定义创建表结构SQL
        /// </summary>
        /// <returns></returns>
        private string InitSqlforRangePartitionStruct()
        {
            string sqlCommand = string.Empty;

            sqlCommand = GetTableStructInfo();

            this._partitionIndex = new Dictionary <string, string>();

            //选择SQL模板
            sqlCommand += SqlTemplate.CreatePartition.PARTITION_02;
            sqlCommand  = sqlCommand.Replace("{basic_field}", this._basicField);

            string sqlPartitionInfo = string.Empty;
            string partitionName    = string.Empty;

            DBColumnInfo dbColumnInfo = this._dbHelper.GetColumn(this._originTableName, this._basicField);

            Dictionary <string, double> boundary = QueryUnityInfo.QueryBoundary(this._dbHelper, this._basicField, this._originTableName);

            List <string> range = QueryUnityInfo.QueryRange(boundary["MIN"], boundary["MAX"], this._partitionCount);

            //若分区列是日期
            if (dbColumnInfo.DataType.EnumDBFieldType == (int)EnumDBFieldType.FTDatetime)
            {
                for (int i = 0; i < range.Count; i++)
                {
                    #region 定义分区名
                    partitionName = "PARTITION_" + this._basicField + "_" + i;
                    #endregion

                    //选择对应SQL模板
                    sqlPartitionInfo += SqlTemplate.PartitionInfo.PARTITION_INFO_06;
                    //向模板中填入参数
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{partition_name}", partitionName);
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{tablespace_name}", this._tablespaceSet[i]);
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{values}", range[i]);

                    sqlPartitionInfo += ",";

                    this._partitionIndex.Add(partitionName, range[i]);
                }
            }
            //若分区列不是日期
            else
            {
                for (int i = 0; i < range.Count; i++)
                {
                    #region 定义分区名
                    partitionName = "PARTITION_" + this._basicField + "_" + i;
                    #endregion
                    //选择对应SQL模板
                    sqlPartitionInfo += SqlTemplate.PartitionInfo.PARTITION_INFO_05;
                    //向模板中填入参数
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{partition_name}", partitionName);
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{tablespace_name}", this._tablespaceSet[i]);
                    sqlPartitionInfo = sqlPartitionInfo.Replace("{values}", range[i]);

                    sqlPartitionInfo += ",";

                    this._partitionIndex.Add(partitionName, range[i]);
                }
            }

            //在最后添加[MAXVALUE]分区
            #region 定义分区名
            partitionName     = "PARTITION_" + this._basicField + "_MAXVALUE";
            sqlPartitionInfo += SqlTemplate.PartitionInfo.PARTITION_INFO_07;
            sqlPartitionInfo  = sqlPartitionInfo.Replace("{partition_name}", partitionName);
            sqlPartitionInfo  = sqlPartitionInfo.Replace("{tablespace_name}", this._tablespaceSet[this._tablespaceSet.Count - 1]);
            #endregion

            this._partitionIndex.Add(partitionName, "MAXVALUE");

            sqlCommand = sqlCommand.Replace("{partition_info}", sqlPartitionInfo);

            return(sqlCommand);
        }
Exemple #14
0
        /// <summary>
        /// 指定各分区表空间按钮的点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAssignTablespace_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            //如果分区信息集合已经初始化
            if (this._partitionInfoSet.Count != 0)
            {
                if (this._frmAssignTablespace == null || this._frmAssignTablespace.IsDisposed)
                {
                    this._frmAssignTablespace = new FormAssignTablespace(this._partitionInfoSet, QueryUnityInfo.QueryTablespace(this._dbHelper));
                }

                this._frmAssignTablespace.ShowDialog();

                for (int i = 0; i < this._partitionInfoSet.Count; i++)
                {
                    this._partitionInfoSet[i].Tablespace = this._frmAssignTablespace.PartitionInfoSet.Rows[i]["Tablespace"].ToString();

                    if (!RegexCheck.IsEmpty(this._partitionInfoSet[i].Tablespace))
                    {
                        this.btnAssignTablespace.Text += this._partitionInfoSet[i].Tablespace + " | ";
                    }
                }

                this._frmAssignTablespace = null;
            }
        }