Ejemplo n.º 1
0
        public IEnumerable <SqlScript> Filter(IEnumerable <SqlScript> sorted, HashSet <ExecutedSqlScript> executedScripts, ScriptNameComparer comparer)
        {
            return(sorted.Where(x =>
            {
                var executedScriptsOrdered = executedScripts
                                             .OrderByDescending(d => d.Applied);//order them by most recently applied first, grab the latest one applied.
                IEnumerable <ExecutedSqlScript> executedSqlScripts = executedScriptsOrdered.Where(s => s.Name.Equals(x.Name, StringComparison.OrdinalIgnoreCase));

                ExecutedSqlScript executedSqlScript = executedSqlScripts.FirstOrDefault();
                //if it's a run always script
                //if the script has not been run (executedSqlScript ==null)
                //if the script's hashes do not match
                bool willRun =
                    x.SqlScriptOptions.ScriptType == ScriptType.RunAlways ||
                    executedSqlScript == null ||   // ScriptType.RunOnce
                    (x.SqlScriptOptions.ScriptType == ScriptType.RunHash && executedSqlScript.Hash != x.Hash);
                return willRun;
            }));
        }
Ejemplo n.º 2
0
        public ExecutedSqlScript[] GetExecutedScripts()
        {
            IConnectionManager connectionManager = ConnectionManager();

            using (connectionManager.OperationStarting(Log(), new List <SqlScript>(), TransactionMode.SingleTransaction))
            {
                return(connectionManager.ExecuteCommandsWithManagedConnection(dbCommandFactory =>
                {
                    if (journalExists || DoesTableExist(dbCommandFactory))
                    {
                        Log().WriteInformation("Fetching list of already executed scripts.");

                        IDbCommand command = dbCommandFactory();
                        command.CommandText = GetJournalEntriesSql();
                        List <ExecutedSqlScript> executedSqlScripts = new List <ExecutedSqlScript>();
                        using (IDataReader dataReader = command.ExecuteReader())
                        {
                            while (dataReader.Read())
                            {
                                ExecutedSqlScript executedSqlScript = new ExecutedSqlScript();

                                executedSqlScript.Hash = dataReader.GetString(dataReader.GetOrdinal("Hash"));
                                executedSqlScript.Applied = dataReader.GetDateTime(dataReader.GetOrdinal("Applied"));
                                executedSqlScript.Contents = dataReader.GetString(dataReader.GetOrdinal("Contents"));
                                executedSqlScript.Name = dataReader.GetString(dataReader.GetOrdinal("ScriptName"));

                                executedSqlScripts.Add(executedSqlScript);
                            }
                        }
                        return executedSqlScripts.ToArray();
                    }
                    else
                    {
                        Log().WriteInformation("Journal table does not exist");
                        return new ExecutedSqlScript[0];
                    }
                }));
            }
        }