/// <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); }
/// <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); }
/// <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); }
/// <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); })); }
/// <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); }
/// <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); }
/// <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); })); } }
/// <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); }
/// <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); }
/// <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); } } }
/// <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); } }
/// <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; }
/// <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); }
/// <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; } }