public void Reload(ProjectConfigItem projectConfig) { projectConfig.ThrowIfNull(nameof(projectConfig)); using (ArtifactExtractor _currentArtifactExtractor = _artifactExtractorFactory.Create(projectConfig)) { using (var dbCommands = _dbCommandsFactory.CreateDBCommand(projectConfig.DBConnectionInfo)) { IncrementalScriptFilesComparer = _scriptFilesComparerFactory.CreateScriptFilesComparer <IncrementalScriptFileType>(dbCommands, projectConfig.IncrementalScriptsFolderPath); ScriptFilesComparers[IncrementalScriptFilesComparer.ScriptFileType.FileTypeCode] = IncrementalScriptFilesComparer; RepeatableScriptFilesComparer = _scriptFilesComparerFactory.CreateScriptFilesComparer <RepeatableScriptFileType>(dbCommands, projectConfig.RepeatableScriptsFolderPath); ScriptFilesComparers[RepeatableScriptFilesComparer.ScriptFileType.FileTypeCode] = RepeatableScriptFilesComparer; if (projectConfig.DevEnvironment) { DevDummyDataScriptFilesComparer = _scriptFilesComparerFactory.CreateScriptFilesComparer <DevDummyDataScriptFileType>(dbCommands, projectConfig.DevDummyDataScriptsFolderPath); ScriptFilesComparers[DevDummyDataScriptFilesComparer.ScriptFileType.FileTypeCode] = DevDummyDataScriptFilesComparer; } else { DevDummyDataScriptFilesComparer = null; } } } }
public override void Execute(DBVersionsProcessContext processContext) { processContext.ThrowIfNull(nameof(processContext)); using (ArtifactExtractor _currentArtifactExtractor = _artifactExtractorFactory.Create(processContext.ProjectConfig)) { List <ActionStepBase> internalSteps = new List <ActionStepBase>(); using (var dbCommands = _dbCommandsFactory.CreateDBCommand(processContext.ProjectConfig.DBConnectionInfo)) { ScriptFileTypeBase incrementalFileType = ScriptFileTypeBase.Create <IncrementalScriptFileType>(); ExecuteScriptsByTypeStep incrementalExecuteScriptsByTypeStep = _executeScriptsByTypeStepFactory.Create(incrementalFileType.FileTypeCode, dbCommands); internalSteps.Add(incrementalExecuteScriptsByTypeStep); string lastIncStriptFilename = GetLastIncFilename(processContext); TargetScripts targetScripts = null; if (processContext.ProcessArgs != null) { targetScripts = (processContext.ProcessArgs as DBVersionsProcessArgs).TargetScripts; } //Comment: We run the repeatable files and ddd files, onlyif we have all the schema on the DB. mean, only if we executed all incremiental files. if (targetScripts.IncScriptFileName.Trim().ToUpperInvariant() == lastIncStriptFilename.Trim().ToUpperInvariant() || targetScripts.IncScriptFileName.Trim().ToUpperInvariant() == RuntimeScriptFile.TargetLastScriptFileName.Trim().ToUpperInvariant()) { ScriptFileTypeBase repeatableFileType = ScriptFileTypeBase.Create <RepeatableScriptFileType>(); ExecuteScriptsByTypeStep repeatableFileTypeExecuteScriptsByTypeStep = _executeScriptsByTypeStepFactory.Create(repeatableFileType.FileTypeCode, dbCommands); internalSteps.Add(repeatableFileTypeExecuteScriptsByTypeStep); if (processContext.ScriptFilesState.DevDummyDataScriptFilesComparer != null) { ScriptFileTypeBase devDummyDataFileType = ScriptFileTypeBase.Create <DevDummyDataScriptFileType>(); ExecuteScriptsByTypeStep devDummyDataFileTypeExecuteScriptsByTypeStep = _executeScriptsByTypeStepFactory.Create(devDummyDataFileType.FileTypeCode, dbCommands); internalSteps.Add(devDummyDataFileTypeExecuteScriptsByTypeStep); } } ExecuteInternalSteps(internalSteps, false); } } }
public void AssertThatAllFilesInFolderExistWithTheSameHashInTheDB_RunAgainAfterRepetableFilesChanged(string testName, ProjectConfigItem projectConfig) { DataTable dbScriptsExecutionHistoryFilesTable = _dbHandler.GetTable(projectConfig.DBConnectionInfo, DBCommandsConsts.DBScriptsExecutionHistoryFilesFullTableName); if (!projectConfig.DevEnvironment) { using (ArtifactExtractor artifactExtractor = new ArtifactExtractor(projectConfig)) { AssertMatchIncrementalFilesWithDBExecuted(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); AssertMatchRepeatableFilesWithDBExecuted_ForRunAgainAfterRepetableFilesChanged(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); AssertDevDummyDataFilesWithDBExecuted_DeliveryEnv(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); } } else { AssertMatchIncrementalFilesWithDBExecuted(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); AssertMatchRepeatableFilesWithDBExecuted_ForRunAgainAfterRepetableFilesChanged(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); // AssertDevDummyDataFilesWithDBExecuted_RunAgainAfterRepetableFilesChanged(testName, projectConfig, dbScriptsExecutionHistoryFilesTable); } }
public void AssertThatAllFilesInTheDBExistWithTheSameHashInTheFolder(string testName, ProjectConfigItem projectConfig) { ArtifactExtractor artifactExtractor = null; if (!projectConfig.DevEnvironment) { artifactExtractor = new ArtifactExtractor(projectConfig); } DataTable dbScriptsExecutionHistoryFilesTable = _dbHandler.GetTable(projectConfig.DBConnectionInfo, DBCommandsConsts.DBScriptsExecutionHistoryFilesFullTableName); string[] arrIncAllScriptFiles = Directory.GetFiles(projectConfig.IncrementalScriptsFolderPath, $"{_incrementalScriptFileType.Prefix}*.sql", SearchOption.AllDirectories); Dictionary <string, FileInfo> incSctipFilesDictionary = arrIncAllScriptFiles.Select(e => new FileInfo(e)).ToDictionary(e => e.Name); List <DataRow> incExecutionHistoryFilesDBRows = dbScriptsExecutionHistoryFilesTable.Rows.Cast <DataRow>().Where(row => Convert.ToString(row["ScriptFileType"]) == _incrementalScriptFileType.FileTypeCode).ToList(); foreach (DataRow executedScriptRow in incExecutionHistoryFilesDBRows) { string filename = Convert.ToString(executedScriptRow["Filename"]); AssertFileFromDBExistInDictionaryFolderFiles(testName, incSctipFilesDictionary, filename); FileInfo fiScriptFile = incSctipFilesDictionary[filename]; AssertScriptFileAndDBRowHasSameHash(testName, fiScriptFile, executedScriptRow); } string[] arrRptAllScriptFiles = Directory.GetFiles(projectConfig.RepeatableScriptsFolderPath, $"{_repeatableScriptFileType.Prefix}*.sql", SearchOption.AllDirectories); Dictionary <string, FileInfo> rptSctipFilesDictionary = arrRptAllScriptFiles.Select(e => new FileInfo(e)).ToDictionary(e => e.Name); List <DataRow> rptExecutionHistoryFilesDBRows = dbScriptsExecutionHistoryFilesTable.Rows.Cast <DataRow>().Where(row => Convert.ToString(row["ScriptFileType"]) == _repeatableScriptFileType.FileTypeCode).ToList(); foreach (DataRow executedScriptRow in rptExecutionHistoryFilesDBRows) { string filename = Convert.ToString(executedScriptRow["Filename"]); AssertFileFromDBExistInDictionaryFolderFiles(testName, rptSctipFilesDictionary, filename); FileInfo fiScriptFile = rptSctipFilesDictionary[filename]; AssertScriptFileAndDBRowHasSameHash(testName, fiScriptFile, executedScriptRow); } if (projectConfig.DevEnvironment) { string[] arrDddAllScriptFiles = Directory.GetFiles(projectConfig.DevDummyDataScriptsFolderPath, $"{_devDummyDataScriptFileType.Prefix}*.sql", SearchOption.AllDirectories); Dictionary <string, FileInfo> dddSctipFilesDictionary = arrDddAllScriptFiles.Select(e => new FileInfo(e)).ToDictionary(e => e.Name); List <DataRow> dddExecutionHistoryFilesDBRows = dbScriptsExecutionHistoryFilesTable.Rows.Cast <DataRow>().Where(row => Convert.ToString(row["ScriptFileType"]) == _devDummyDataScriptFileType.FileTypeCode).ToList(); foreach (DataRow executedScriptRow in dddExecutionHistoryFilesDBRows) { string filename = Convert.ToString(executedScriptRow["Filename"]); AssertFileFromDBExistInDictionaryFolderFiles(testName, dddSctipFilesDictionary, filename); FileInfo fiScriptFile = dddSctipFilesDictionary[filename]; AssertScriptFileAndDBRowHasSameHash(testName, fiScriptFile, executedScriptRow); } } if (artifactExtractor != null) { artifactExtractor.Dispose(); artifactExtractor = null; } }