public override void Process(Expressions.RenameTableExpression expression) { truncator.Truncate(expression); FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this); TableDefinition tableDef = schema.GetTableDefinition(expression.OldName); tableDef.Name = expression.NewName; CreateTableExpression createNew = new CreateTableExpression() { TableName = expression.NewName, SchemaName = String.Empty }; //copy column definitions (nb: avoid to copy key names, because in firebird they must be globally unique, so let it rename) tableDef.Columns.ToList().ForEach(x => createNew.Columns.Add(new ColumnDefinition() { Name = x.Name, DefaultValue = x.DefaultValue, IsForeignKey = x.IsForeignKey, IsIdentity = x.IsIdentity, IsIndexed = x.IsIndexed, IsNullable = x.IsNullable, IsPrimaryKey = x.IsPrimaryKey, IsUnique = x.IsUnique, ModificationType = x.ModificationType, Precision = x.Precision, Size = x.Size, Type = x.Type, CustomType = x.CustomType })); Process(createNew); int columnCount = tableDef.Columns.Count; string[] columns = tableDef.Columns.Select(x => x.Name).ToArray(); InsertDataExpression data = new InsertDataExpression(); using (DataSet ds = ReadTableData(String.Empty, expression.OldName)) { foreach (DataRow dr in ds.Tables[0].Rows) { InsertionDataDefinition insert = new InsertionDataDefinition(); for (int i = 0; i < columnCount; i++) { insert.Add(new KeyValuePair <string, object>(columns[i], dr.ItemArray[i])); } data.Rows.Add(insert); } } Process(data); DeleteTableExpression delTable = new DeleteTableExpression() { TableName = expression.OldName, SchemaName = String.Empty }; Process(delTable); }
public override void Process(Expressions.DeleteTableExpression expression) { truncator.Truncate(expression); CheckTable(expression.TableName); LockTable(expression.TableName); FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this); TableDefinition table = schema.GetTableDefinition(expression.TableName); foreach (ColumnDefinition colDef in table.Columns) { if (SequenceExists(String.Empty, GetSequenceName(expression.TableName, colDef.Name))) { DeleteSequenceForIdentity(expression.TableName, colDef.Name); } } CheckTable(expression.TableName); LockTable(expression.TableName); RegisterExpression <DeleteTableExpression>(expression); InternalProcess(Generator.Generate(expression)); }
protected void SetupUndoDeleteTable(DeleteTableExpression expression) { CanUndo = true; FirebirdSchemaProvider schema = new FirebirdSchemaProvider(Processor); //Table and columns CreateTableExpression table = new CreateTableExpression() { TableName = expression.TableName, SchemaName = expression.SchemaName, }; TableDefinition tableDef = schema.GetTableDefinition(expression.TableName); foreach (ColumnDefinition colDef in tableDef.Columns) { table.Columns.Add(colDef); } UndoExpressions.Add(table); //Indices foreach (IndexDefinition indexDef in tableDef.Indexes) { CreateIndexExpression indexExpression = new CreateIndexExpression() { Index = indexDef }; UndoExpressions.Add(indexExpression); } //Foreign keys foreach (ForeignKeyDefinition fkDef in tableDef.ForeignKeys) { CreateForeignKeyExpression fkExpression = new CreateForeignKeyExpression() { ForeignKey = fkDef }; UndoExpressions.Add(fkExpression); } //Data InsertDataExpression values = new InsertDataExpression() { TableName = expression.TableName, SchemaName = expression.SchemaName }; using (IDataReader data = Processor.ReadTableData(String.Empty, expression.TableName)) { int columnCount = data.FieldCount; while (data.Read()) { InsertionDataDefinition insert = new InsertionDataDefinition(); for (int i = 0; i < columnCount; i++) { insert.Add(new KeyValuePair <string, object>(data.GetName(i), data.GetValue(i))); } values.Rows.Add(insert); } } UndoExpressions.Add(values); //Triggers FirebirdTableSchema tableSchema = schema.GetTableSchema(expression.TableName); foreach (TriggerInfo trigger in tableSchema.Triggers) { PerformDBOperationExpression createTrigger = Processor.CreateTriggerExpression(expression.TableName, trigger); UndoExpressions.Add(createTrigger); } }