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;
            }
        }
Ejemplo n.º 7
0
        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();
        }