public override string[] GenerateSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph) { string createTable; string head = $"CREATE TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]"; var optimizableGenes = _definitions .SelectMany(m => graph.PullPrerequisitesForward(m, this, CanOptimize)) .ToImmutableList(); if (optimizableGenes.Any()) { var definitions = optimizableGenes .OfType <TableDefinitionGene>() .Where(d => !d.Dropped) .Select(d => d.GenerateDefinitionSql()); createTable = $"{head}({string.Join(",", definitions)})"; optimizableGenes = optimizableGenes.AddRange(optimizableGenes .OfType <CreateColumnGene>() .SelectMany(d => d.Modifications)); } else { createTable = head; } string[] sql = { createTable }; genesAffected.AppendAll(optimizableGenes); return(sql); }
public GreedyEdgeChooserPunterWithStupidZergRush( IScorer scorer, IGraphVisitor graphVisitor ) { this.scorer = scorer; this.graphVisitor = graphVisitor; }
public Visitor(IGraph <Node, Edge> /*!*/ graph, //^ [Delayed] IGraphVisitor <Node, Edge> /*!*/ visitor) : this(graph, visitor.VisitNode, null, visitor.VisitEdge) { Contract.Requires(graph != null); // Clousot Suggestion Contract.Requires(visitor != null); // Clousot Suggestion }
public BargeHauler3( IScorer scorer, IGraphVisitor graphVisitor ) { this.scorer = scorer; this.graphVisitor = graphVisitor; }
public GreedyEdgeChooserPunter( IScorer scorer, IGraphVisitor graphVisitor ) { this.scorer = scorer; this.graphVisitor = graphVisitor; }
public FriendshipPunter(IScorer scorer) { this.scorer = scorer; graphVisitor = new GraphVisitor(); componentManager = new ComponentManager(scorer); state = new PunterState { }; }
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 Scorer( IDistanceCalculator distanceCalculator, IGraphVisitor graphVisitor) { this.distanceCalculator = distanceCalculator; this.graphVisitor = graphVisitor; state = new ScorerState { DistancesFromMines = new Dictionary<int, Dictionary<int, int>>(), Mines = new Node[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()); }
/// <summary> /// Pass in a visitor to be visited by this graph and its child elements /// </summary> /// <typeparam name="TReturn">Return type of this visitor</typeparam> /// <param name="visitor">Visitor to visit</param> /// <returns>Result generated by the visitor.</returns> public TReturn Visit <TReturn>(IGraphVisitor <TReturn> visitor) where TReturn : class { if (visitor == null) { throw new ArgumentNullException("visitor", "Must have a visitor to approach."); } var nodeResults = Nodes.Select(n => n.Visit(visitor)) .ToList(); var edgeResults = Edges.Select(e => e.Visit(visitor)) .ToList(); var subGraphResults = SubGraphs.Select(g => g.Visit(visitor)) .ToList(); return(visitor.VisitGraph(this, nodeResults, edgeResults, subGraphResults)); }
public abstract string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph);
public override string[] GenerateSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string[] sql = { }; return(sql); }
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { throw new NotImplementedException(); }
public static void DepthFirstTraversal <T>(this IGraph <T> graph, IGraphNode <T> startingNode, IGraphVisitor <T> visitor) { Stack <Pair <IGraphNode <T>, IEnumerator <IGraphEdge <T> > > > openNodes = new Stack <Pair <IGraphNode <T>, IEnumerator <IGraphEdge <T> > > >(); HashSet <IGraphNode <T> > seenNodes = new HashSet <IGraphNode <T> >(); openNodes.Push(new Pair <IGraphNode <T>, IEnumerator <IGraphEdge <T> > >(startingNode, graph.GetEdges(startingNode).GetEnumerator())); seenNodes.Add(startingNode); visitor.VisitNodeOpen(startingNode); while (openNodes.Count > 0) { var top = openNodes.Peek(); if (top.Second.MoveNext()) { IGraphEdge <T> edge = top.Second.Current; IGraphNode <T> node = edge.node2; if (!seenNodes.Add(node)) { continue; } openNodes.Push(new Pair <IGraphNode <T>, IEnumerator <IGraphEdge <T> > >(node, graph.GetEdges(node).GetEnumerator())); visitor.VisitNodeOpen(node); } else { visitor.VisitNodeClose(openNodes.Pop().First); } } }
/// <summary> /// Visit the passed visitor and return the result generated /// </summary> /// <param name="visitor">The visitor itself.</param> /// <typeparam name="TReturn">Type of return value.</typeparam> /// <returns>Result generated by the Visitor.</returns> public TReturn Visit <TReturn>(IGraphVisitor <TReturn> visitor) where TReturn : class { Require.NotNull("visitor", visitor); return(visitor.VisitEdge(this)); }
public override string[] GenerateRollbackSql(EvolutionHistoryBuilder genesAffected, IGraphVisitor graph) { return(_parent.CreateColumnSql()); }
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string[] sql = { $"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]\r\n DROP CONSTRAINT [PK_{TableName}]" }; return(sql); }
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string[] sql = { $@"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}] DROP COLUMN [{ColumnName}]" }; return(sql); }
public abstract void Accept(IGraphVisitor visitor);
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string indexTail = string.Join("_", Columns.Select(c => $"{c.ColumnName}").ToArray()); string[] sql = { $"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]\r\n DROP CONSTRAINT [FK_{TableName}_{indexTail}]" }; return(sql); }
public override string[] GenerateSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string[] identityTypes = { "INT IDENTITY" }; string[] numericTypes = { "BIGINT", "INT", "SMALLINT", "TINYINT", "MONEY", "SMALLMONEY", "DECIMAL", "FLOAT", "REAL" }; string[] dateTypes = { "DATETIME", "SMALLDATETIME", "DATETIME2", "TIME" }; string[] dateTimeOffsetTypes = { "DATETIMEOFFSET" }; string[] stringTypes = { "NVARCHAR", "NCHAR", "NTEXT" }; string[] asciiStringTypes = { "VARCHAR", "CHAR", "TEXT" }; string[] guidTypes = { "UNIQUEIDENTIFIER" }; string defaultExpression = _nullable ? null : identityTypes.Any(t => TypeDescriptor.StartsWith(t)) ? null : numericTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "0" : dateTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "GETUTCDATE()" : dateTimeOffsetTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "SYSDATETIMEOFFSET()" : stringTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "N''" : asciiStringTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "''" : guidTypes.Any(t => TypeDescriptor.StartsWith(t)) ? "'00000000-0000-0000-0000-000000000000'" : null; if (defaultExpression == null) { string[] sql = { $@"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}] ADD [{ColumnName}] {TypeDescriptor} {NullableClause}" }; return(sql); } else { string[] sql = { $@"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}] ADD [{ColumnName}] {TypeDescriptor} {NullableClause} CONSTRAINT [DF_{TableName}_{ColumnName}] DEFAULT ({defaultExpression})", $@"ALTER TABLE [{DatabaseName}].[{SchemaName}].[{TableName}] DROP CONSTRAINT [DF_{TableName}_{ColumnName}]", }; return(sql); } }
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { return (_down != null ? new string[] { $"USE {DatabaseName}", _down } : new string[] { }); }
public static void BreadthFirstTraversal <T>(this IGraph <T> graph, IGraphNode <T> startingNode, IGraphVisitor <T> visitor) { Queue <IGraphNode <T> > openNodes = new Queue <IGraphNode <T> >(); HashSet <IGraphNode <T> > seenNodes = new HashSet <IGraphNode <T> >(); openNodes.Enqueue(startingNode); seenNodes.Add(startingNode); while (openNodes.Count > 0) { IGraphNode <T> node = openNodes.Dequeue(); visitor.VisitNodeOpen(node); foreach (IGraphEdge <T> edge in graph.GetEdges(node)) { if (!seenNodes.Add(edge.node2)) { continue; } openNodes.Enqueue(edge.node2); } } }
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 void Accept(IGraphVisitor visitor) { visitor.Visit(this); }
public abstract T Accept <T>(IGraphVisitor <T> visitor);
public override string[] GenerateSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { return(new string[] { $"USE {DatabaseName}", _up }); }
public override string[] GenerateRollbackSql(MigrationHistoryBuilder migrationsAffected, IGraphVisitor graph) { string[] sql = { $"DROP TABLE [{DatabaseName}].[{SchemaName}].[{TableName}]" }; migrationsAffected.AppendAll(_definitions); return(sql); }