private void createIndexButton_Click(object sender, EventArgs e)
        {
            try
            {
                Index index = new Index();
                index.Name = string.Format("{0}_Index_{1}", tableSchema.Name, tableSchema.Indexes.Count + 1);

                for (int i = 0; i < IndexDataGridView.Rows.Count - 1; i++)
                {
                    index.IndexMembers.Add(IndexDataGridView.Rows[i].Cells[0].Value.ToString());
                }

                index.Unique = uniqueCheckBox.Checked;

                tableSchema.Indexes.Add(index);
                dbContext.SchemaQuery.UpdateDatabase(database.Name);
            }
            catch (NullReferenceException exception)
            {
                MessageBox.Show("Complete all cells!\n" + exception.Message);
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        public IConcreteIndex GetIndex(Index index)
        {
            if (index.Unique)
            {
                return new UniqueIndex(databaseFileName, repository, index);
            }

            return new NonUniqueIndex(databaseFileName, repository, index);
        }
 public UniqueIndex(string databaseFileName, IRepository repository, Index index)
 {
     this.databaseFileName = databaseFileName;
     this.repository = repository;
     this.index = index;
 }
        private void saveButton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(relNameTextBox.Text.ToString()))
            {
                MessageBox.Show(Resources.ResourceManager.GetString("EmptyRelation"));
                return;
            }

            try
            {
                var association = new Association();
                association.Name = relNameTextBox.Text;
                association.Parent = parentComboBox.SelectedItem.ToString();
                association.Child = childComboBox.SelectedItem.ToString();

                for (int i = 0; i < relDataGridView.Rows.Count - 1; i++)
                {
                    association.ColumnMappings[relDataGridView.Rows[i].Cells[0].Value.ToString()] = relDataGridView.Rows[i].Cells[1].Value.ToString();
                }

                database.Associations.Add(association);

                // Add non-unique index for the association.
                Table parentTable = database.GetTable(association.Parent);
                Index index = new Index();
                index.Name = association.Name;
                index.Unique = false;

                foreach (var parentColumn in association.ColumnMappings.Keys)
                {
                    index.IndexMembers.Add(parentColumn);
                }

                parentTable.Indexes.Add(index);
            }
            catch (NullReferenceException exception)
            {
                MessageBox.Show("Complete all cells!\n" + exception.Message);
            }

            DialogResult = DialogResult.OK;
        }
        private void SaveTableButton_Click(object sender, System.EventArgs e)
        {
            //TODO: validate inputs

            var tableName = TableNameTextBox.Text.ToString();
            if (string.IsNullOrEmpty(tableName))
            {
                MessageBox.Show(Resources.ResourceManager.GetString("MissingTableName"));
                return;
            }

            var result = database.Tables.Find(t => t.Name.Equals(tableName));
            if(result != null)
            {
                MessageBox.Show(Resources.ResourceManager.GetString("TableNameTaked"));
                return;
            }

            table = new Table();
            table.Name = tableName;

            try
            {
                for (int i = 0; i < TableDataGridView.Rows.Count - 1; i++)
                {

                    Column column = new Column();
                    column.Name = TableDataGridView.Rows[i].Cells[0].Value.ToString();
                    column.Type = DataTypeConverter.ToDataType(TableDataGridView.Rows[i].Cells[1].Value.ToString());
                    column.Size = Int32.Parse(TableDataGridView.Rows[i].Cells[2].Value.ToString());
                    bool isPrimaryKey = (bool) ((DataGridViewCheckBoxCell) TableDataGridView.Rows[i].Cells[3]).FormattedValue;
                    column.Unique = (bool) ((DataGridViewCheckBoxCell) TableDataGridView.Rows[i].Cells[4]).FormattedValue;
                    column.Nullable = (bool) ((DataGridViewCheckBoxCell)TableDataGridView.Rows[i].Cells[5]).FormattedValue;

                    if (isPrimaryKey)
                    {
                        table.PrimaryKey.Add(column.Name);
                    }

                    table.Columns.Add(column);
                }

                // Create indexes for unique values.
                foreach (var column in table.Columns.Where(c => c.Unique).Select(c => c.Name))
                {
                    Index index = new Index();
                    index.Name = string.Format("{0}_Index_{1}", table.Name, table.Indexes.Count + 1);
                    index.IndexMembers.Add(column);
                    index.Unique = true;
                    table.Indexes.Add(index);
                }

                if (database.GetTable(table.Name) != null)
                {
                    Table tableToDelete = database.GetTable(table.Name);
                    dbContext.Query.DeleteTable(database, tableToDelete);
                    database.Tables.Remove(tableToDelete);
                }

                database.Tables.Add(table);
            }
            catch (NullReferenceException exception)
            {
                MessageBox.Show("Complete all cells!\n" + exception.Message);
            }

            DialogResult = DialogResult.OK;
        }