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