public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph) { string[] sql = { $"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]\r\n DROP CONSTRAINT [PK_{TableName}]" }; return(sql); }
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); }
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)); }
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); }
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); }
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); }
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)); }
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)); }
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()); }
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); }
internal CustomSqlSpecification(CustomSqlGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) : base(evolutionHistoryBuilder) { _gene = gene; }
internal SchemaSpecification(UseSchemaGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) : base(evolutionHistoryBuilder) { _gene = gene; }
private DatabaseSpecification(string databaseName, EvolutionHistoryBuilder evolutionHistoryBuilder, ImmutableList <Gene> prerequisites) : base(evolutionHistoryBuilder, prerequisites) { _databaseName = databaseName; }
internal ForeignKeySpecification(EvolutionHistoryBuilder geneHistoryBuilder) : base(geneHistoryBuilder) { }
private TableSpecification(CreateTableGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder, ImmutableList <Gene> prerequisites) : base(evolutionHistoryBuilder, prerequisites) { _gene = gene; }
internal PrimaryKeySpecification(CreatePrimaryKeyGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) : base(evolutionHistoryBuilder) { _gene = gene; }
internal TableSpecification(CreateTableGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) : base(evolutionHistoryBuilder) { _gene = gene; }
public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph) { throw new NotImplementedException(); }
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; }
internal IndexSpecification(CreateIndexGene gene, EvolutionHistoryBuilder evolutionHistoryBuilder) : base(evolutionHistoryBuilder) { _gene = gene; }
internal UniqueIndexSpecification(CreateUniqueIndexGene gene, EvolutionHistoryBuilder geneHistoryBuilder) : base(geneHistoryBuilder) { _gene = gene; }
public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph) { string[] sql = { }; return(sql); }