Ejemplo n.º 1
0
        private EvolutionHistory LoadEvolutionHistory()
        {
            var ids = ExecuteSqlQuery($"SELECT database_id FROM master.sys.databases WHERE name = '{_databaseName}'",
                                      row => (int)row["database_id"]);

            if (ids.Any())
            {
                string upgrade = $@"IF COL_LENGTH('[{_databaseName}].[dbo].[__EvolutionHistoryPrerequisite]', 'Ordinal') IS NULL
                    BEGIN
	                    ALTER TABLE [{_databaseName}].[dbo].[__EvolutionHistoryPrerequisite]
	                    ADD [Ordinal] INT NOT NULL
	                    CONSTRAINT [DF_EvolutionHistoryPrerequisite_Ordinal] DEFAULT (1)

	                    ALTER TABLE [{_databaseName}].[dbo].[__EvolutionHistoryPrerequisite]
                        DROP CONSTRAINT [DF_EvolutionHistoryPrerequisite_Ordinal]
                    END";
                ExecuteSqlCommand(upgrade);

                var rows = ExecuteSqlQuery($@"SELECT h.[Type], h.[HashCode], h.[Attributes], j.[Role], p.[HashCode] AS [PrerequisiteHashCode]
                        FROM [{_databaseName}].[dbo].[__EvolutionHistory] h
                        LEFT JOIN [{_databaseName}].[dbo].[__EvolutionHistoryPrerequisite] j
                          ON h.GeneId = j.GeneId
                        LEFT JOIN [{_databaseName}].[dbo].[__EvolutionHistory] p
                          ON j.PrerequisiteGeneId = p.GeneId
                        ORDER BY h.GeneId, j.Role, j.Ordinal, p.GeneId",
                                           row => new EvolutionHistoryRow
                {
                    Type                 = LoadString(row["Type"]),
                    HashCode             = LoadBigInteger(row["HashCode"]),
                    Attributes           = LoadString(row["Attributes"]),
                    Role                 = LoadString(row["Role"]),
                    PrerequisiteHashCode = LoadBigInteger(row["PrerequisiteHashCode"])
                });

                return(EvolutionHistory.LoadMementos(LoadMementos(rows)));
            }
            else
            {
                return(new EvolutionHistory());
            }
        }
 private EvolutionHistory WhenLoadEvolutionHistory(GeneMemento[] mementos)
 {
     return EvolutionHistory.LoadMementos(mementos);
 }