private void dgvIndexes_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } if (e.ColumnIndex == this.colColumns.Index) { DataGridViewRow row = this.dgvIndexes.Rows[e.RowIndex]; DataGridViewCell cell = row.Cells[this.colColumns.Name]; if (cell.ReadOnly) { return; } string indexName = DataGridViewHelper.GetCellStringValue(row, this.colIndexName.Name); string type = DataGridViewHelper.GetCellStringValue(row, this.colType.Name); if (!string.IsNullOrEmpty(indexName)) { TableIndexDesignerInfo indexDesignerInfo = row.Tag as TableIndexDesignerInfo; if (this.OnColumnSelect != null) { this.OnColumnSelect(DatabaseObjectType.TableIndex, indexDesignerInfo?.Columns == null ? Enumerable.Empty <IndexColumn>() : indexDesignerInfo?.Columns, type == IndexType.Primary.ToString() ); } } } }
public List <TableIndexDesignerInfo> GetIndexes() { List <TableIndexDesignerInfo> indexDesingerInfos = new List <TableIndexDesignerInfo>(); foreach (DataGridViewRow row in this.dgvIndexes.Rows) { TableIndexDesignerInfo index = new TableIndexDesignerInfo(); string indexName = row.Cells[this.colIndexName.Name].Value?.ToString(); if (!string.IsNullOrEmpty(indexName)) { TableIndexDesignerInfo tag = row.Tag as TableIndexDesignerInfo; index.OldName = tag?.OldName; index.OldType = tag?.OldType; index.Name = indexName; index.Type = DataGridViewHelper.GetCellStringValue(row, this.colType.Name); index.Columns = tag?.Columns; index.Comment = DataGridViewHelper.GetCellStringValue(row, this.colComment.Name); index.ExtraPropertyInfo = tag?.ExtraPropertyInfo; index.IsPrimary = tag?.IsPrimary == true; row.Tag = index; indexDesingerInfos.Add(index); } } return(indexDesingerInfos); }
public static List <TableIndexDesignerInfo> GetIndexDesignerInfos(DatabaseType databaseType, List <TableIndex> indexes) { List <TableIndexDesignerInfo> indexDesignerInfos = new List <TableIndexDesignerInfo>(); foreach (var index in indexes) { TableIndexDesignerInfo indexDesignerInfo = new TableIndexDesignerInfo(); indexDesignerInfo.OldName = indexDesignerInfo.Name = index.Name; indexDesignerInfo.IsPrimary = index.IsPrimary; indexDesignerInfo.OldType = index.Type; indexDesignerInfo.Comment = index.Comment; string type = index.Type; if (!string.IsNullOrEmpty(type)) { indexDesignerInfo.Type = type; } if (index.IsPrimary) { if (databaseType == DatabaseType.Oracle) { indexDesignerInfo.Type = IndexType.Unique.ToString(); } else { indexDesignerInfo.Type = IndexType.Primary.ToString(); } if (indexDesignerInfo.ExtraPropertyInfo == null) { indexDesignerInfo.ExtraPropertyInfo = new TableIndexExtraPropertyInfo(); } indexDesignerInfo.ExtraPropertyInfo.Clustered = index.Clustered; } else if (index.IsUnique) { indexDesignerInfo.Type = IndexType.Unique.ToString(); } else if (string.IsNullOrEmpty(index.Type)) { indexDesignerInfo.Type = IndexType.Normal.ToString(); } if (string.IsNullOrEmpty(indexDesignerInfo.OldType) && !string.IsNullOrEmpty(indexDesignerInfo.Type)) { indexDesignerInfo.OldType = indexDesignerInfo.Type; } indexDesignerInfo.Columns.AddRange(index.Columns); indexDesignerInfos.Add(indexDesignerInfo); } return(indexDesignerInfos); }
private void ShowIndexExtraPropertites() { var row = DataGridViewHelper.GetSelectedRow(this.dgvIndexes); if (row != null) { string indexName = DataGridViewHelper.GetCellStringValue(row, this.colIndexName.Name); if (string.IsNullOrEmpty(indexName)) { return; } TableIndexDesignerInfo index = row.Tag as TableIndexDesignerInfo; if (index == null) { index = new TableIndexDesignerInfo(); row.Tag = index; } TableIndexExtraPropertyInfo extralProperty = index?.ExtraPropertyInfo; DataGridViewCell typeCell = row.Cells[this.colType.Name]; if (extralProperty == null) { extralProperty = new TableIndexExtraPropertyInfo(); index.ExtraPropertyInfo = extralProperty; if (DataGridViewHelper.GetCellStringValue(typeCell) != IndexType.Primary.ToString()) { index.ExtraPropertyInfo.Clustered = false; } } if (this.DatabaseType == DatabaseType.Oracle) { this.indexPropertites.HiddenProperties = new string[] { nameof(extralProperty.Clustered) }; } else { this.indexPropertites.HiddenProperties = null; } this.indexPropertites.SelectedObject = extralProperty; this.indexPropertites.Refresh(); } }
public void OnSaved() { for (int i = 0; i < this.dgvIndexes.RowCount; i++) { DataGridViewRow row = this.dgvIndexes.Rows[i]; TableIndexDesignerInfo indexDesingerInfo = row.Tag as TableIndexDesignerInfo; if (indexDesingerInfo != null && !string.IsNullOrEmpty(indexDesingerInfo.Name)) { indexDesingerInfo.OldName = indexDesingerInfo.Name; indexDesingerInfo.OldType = indexDesingerInfo.Type; } } }
public void SetRowColumns(IEnumerable <IndexColumn> columnInfos) { DataGridViewCell cell = this.dgvIndexes.CurrentCell; if (cell != null) { cell.Value = string.Join(",", columnInfos.Select(item => item.ColumnName)); TableIndexDesignerInfo tableIndexDesignerInfo = cell.OwningRow.Tag as TableIndexDesignerInfo; if (tableIndexDesignerInfo == null) { tableIndexDesignerInfo = new TableIndexDesignerInfo(); } tableIndexDesignerInfo.Columns = columnInfos.ToList(); cell.OwningRow.Tag = tableIndexDesignerInfo; } }
public SchemaInfo GetSchemaInfo(SchemaDesignerInfo schemaDesignerInfo) { SchemaInfo schemaInfo = new SchemaInfo(); Table table = new Table(); ObjectHelper.CopyProperties(schemaDesignerInfo.TableDesignerInfo, table); schemaInfo.Tables.Add(table); #region Columns TablePrimaryKey primaryKey = null; foreach (TableColumnDesingerInfo column in schemaDesignerInfo.TableColumnDesingerInfos) { TableColumn tableColumn = new TableColumn(); ObjectHelper.CopyProperties(column, tableColumn); if (!tableColumn.IsUserDefined) { ColumnManager.SetColumnLength(this.dbInterpreter.DatabaseType, tableColumn, column.Length); } if (column.IsPrimary) { if (primaryKey == null) { primaryKey = new TablePrimaryKey() { Owner = table.Owner, TableName = table.Name, Name = IndexManager.GetPrimaryKeyDefaultName(table) }; } IndexColumn indexColumn = new IndexColumn() { ColumnName = column.Name, IsDesc = false, Order = primaryKey.Columns.Count + 1 }; if (!schemaDesignerInfo.IgnoreTableIndex) { TableIndexDesignerInfo indexDesignerInfo = schemaDesignerInfo.TableIndexDesingerInfos .FirstOrDefault(item => item.Type == IndexType.Primary.ToString() && item.Columns.Any(t => t.ColumnName == column.Name)); if (indexDesignerInfo != null) { primaryKey.Name = indexDesignerInfo.Name; primaryKey.Comment = indexDesignerInfo.Comment; IndexColumn columnInfo = indexDesignerInfo.Columns.FirstOrDefault(item => item.ColumnName == column.Name); if (columnInfo != null) { indexColumn.IsDesc = columnInfo.IsDesc; } if (indexDesignerInfo.ExtraPropertyInfo != null) { primaryKey.Clustered = indexDesignerInfo.ExtraPropertyInfo.Clustered; } } } primaryKey.Columns.Add(indexColumn); } TableColumnExtraPropertyInfo extralProperty = column.ExtraPropertyInfo; if (column.IsIdentity) { if (extralProperty != null) { table.IdentitySeed = extralProperty.Seed; table.IdentityIncrement = extralProperty.Increment; } else { table.IdentitySeed = 1; table.IdentityIncrement = 1; } } if (extralProperty?.Expression != null) { tableColumn.ComputeExp = extralProperty.Expression; } schemaInfo.TableColumns.Add(tableColumn); } if (primaryKey != null) { schemaInfo.TablePrimaryKeys.Add(primaryKey); } #endregion #region Indexes if (!schemaDesignerInfo.IgnoreTableIndex) { foreach (TableIndexDesignerInfo indexDesignerInfo in schemaDesignerInfo.TableIndexDesingerInfos) { if (!indexDesignerInfo.IsPrimary) { TableIndex index = new TableIndex() { Owner = indexDesignerInfo.Owner, TableName = indexDesignerInfo.TableName }; index.Name = indexDesignerInfo.Name; index.IsUnique = indexDesignerInfo.Type == IndexType.Unique.ToString(); index.Clustered = indexDesignerInfo.Clustered; index.Comment = indexDesignerInfo.Comment; index.Columns.AddRange(indexDesignerInfo.Columns); int order = 1; index.Columns.ForEach(item => { item.Order = order++; }); schemaInfo.TableIndexes.Add(index); } } } #endregion #region Foreign Keys if (!schemaDesignerInfo.IgnoreTableForeignKey) { foreach (TableForeignKeyDesignerInfo keyDesignerInfo in schemaDesignerInfo.TableForeignKeyDesignerInfos) { TableForeignKey foreignKey = new TableForeignKey() { Owner = keyDesignerInfo.Owner, TableName = keyDesignerInfo.TableName }; foreignKey.Name = keyDesignerInfo.Name; foreignKey.ReferencedTableName = keyDesignerInfo.ReferencedTableName; foreignKey.UpdateCascade = keyDesignerInfo.UpdateCascade; foreignKey.DeleteCascade = keyDesignerInfo.DeleteCascade; foreignKey.Comment = keyDesignerInfo.Comment; foreignKey.Columns.AddRange(keyDesignerInfo.Columns); int order = 1; foreignKey.Columns.ForEach(item => { item.Order = order++; }); schemaInfo.TableForeignKeys.Add(foreignKey); } } #endregion #region Constraint if (!schemaDesignerInfo.IgnoreTableConstraint) { foreach (TableConstraintDesignerInfo constraintDesignerInfo in schemaDesignerInfo.TableConstraintDesignerInfos) { TableConstraint constraint = new TableConstraint() { Owner = constraintDesignerInfo.Owner, TableName = constraintDesignerInfo.TableName }; constraint.Name = constraintDesignerInfo.Name; constraint.Definition = constraintDesignerInfo.Definition; constraint.Comment = constraintDesignerInfo.Comment; schemaInfo.TableConstraints.Add(constraint); } } #endregion return(schemaInfo); }
public void LoadPrimaryKeys(IEnumerable <TableColumnDesingerInfo> columnDesingerInfos) { int primaryRowIndex = -1; foreach (DataGridViewRow row in this.dgvIndexes.Rows) { if (!row.IsNewRow) { TableIndexDesignerInfo indexDesignerInfo = row.Tag as TableIndexDesignerInfo; if (indexDesignerInfo != null && indexDesignerInfo.IsPrimary) { primaryRowIndex = row.Index; if (columnDesingerInfos.Count() > 0) { indexDesignerInfo.Columns.Clear(); indexDesignerInfo.Columns.AddRange(columnDesingerInfos.Select(item => new IndexColumn() { ColumnName = item.Name })); row.Cells[this.colColumns.Name].Value = this.GetColumnsDisplayText(indexDesignerInfo.Columns); } break; } } } if (primaryRowIndex >= 0 && columnDesingerInfos.Count() == 0) { this.dgvIndexes.Rows.RemoveAt(primaryRowIndex); } else if (primaryRowIndex < 0 && columnDesingerInfos.Count() > 0) { this.dgvIndexes.Rows.Insert(0, 1); TableIndexDesignerInfo tableIndexDesignerInfo = new TableIndexDesignerInfo() { Type = this.DatabaseType == DatabaseType.Oracle ? IndexType.Unique.ToString() : IndexType.Primary.ToString(), Name = IndexManager.GetPrimaryKeyDefaultName(this.Table), IsPrimary = true }; tableIndexDesignerInfo.Columns.AddRange(columnDesingerInfos.Select(item => new IndexColumn() { ColumnName = item.Name })); DataGridViewRow primaryRow = this.dgvIndexes.Rows[0]; primaryRow.Cells[this.colType.Name].ReadOnly = true; primaryRow.Cells[this.colType.Name].Value = tableIndexDesignerInfo.Type; primaryRow.Cells[this.colIndexName.Name].Value = tableIndexDesignerInfo.Name; primaryRow.Cells[this.colColumns.Name].Value = this.GetColumnsDisplayText(tableIndexDesignerInfo.Columns); tableIndexDesignerInfo.ExtraPropertyInfo = new TableIndexExtraPropertyInfo() { Clustered = true }; primaryRow.Tag = tableIndexDesignerInfo; } this.ShowIndexExtraPropertites(); }