diff --git a/NEW/src/JdeScoping.DataSync/Etl/Scripts/CommonScripts.cs b/NEW/src/JdeScoping.DataSync/Etl/Scripts/CommonScripts.cs new file mode 100644 index 0000000..e3dcaa6 --- /dev/null +++ b/NEW/src/JdeScoping.DataSync/Etl/Scripts/CommonScripts.cs @@ -0,0 +1,39 @@ +using JdeScoping.DataAccess.Interfaces; +using JdeScoping.DataSync.Etl.Contracts; + +namespace JdeScoping.DataSync.Etl.Scripts; + +public static class CommonScripts +{ + public static IScriptRunner DisableIndexes(IDbConnectionFactory factory, string tableName) + { + var sql = $@" +DECLARE @sql NVARCHAR(MAX) = ''; +SELECT @sql = @sql + 'ALTER INDEX [' + i.name + '] ON [{tableName}] DISABLE;' + CHAR(13) +FROM sys.indexes i +INNER JOIN sys.tables t ON i.object_id = t.object_id +WHERE t.name = '{tableName}' + AND i.type = 2 + AND i.is_disabled = 0; +IF LEN(@sql) > 0 EXEC sp_executesql @sql;"; + + return new SqlScriptRunner(factory, sql, $"DisableIndexes:{tableName}", timeoutSeconds: 300); + } + + public static IScriptRunner RebuildIndexes(IDbConnectionFactory factory, string tableName) + { + var sql = $"ALTER INDEX ALL ON [{tableName}] REBUILD WITH (FILLFACTOR = 95)"; + return new SqlScriptRunner(factory, sql, $"RebuildIndexes:{tableName}", timeoutSeconds: 3600); + } + + public static IScriptRunner UpdateStatistics(IDbConnectionFactory factory, string tableName) + { + var sql = $"UPDATE STATISTICS [{tableName}]"; + return new SqlScriptRunner(factory, sql, $"UpdateStats:{tableName}", timeoutSeconds: 600); + } + + public static IScriptRunner CustomSql(IDbConnectionFactory factory, string sql, string name) + { + return new SqlScriptRunner(factory, sql, name); + } +} diff --git a/NEW/tests/JdeScoping.DataSync.Tests/Etl/Scripts/CommonScriptsTests.cs b/NEW/tests/JdeScoping.DataSync.Tests/Etl/Scripts/CommonScriptsTests.cs new file mode 100644 index 0000000..18f6721 --- /dev/null +++ b/NEW/tests/JdeScoping.DataSync.Tests/Etl/Scripts/CommonScriptsTests.cs @@ -0,0 +1,38 @@ +using JdeScoping.DataAccess.Interfaces; +using JdeScoping.DataSync.Etl.Scripts; +using NSubstitute; + +namespace JdeScoping.DataSync.Tests.Etl.Scripts; + +public class CommonScriptsTests +{ + private readonly IDbConnectionFactory _factory = Substitute.For(); + + [Fact] + public void DisableIndexes_ReturnsRunnerWithCorrectName() + { + var runner = CommonScripts.DisableIndexes(_factory, "WorkOrder"); + Assert.Equal("DisableIndexes:WorkOrder", runner.ScriptName); + } + + [Fact] + public void RebuildIndexes_ReturnsRunnerWithCorrectName() + { + var runner = CommonScripts.RebuildIndexes(_factory, "WorkOrder"); + Assert.Equal("RebuildIndexes:WorkOrder", runner.ScriptName); + } + + [Fact] + public void UpdateStatistics_ReturnsRunnerWithCorrectName() + { + var runner = CommonScripts.UpdateStatistics(_factory, "WorkOrder"); + Assert.Equal("UpdateStats:WorkOrder", runner.ScriptName); + } + + [Fact] + public void CustomSql_ReturnsRunnerWithProvidedName() + { + var runner = CommonScripts.CustomSql(_factory, "SELECT 1", "MyCustomScript"); + Assert.Equal("MyCustomScript", runner.ScriptName); + } +}