public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string[] sql =
            {
                $"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]\r\n    DROP CONSTRAINT [PK_{TableName}]"
            };

            return(sql);
        }
Esempio n. 2
0
        public void DropColumn()
        {
            var childGene = new DropColumnGene(
                _gene,
                Prerequisites);

            EvolutionHistoryBuilder.Append(childGene);
            childGene.AddToParent();
        }
        public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string[] sql =
            {
                $"DROP TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]"
            };
            genesAffected.AppendAll(_definitions);

            return(sql);
        }
Esempio n. 4
0
        public IndexSpecification CreateIndex(params ColumnSpecification[] columns)
        {
            var childGene = new CreateIndexGene(
                _gene,
                columns.Select(c => c.Gene),
                Prerequisites);

            EvolutionHistoryBuilder.Append(childGene);
            childGene.AddToParent();
            return(new IndexSpecification(childGene, EvolutionHistoryBuilder));
        }
Esempio n. 5
0
        public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string indexTail = string.Join("_", Columns.Select(c => $"{c.ColumnName}").ToArray());

            string[] sql =
            {
                $"DROP INDEX [UX_{TableName}_{indexTail}] ON [{DatabaseName}].[{SchemaName}].[{TableName}]"
            };

            return(sql);
        }
        public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string columnNames = string.Join(", ", _columns.Select(c => $"[{c.ColumnName}]").ToArray());

            string[] sql =
            {
                $"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]\r\n    ADD CONSTRAINT [PK_{TableName}] PRIMARY KEY CLUSTERED ({columnNames})"
            };

            return(sql);
        }
Esempio n. 7
0
        public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string indexTail  = string.Join("_", Columns.Select(c => $"{c.ColumnName}").ToArray());
            string columnList = string.Join(", ", Columns.Select(c => $"[{c.ColumnName}]").ToArray());

            string[] sql =
            {
                $"CREATE UNIQUE NONCLUSTERED INDEX [UX_{TableName}_{indexTail}] ON [{DatabaseName}].[{SchemaName}].[{TableName}] ({columnList})"
            };

            return(sql);
        }
Esempio n. 8
0
        public void AddGene(Gene gene)
        {
            var genesAffected = new EvolutionHistoryBuilder();

            genesAffected.Append(gene);
            string[] rollbackSql = gene.GenerateRollbackSql(genesAffected, this);
            var      mementos    = genesAffected.EvolutionHistory.GetMementos().ToList();

            string[] deleteStatements = GenerateDeleteStatements(_databaseName, mementos);
            _sql   = _sql.InsertRange(0, deleteStatements);
            _sql   = _sql.InsertRange(0, rollbackSql);
            _ahead = _ahead.Subtract(genesAffected.EvolutionHistory);
        }
Esempio n. 9
0
        public ForeignKeySpecification CreateForeignKey(PrimaryKeySpecification referencing, bool cascadeDelete = false, bool cascadeUpdate = false)
        {
            var childGene = new CreateForeignKeyGene(
                _gene,
                referencing.Gene,
                cascadeDelete,
                cascadeUpdate,
                Prerequisites);

            EvolutionHistoryBuilder.Append(childGene);
            childGene.AddToParent();
            return(new ForeignKeySpecification(EvolutionHistoryBuilder));
        }
Esempio n. 10
0
        private ColumnSpecification CreateColumn(string columnName, string typeDescriptor, bool nullable)
        {
            var childGene = new CreateColumnGene(
                _gene,
                columnName,
                typeDescriptor,
                nullable,
                Prerequisites);

            EvolutionHistoryBuilder.Append(childGene);
            childGene.AddToParent();
            return(new ColumnSpecification(childGene, EvolutionHistoryBuilder));
        }
Esempio n. 11
0
        public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            string indexTail           = string.Join("_", Columns.Select(c => $"{c.ColumnName}").ToArray());
            string columnList          = string.Join(", ", Columns.Select(c => $"[{c.ColumnName}]").ToArray());
            string referenceColumnList = string.Join(", ", _referencing.Columns.Select(c => $"[{c.ColumnName}]").ToArray());
            string onDelete            = _cascadeDelete ? " ON DELETE CASCADE" : "";
            string onUpdate            = _cascadeUpdate ? " ON UPDATE CASCADE" : "";

            string[] sql =
            {
                $@"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]
    ADD CONSTRAINT [FK_{TableName}_{indexTail}] FOREIGN KEY ({columnList})
        REFERENCES [{_referencing.DatabaseName}].[{_referencing.SchemaName}].[{_referencing.TableName}] ({referenceColumnList}){onDelete}{onUpdate}"
            };

            return(sql);
        }
        public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
        {
            var optimizableGenes = _modifications
                                   .SelectMany(m => graph.PullPrerequisitesForward(m, this, CanOptimize))
                                   .ToImmutableList();

            if (optimizableGenes.Any())
            {
                genesAffected.AppendAll(optimizableGenes);

                if (optimizableGenes.OfType <DropColumnGene>().Any())
                {
                    return(new string[0]);
                }
            }

            return(CreateColumnSql());
        }
Esempio n. 13
0
        public bool AddGene(Gene gene)
        {
            if (_working.Contains(gene))
            {
                return(false);
            }

            foreach (var prerequisite in gene.AllPrerequisites
                     .Where(p => _difference.Contains(p)))
            {
                if (!AddGene(prerequisite))
                {
                    return(false);
                }
            }

            _working = _working.Push(gene);

            var genesAffected = new EvolutionHistoryBuilder();

            genesAffected.Append(gene);
            string[] result = gene.GenerateSql(genesAffected, this);
            _sql = _sql.AddRange(result);
            var mementos = genesAffected.EvolutionHistory.GetMementos().ToList();

            _sql = _sql.Add(GenerateInsertStatement(_databaseName, mementos));
            if (mementos.SelectMany(m => m.Prerequisites).SelectMany(p => p.Value).Any())
            {
                _sql = _sql.Add(GeneratePrerequisiteInsertStatements(_databaseName, mementos));
            }
            _difference = _difference.Subtract(genesAffected.EvolutionHistory);

            _working = _working.Pop();

            return(true);
        }
Esempio n. 14
0
 internal CustomSqlSpecification(CustomSqlGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
 internal SchemaSpecification(UseSchemaGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
Esempio n. 16
0
 private DatabaseSpecification(string databaseName, EvolutionHistoryBuilder evolutionHistoryBuilder, ImmutableList <Gene> prerequisites) :
     base(evolutionHistoryBuilder, prerequisites)
 {
     _databaseName = databaseName;
 }
Esempio n. 17
0
 internal ForeignKeySpecification(EvolutionHistoryBuilder geneHistoryBuilder) :
     base(geneHistoryBuilder)
 {
 }
Esempio n. 18
0
 private TableSpecification(CreateTableGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder, ImmutableList <Gene> prerequisites) :
     base(evolutionHistoryBuilder, prerequisites)
 {
     _gene = gene;
 }
Esempio n. 19
0
 internal PrimaryKeySpecification(CreatePrimaryKeyGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
Esempio n. 20
0
 internal TableSpecification(CreateTableGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
Esempio n. 21
0
 public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
 {
     throw new NotImplementedException();
 }
Esempio n. 22
0
 internal ColumnSpecification(CreateColumnGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
 protected Specification(EvolutionHistoryBuilder evolutionHistoryBuilder)
 {
     _evolutionHistoryBuilder = evolutionHistoryBuilder;
     _prerequisites           = ImmutableList <Gene> .Empty;
 }
 public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
 {
     return(_parent.CreateColumnSql());
 }
 public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
 {
     return
         (_down != null ? new string[] { $"USE {DatabaseName}", _down } :
          new string[] { });
 }
 public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
 {
     return(new string[] { $"USE {DatabaseName}", _up });
 }
 protected Specification(EvolutionHistoryBuilder evolutionHistoryBuilder, ImmutableList <Gene> prerequisites)
 {
     _evolutionHistoryBuilder = evolutionHistoryBuilder;
     _prerequisites           = prerequisites;
 }
Esempio n. 28
0
 internal IndexSpecification(CreateIndexGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) :
     base(evolutionHistoryBuilder)
 {
     _gene = gene;
 }
Esempio n. 29
0
 internal UniqueIndexSpecification(CreateUniqueIndexGene gene, EvolutionHistoryBuilder geneHistoryBuilder) :
     base(geneHistoryBuilder)
 {
     _gene = gene;
 }
Esempio n. 30
0
 public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph)
 {
     string[] sql = { };
     return(sql);
 }