From 0eb08b3b6b257f90573755db1d32e6343538a9ab Mon Sep 17 00:00:00 2001 From: Michael McKechney Date: Tue, 26 Sep 2023 14:48:56 -0400 Subject: [PATCH] Concurrency Tag (#398) * Version 15.5.0 - *NEW:* For muti-database target builds, you can now specify custom concurrency tag. Previously, the only concurrency differentitor was by SQL Server Name. Please see the docs on [Concurrency](/docs/concurrency_options.md) and [Database targeting options](docs/override_options.md) to understand how to use this new feature. - *UPDATED:* DACPAC creation timeouts now set to the value of `--defaultscripttimeout`. Previously, it was using the default settings. - *UPDATED:* If a script package is failing after retries due to a timeout, the build will now immediately fail. The prior behavior was to create a custom DACPAC (if configured) and continue trying the build. This was just delaying the inevitable failure and wasting time. --- .github/workflows/container-build.yml | 2 +- CHANGELOG.md | 5 + docs/concurrency_options.md | 11 +- docs/override_options.md | 21 +- .../create_database_override_files.ps1 | 32 +- scripts/templates/Modules/aks.bicep | 4 +- .../create_all_settingsfiles_fromprefix.ps1 | 3 +- .../create_aks_settingsfile_fromprefix.ps1 | 5 + scripts/templates/kubernetes/runnerpod.yaml | 28 + src/AssemblyVersioning.cs | 4 +- src/Dockerfile | 4 +- ...dManager.Console.Dependent.UnitTest.csproj | 6 +- .../BatchTests.cs | 266 +- .../KubernetesTests.cs | 70 + ...qlBuildManager.Console.ExternalTest.csproj | 8 +- .../ConcurrencyTest.cs | 114 +- .../Properties/Resources.Designer.cs | 9 + .../Properties/Resources.resx | 3 + .../QueueMessageTest.cs | 56 +- .../Resources/concurrency_tag.cfg | 2367 +++++++++++++++++ .../SqlBuildManager.Console.UnitTest.csproj | 6 +- .../Batch/BatchManager.cs | 2 +- .../CommandLine/CommandLineBuilder.Utility.cs | 21 +- .../CommandLine/ConcurrencyType.cs | 4 +- .../KeyVault/KeyVaultHelper.cs | 2 +- .../Queue/QueueManager.cs | 99 +- .../Queue/TargetMessage.cs | 32 +- .../Threaded/Concurrency.cs | 68 +- .../Threaded/LogMsg.cs | 3 + .../Threaded/ThreadedManager.cs | 18 +- .../Threaded/ThreadedQuery.cs | 17 +- .../Threaded/ThreadedRunner.cs | 25 +- src/SqlBuildManager.Console/Validation.cs | 24 + .../Worker/Worker.Local.cs | 2 +- .../Worker/Worker.Utility.cs | 39 +- src/SqlBuildManager.Console/Worker/Worker.cs | 4 +- src/SqlBuildManager.Console/sbm.csproj | 20 +- ...SqlBuildManager.Enterprise.UnitTest.csproj | 6 +- .../Console/Enumerations.cs | 4 +- .../SqlBuildManager.Logging.csproj | 6 +- .../Threaded/EventHubLogging.cs | 2 +- ...uildManager.ScriptHandling.UnitTest.csproj | 6 +- ...lSync.Connection.Dependent.UnitTest.csproj | 6 +- .../ConnectionHelperTest.cs | 50 +- .../SqlSync.Connection.UnitTest.csproj | 6 +- src/SqlSync.Connection/ConnectionHelper.cs | 2 + src/SqlSync.Connection/DatabaseOverride.cs | 18 +- ...nc.DbInformation.Dependent.UnitTest.csproj | 6 +- ...ync.ObjectScript.Dependent.UnitTest.csproj | 6 +- .../SqlSync.ObjectScript.UnitTest.csproj | 6 +- .../SqlSync.SprocTest.csproj | 6 +- .../Initialization.cs | 2 +- .../SqlBuildHelperTest.cs | 27 +- ...SqlSync.SqlBuild.Dependent.UnitTest.csproj | 6 +- .../DbOverrideSequenceTest.cs | 12 +- .../MultiDbHelperTest.cs | 89 +- .../OverrideDataTest.cs | 4 +- .../Properties/Resources.Designer.cs | 8 + .../Properties/Resources.resx | 3 + .../Resources/serialized_multidb_json.txt | 16 + .../serialized_multidb_json_withtag_json.txt | 85 + .../Resources/serialized_multidb_xml.txt | Bin 4856 -> 5848 bytes .../SqlSync.SqlBuild.UnitTest.csproj | 8 +- .../AdHocQuery/QueryCollector.cs | 1 + src/SqlSync.SqlBuild/DacPacHelper.cs | 32 +- src/SqlSync.SqlBuild/MultiDb/MultiDbData.cs | 1 + src/SqlSync.SqlBuild/MultiDb/MultiDbHelper.cs | 39 +- src/SqlSync.SqlBuild/SqlBuildEnums.cs | 2 + src/SqlSync.SqlBuild/SqlBuildHelper.cs | 64 +- src/SqlSync/SQLSync.csproj | 2 +- src/SqlSync/SqlBuild/MultiDb/MultiDbPage.cs | 2 +- .../SqlBuild/MultiDb/MultiDbRunForm.cs | 2 +- 72 files changed, 3636 insertions(+), 303 deletions(-) create mode 100644 scripts/templates/kubernetes/runnerpod.yaml create mode 100644 src/SqlBuildManager.Console.UnitTest/Resources/concurrency_tag.cfg create mode 100644 src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json_withtag_json.txt diff --git a/.github/workflows/container-build.yml b/.github/workflows/container-build.yml index 0a29b494..fb8791f1 100644 --- a/.github/workflows/container-build.yml +++ b/.github/workflows/container-build.yml @@ -34,7 +34,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: context: "{{defaultContext}}:src" platforms: linux/amd64,linux/arm64 diff --git a/CHANGELOG.md b/CHANGELOG.md index d2c547ae..903a41d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # SQL Build Manager Change Log +### Version 15.5.0 +- *NEW:* For muti-database target builds, you can now specify custom concurrency tag. Previously, the only concurrency differentitor was by SQL Server Name. Please see the docs on [Concurrency](/docs/concurrency_options.md) and [Database targeting options](docs/override_options.md) to understand how to use this new feature. +- *UPDATED:* DACPAC creation timeouts now set to the value of `--defaultscripttimeout`. Previously, it was using the default settings. +- *UPDATED:* If a script package is failing after retries due to a timeout, the build will now immediately fail. The prior behavior was to create a custom DACPAC (if configured) and continue trying the build. This was just delaying the inevitable failure and wasting time. + ### Version 15.4.2 - *UPDATED:* Converted Batch Node Pool creation to the new `Azure.ResourceManager.Batch` SDK. **NOTE:** This may require you to add batch specific NSG rules if you deploy into a subnet. See [network.bicep's](./scripts/templates/Modules/network.bicep) `nsgBatchResource` resource to see the rules that are needed. diff --git a/docs/concurrency_options.md b/docs/concurrency_options.md index 4cac8731..6c285463 100644 --- a/docs/concurrency_options.md +++ b/docs/concurrency_options.md @@ -1,4 +1,4 @@ -# Concurrency Options for Threaded, Batch and Kubernetes executions +# Concurrency Options for Threaded, Batch, Kubernetes, Container App and ACI executions You can control the level of parallel execution with the combination of two arguments: `--concurrency` and `--concurrencytype`. While their meaning for threaded and batch/kubernetes are similar, there are some distinctions and subtleties when used together @@ -19,12 +19,19 @@ You can control the level of parallel execution with the combination of two argu - `Count` - (default) will use the value for `concurrency` as the maximum number of concurrent tasks allowed - `Server` - When using this value, the `concurrency` value is ignored. Instead, the app will interrogate the database targets and allow one task per SQL Server at a time - _For example:_ if there are 5 unuque SQL Server targets in the database targets config, there will 1 task per server, up to 5 concurrent tasks total + _For example:_ if there are 5 unique SQL Server targets in the database targets config, there will 1 task per server, up to 5 concurrent tasks total - `MaxPerServer` - Will interrogate the database targets and allow multiple tasks per server, up to the `concurrency` value. _For example:_ If there are 5 unique SQL Server targets in the database targets config file and the `concurrency` flag is set to 3, then it will run 3 tasks per server at a time, up to 15 concurrent tasks (5 servers * 3 tasks per server). +- `Tag` - Same behavior as `Server` but allows you to set a concurrency value per tag value instead of server. See [database targets config file](override_options.md) for details on setting the concurrency tag value. + +- `MaxPerTag` - - Same behavior as `MaxPerServer` but allows you to set a concurrency value per tag value instead of server. See [database targets config file](override_options.md) for details on setting the concurrency tag value + +*NOTE:* If a concurrency typf of `Tag` or `MaxPerTag` is set but there are database targets that are missing a tag value, the build will not start. + + ### --concurrency This argument takes an integer number (default is 8) defining the maximum number of concurrent threads per the set `concurrencytype` diff --git a/docs/override_options.md b/docs/override_options.md index c26d06e8..048a9f40 100644 --- a/docs/override_options.md +++ b/docs/override_options.md @@ -31,6 +31,21 @@ sqllab1.database.windows.net:client,SqlBuildTest009 sqllab1.database.windows.net:client,SqlBuildTest010 ``` +Optionally, if you need to set a concurrency value other that the target server (see [Concurrency Options](concurrency_options.md) for how to leverage the `Tag` and `MaxPerTag` settings), you can add a tag value to the line in the format of: + +``` bash +:client,# +``` + +for example: + +``` bash +sqllab1.database.windows.net:client,SqlBuildTest007#Tag1 +sqllab1.database.windows.net:client,SqlBuildTest008#Tag1 +sqllab1.database.windows.net:client,SqlBuildTest009#Tag2 +sqllab1.database.windows.net:client,SqlBuildTest010#Tag2 +``` + Why `client`? Inside the `.sbm` file, there is a default database target set to `client`. If you don't provide an override, it will look for a database of that name. So, that combination of `client,target` tells the builder to substitute the database name `client` with the database name `target` at runtime. This is why the flag name is `--override`! @@ -42,7 +57,11 @@ Why `client`? Inside the `.sbm` file, there is a default database target set to ``` sql SELECT [ServerName] + ':client,' + [DatabaseName] - ``` + + or + + SELECT [ServerName] + ':client,' + [DatabaseName] + '#' + [TagValue] + ``` ### Runtime diff --git a/scripts/templates/Database/create_database_override_files.ps1 b/scripts/templates/Database/create_database_override_files.ps1 index 63c1ee79..04adea48 100644 --- a/scripts/templates/Database/create_database_override_files.ps1 +++ b/scripts/templates/Database/create_database_override_files.ps1 @@ -1,8 +1,7 @@ param ( [string] $path, - [string] $prefix, - [string] $resourceGroupName + [string] $prefix ) . ./../prefix_resource_names.ps1 -prefix $prefix @@ -16,7 +15,11 @@ $outputDbConfigFile = Join-Path $path "databasetargets.cfg" $databaseDbWithBadTargetConfigFile = Join-Path $path "databasetargets-badtargets.cfg" $clientDbConfigFile = Join-Path $path "clientdbtargets.cfg" $doubleClientDbConfigFile = Join-Path $path "clientdbtargets-doubledb.cfg" +$taggedDbConfigFile = Join-Path $path "databasetargets-tag.cfg" +$taggedClientDbConfigFile = Join-Path $path "clientdbtargets-tag.cfg" $serverTextFile = Join-Path $path "server.txt" +$tag = @("TagA","TagB","TagC") +$counter = 0 $sqlServers = (az sql server list --resource-group $resourceGroupName ) | ConvertFrom-Json Write-Host "Using server targets: $sqlServers" -ForegroundColor Cyan @@ -28,10 +31,19 @@ foreach($server in $sqlServers) { if($db -ne "master") { + if($counter -gt 2) + { + $counter = 0 + } $outputDbConfig += ,@($server.fullyQualifiedDomainName + ":SqlBuildTest,"+$db) $databaseDbWithBadTargetConfig += ,@($server.fullyQualifiedDomainName + ":SqlBuildTest,"+$db) + $taggedDbConfig += ,@($server.fullyQualifiedDomainName + ":SqlBuildTest,"+$db +"#" + $tag[$counter]) + $taggedClientDbConfig += ,@($server.fullyQualifiedDomainName + ":client,"+$db +"#" + $tag[$counter]) $clientDbConfig += ,@($server.fullyQualifiedDomainName + ":client,"+$db) + $counter = $counter +1; } + + } $databaseDbWithBadTargetConfig += ,@($server.fullyQualifiedDomainName + ":SqlBuildTest,ThisIsABadDbName") } @@ -52,18 +64,24 @@ foreach($server in $sqlServers) } <# Action that will repeat until the condition is met #> -Write-Host "Writing test database config to path set to $outputDbConfigFile" -ForegroundColor DarkGreen +Write-Host "Writing test database config to $outputDbConfigFile" -ForegroundColor DarkGreen $outputDbConfig | Set-Content -Path $outputDbConfigFile -Write-Host "Writing test database config to path set to $clientDbConfigFile" -ForegroundColor DarkGreen +Write-Host "Writing test database config to path $clientDbConfigFile" -ForegroundColor DarkGreen $clientDbConfig | Set-Content -Path $clientDbConfigFile -Write-Host "Writing test database config to path set to $doubleClientDbConfigFile" -ForegroundColor DarkGreen +Write-Host "Writing test database config with tags to path $taggedClientDbConfigFile" -ForegroundColor DarkGreen +$taggedClientDbConfigFile | Set-Content -Path $taggedClientDbConfigFile + +Write-Host "Writing test database config to path $doubleClientDbConfigFile" -ForegroundColor DarkGreen $doubleClientDbConfig | Set-Content -Path $doubleClientDbConfigFile -Write-Host "Writing test database config to path set to $databaseDbWithBadTargetConfigFile" -ForegroundColor DarkGreen +Write-Host "Writing test database config to path $databaseDbWithBadTargetConfigFile" -ForegroundColor DarkGreen $databaseDbWithBadTargetConfig | Set-Content -Path $databaseDbWithBadTargetConfigFile +Write-Host "Writing test database config with tags to path $taggedDbConfigFile" -ForegroundColor DarkGreen +$taggedDbConfig | Set-Content -Path $taggedDbConfigFile Write-Host "Creating server.txt file for SQL Query override config tests" -ForegroundColor DarkGreen -$sqlServers[0].fullyQualifiedDomainName.trim() | Set-Content -Path $serverTextFile \ No newline at end of file +$sqlServers[0].fullyQualifiedDomainName.trim() | Set-Content -Path $serverTextFile + diff --git a/scripts/templates/Modules/aks.bicep b/scripts/templates/Modules/aks.bicep index 8744662e..5e8d32c3 100644 --- a/scripts/templates/Modules/aks.bicep +++ b/scripts/templates/Modules/aks.bicep @@ -35,11 +35,11 @@ resource aksAcrPull 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' } } -resource aks 'Microsoft.ContainerService/managedClusters@2022-05-02-preview' = { +resource aks 'Microsoft.ContainerService/managedClusters@2023-05-01' = { name: aksClusterName location: location sku:{ - name: 'Basic' + name: 'Base' tier: 'Free' } identity: { diff --git a/scripts/templates/create_all_settingsfiles_fromprefix.ps1 b/scripts/templates/create_all_settingsfiles_fromprefix.ps1 index 99b3736c..189932af 100644 --- a/scripts/templates/create_all_settingsfiles_fromprefix.ps1 +++ b/scripts/templates/create_all_settingsfiles_fromprefix.ps1 @@ -22,4 +22,5 @@ param ( ./aci/create_aci_settingsfile_fromprefix.ps1 -sbmExe $sbmExe -path $outputPath -resourceGroupName $resourceGroupName -prefix $prefix -./Database/create_database_override_files.ps1 -sbmExe $sbmExe -path $outputPath -resourceGroupName $resourceGroupName \ No newline at end of file +. ./prefix_resource_names.ps1 -prefix $prefix +./Database/create_database_override_files.ps1 -path $outputPath -prefix $prefix \ No newline at end of file diff --git a/scripts/templates/kubernetes/create_aks_settingsfile_fromprefix.ps1 b/scripts/templates/kubernetes/create_aks_settingsfile_fromprefix.ps1 index ea1af7ec..522ef0d6 100644 --- a/scripts/templates/kubernetes/create_aks_settingsfile_fromprefix.ps1 +++ b/scripts/templates/kubernetes/create_aks_settingsfile_fromprefix.ps1 @@ -50,3 +50,8 @@ Write-Host "Using keyvault name: '$keyVaultName'" -ForegroundColor DarkGreen $scriptDir = Split-Path $script:MyInvocation.MyCommand.Path .$scriptDir/create_aks_settingsfile.ps1 -sbmExe $sbmExe -path $path -resourceGroupName $resourceGroupName -storageAccountName $storageAccountName -eventHubNamespaceName $eventHubNamespaceName -serviceBusNamespaceName $serviceBusNamespaceName -sqlUserName $sqlUserName -sqlPassword $sqlPassword -acrName $containerRegistryName -keyVaultName $keyVaultName -serviceAccount $serviceAccountName -podCount $podCount +$yaml = Join-Path -Path $scriptDir -ChildPath "runnerpod.yaml" +$destYaml = Join-Path -Path $path -ChildPath "runnerpod.yaml" +(Get-Content $yaml) | foreach-object { $_ -replace "<>", $prefix } | Set-Content $destYaml + + diff --git a/scripts/templates/kubernetes/runnerpod.yaml b/scripts/templates/kubernetes/runnerpod.yaml new file mode 100644 index 00000000..e9c93294 --- /dev/null +++ b/scripts/templates/kubernetes/runnerpod.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Pod +metadata: + name: sbm-runner + namespace: sqlbuildmanager + labels: + azure.workload.identity/use: 'true' +spec: + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: <>serviceaccount + containers: + - name: sbm-runner + image: <>containerregistry.azurecr.io/sqlbuildmanager:latest-vNext + imagePullPolicy: Always + resources: + limits: + memory: 512M + cpu: 500m + command: + - sh + - -c + - tail -f /dev/null + restartPolicy: Always + + +#kubectl get pods -n sqlbuildmanager +#kubectl exec --stdin --tty sbm-runner -n sqlbuildmanager -- /bin/bash diff --git a/src/AssemblyVersioning.cs b/src/AssemblyVersioning.cs index c67a3d2c..2b4ed24c 100644 --- a/src/AssemblyVersioning.cs +++ b/src/AssemblyVersioning.cs @@ -24,5 +24,5 @@ // 2) Update the installer version to match the AssemblyVersion below. // These can be found in SqlBuildManager.Setup -> Organize Your Setup -> General Information -[assembly: AssemblyVersion("15.4.2")] -[assembly: AssemblyFileVersion("15.4.2")] +[assembly: AssemblyVersion("15.5.0")] +[assembly: AssemblyFileVersion("15.5.0")] diff --git a/src/Dockerfile b/src/Dockerfile index 44f6dd15..20f49d91 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,9 +1,9 @@ #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. -FROM mcr.microsoft.com/dotnet/runtime:7.0.5-jammy-amd64 AS base +FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base WORKDIR /app -FROM mcr.microsoft.com/dotnet/sdk:7.0.203-jammy-amd64 AS build +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src diff --git a/src/SqlBuildManager.Console.Dependent.UnitTest/SqlBuildManager.Console.Dependent.UnitTest.csproj b/src/SqlBuildManager.Console.Dependent.UnitTest/SqlBuildManager.Console.Dependent.UnitTest.csproj index afdfac58..34b69114 100644 --- a/src/SqlBuildManager.Console.Dependent.UnitTest/SqlBuildManager.Console.Dependent.UnitTest.csproj +++ b/src/SqlBuildManager.Console.Dependent.UnitTest/SqlBuildManager.Console.Dependent.UnitTest.csproj @@ -62,9 +62,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlBuildManager.Console.ExternalTest/BatchTests.cs b/src/SqlBuildManager.Console.ExternalTest/BatchTests.cs index 5066b452..e8c55bec 100644 --- a/src/SqlBuildManager.Console.ExternalTest/BatchTests.cs +++ b/src/SqlBuildManager.Console.ExternalTest/BatchTests.cs @@ -12,6 +12,7 @@ using SqlBuildManager.Console.Batch; using Microsoft.Azure.Batch.Auth; using Microsoft.Azure.Batch; +using System.Threading; namespace SqlBuildManager.Console.ExternalTest { @@ -31,6 +32,7 @@ public class BatchTests private string settingsFilePath; private string linuxSettingsFilePath; private string settingsFileKeyPath; + private string overrideWithTagFilePath; private string un; private string pw; private string server; @@ -44,6 +46,7 @@ public void ConfigureProcessInfo() settingsFileKeyPath = Path.GetFullPath("TestConfig/settingsfilekey.txt"); linuxSettingsFilePath = Path.GetFullPath("TestConfig/settingsfile-batch-linux.json"); overrideFilePath = Path.GetFullPath("TestConfig/databasetargets.cfg"); + overrideWithTagFilePath = Path.GetFullPath("TestConfig/databasetargets-tag.cfg"); overrideFileWithBadTargetsPath = Path.GetFullPath("TestConfig/databasetargets-badtargets.cfg"); un = File.ReadAllText(Path.GetFullPath("TestConfig/un.txt")).Trim(); pw = File.ReadAllText(Path.GetFullPath("TestConfig/pw.txt")).Trim(); @@ -118,7 +121,199 @@ public static string ReleventLogFileContents(int startingLine) #endregion + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Tag, 10)] + [DataRow("run", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Tag, 10)] + [DataRow("run", "TestConfig/settingsfile-batch-linux.json", ConcurrencyType.Tag, 10)] + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.MaxPerTag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.MaxPerTag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-linux.json", ConcurrencyType.MaxPerTag, 2)] + [DataTestMethod] + public void Batch_Override_SBMSource_ByTag_ConcurrencyType_Success(string batchMethod, string settingsFile, ConcurrencyType concurType, int concurrency) + { + string sbmFileName = Path.GetFullPath("SimpleSelect.sbm"); + if (!File.Exists(sbmFileName)) + { + File.WriteAllBytes(sbmFileName, Properties.Resources.SimpleSelect); + } + + settingsFile = Path.GetFullPath(settingsFile); + string jobName = GetUniqueBatchJobName("batch-sbm-tag"); + + //get the size of the log file before we start + int startingLine = LogFileCurrentLineCount(); + + var args = new string[]{ + "--loglevel", "Debug", + "batch", batchMethod, + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--override", overrideWithTagFilePath, + "--packagename", sbmFileName, + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), + "--jobname", jobName, + "--unittest", + "--monitor", + "--stream", + "--eventhublogging", EventHubLogging.IndividualScriptResults.ToString()}; + + RootCommand rootCommand = CommandLineBuilder.SetUp(); + var val = rootCommand.InvokeAsync(args); + val.Wait(); + var result = val.Result; + + + var logFileContents = ReleventLogFileContents(startingLine); + Assert.AreEqual(0, result, StandardExecutionErrorMessage(logFileContents)); + Assert.IsTrue(logFileContents.Contains("Completed Successfully"), "This test was should have worked"); + if (batchMethod == "run") + { + Assert.IsTrue(logFileContents.Contains($"Batch complete"), $"Should indicate that this was run as a batch job"); + } + if (batchMethod == "runthreaded") + { + Assert.IsTrue(logFileContents.Contains($"Total number of targets: {overrideFileContents.Count()}"), $"Should have run against a {overrideFileContents.Count()} databases"); + } + } + + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Tag, 10)] + [DataRow("run", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Tag, 10)] + [DataRow("run", "TestConfig/settingsfile-batch-linux.json", ConcurrencyType.Tag, 10)] + + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.MaxPerTag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.MaxPerTag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-linux.json", ConcurrencyType.MaxPerTag, 2)] + [DataTestMethod] + public void Batch_Override_SBMSource_ByTag_ConcurrencyType_MissingTag_Fail(string batchMethod, string settingsFile, ConcurrencyType concurType, int concurrency) + { + string sbmFileName = Path.GetFullPath("SimpleSelect.sbm"); + if (!File.Exists(sbmFileName)) + { + File.WriteAllBytes(sbmFileName, Properties.Resources.SimpleSelect); + } + + settingsFile = Path.GetFullPath(settingsFile); + string jobName = GetUniqueBatchJobName("batch-sbm-tag"); + + //get the size of the log file before we start + int startingLine = LogFileCurrentLineCount(); + + var args = new string[]{ + "--loglevel", "Debug", + "batch", batchMethod, + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--override", overrideFilePath, + "--packagename", sbmFileName, + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), + "--jobname", jobName, + "--unittest", + "--monitor", + "--stream", + "--eventhublogging", EventHubLogging.IndividualScriptResults.ToString()}; + + RootCommand rootCommand = CommandLineBuilder.SetUp(); + var val = rootCommand.InvokeAsync(args); + val.Wait(); + var result = val.Result; + Assert.IsTrue(val.Result != 0); + } + + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue-keyvault.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue-keyvault.json", ConcurrencyType.Tag, 2)] + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue-keyvault.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue-keyvault.json", ConcurrencyType.MaxPerTag, 5)] + [DataTestMethod] + public void Batch_Queue_SBMSource_ByTag_ConcurrencyType_Success(string batchMethod, string settingsFile, ConcurrencyType concurType, int concurrency) + { + settingsFile = Path.GetFullPath(settingsFile); + string sbmFileName = Path.GetFullPath("SimpleSelect.sbm"); + if (!File.Exists(sbmFileName)) + { + File.WriteAllBytes(sbmFileName, Properties.Resources.SimpleSelect); + } + string jobName = GetUniqueBatchJobName("batch-sbm-tag"); + int startingLine = LogFileCurrentLineCount(); + + var args = new string[]{ + "batch", "enqueue", + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--override" , overrideWithTagFilePath, + "--concurrencytype", concurType.ToString(), + "--jobname", jobName}; + + RootCommand rootCommand = CommandLineBuilder.SetUp(); + Task val = rootCommand.InvokeAsync(args); + val.Wait(); + var result = val.Result; + + var logFileContents = ReleventLogFileContents(startingLine); + Assert.AreEqual(0, result, StandardExecutionErrorMessage(logFileContents)); + + args = new string[]{ + "--loglevel", "debug", + "batch", batchMethod, + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--override", overrideWithTagFilePath, + "--packagename", sbmFileName, + "--concurrencytype", concurType.ToString(), + "--concurrency", concurrency.ToString(), + "--jobname", jobName, + "--unittest", + "--monitor", + "--stream" }; + + + val = rootCommand.InvokeAsync(args); + val.Wait(); + result = val.Result; + + logFileContents = ReleventLogFileContents(startingLine); + Assert.AreEqual(0, result, StandardExecutionErrorMessage(logFileContents)); + } + + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue.json", ConcurrencyType.Tag, 2)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue-keyvault.json", ConcurrencyType.Tag, 2)] + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows-queue.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-linux-queue.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("run", "TestConfig/settingsfile-batch-windows-queue-keyvault.json", ConcurrencyType.MaxPerTag, 5)] + [DataTestMethod] + public void Batch_Queue_SBMSource_ByTag_ConcurrencyType_MissingTag_Fail(string batchMethod, string settingsFile, ConcurrencyType concurType, int concurrency) + { + settingsFile = Path.GetFullPath(settingsFile); + string sbmFileName = Path.GetFullPath("SimpleSelect.sbm"); + if (!File.Exists(sbmFileName)) + { + File.WriteAllBytes(sbmFileName, Properties.Resources.SimpleSelect); + } + string jobName = GetUniqueBatchJobName("batch-sbm-tag"); + int startingLine = LogFileCurrentLineCount(); + + var args = new string[]{ + "batch", "enqueue", + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--override" , overrideFilePath, + "--concurrencytype", concurType.ToString(), + "--jobname", jobName}; + + RootCommand rootCommand = CommandLineBuilder.SetUp(); + Task val = rootCommand.InvokeAsync(args); + val.Wait(); + Assert.IsTrue(val.Result != 0); + + } [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Count, 10)] [DataRow("run", "TestConfig/settingsfile-batch-windows.json", ConcurrencyType.Count, 10)] @@ -153,9 +348,13 @@ public void Batch_Override_SBMSource_ByConcurrencyType_Success(string batchMetho "--settingsfilekey", settingsFileKeyPath, "--override", overrideFilePath, "--packagename", sbmFileName, - "--concurrency", "2", - "--concurrencytype","Server", - "--jobname", jobName }; + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), + "--jobname", jobName, + "--unittest", + "--monitor", + "--stream", + "--eventhublogging", EventHubLogging.IndividualScriptResults.ToString()}; RootCommand rootCommand = CommandLineBuilder.SetUp(); var val = rootCommand.InvokeAsync(args); @@ -201,8 +400,8 @@ public void Batch_OverrideWithBadTarget_SBMSource_ByConcurrencyType_Fail(string "--settingsfilekey", settingsFileKeyPath, "--override", overrideFileWithBadTargetsPath, "--packagename", sbmFileName, - "--concurrency", "2", - "--concurrencytype","Server", + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), "--jobname", jobName }; RootCommand rootCommand = CommandLineBuilder.SetUp(); @@ -263,8 +462,8 @@ public void Batch_SqlScriptOverride_SBMSource_Success(string batchMethod, string "--settingsfilekey", settingsFileKeyPath, "--override", tmpOverride, "--packagename", sbmFileName, - "--concurrency", "2", - "--concurrencytype","Server", + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), "--jobname", jobName}; rootCommand = CommandLineBuilder.SetUp(); @@ -292,8 +491,6 @@ public void Batch_SqlScriptOverride_SBMSource_Success(string batchMethod, string catch { } } - - [DataRow("run", "TestConfig/settingsfile-batch-windows-mi.json", ConcurrencyType.Count, 10)] [DataRow("run", "TestConfig/settingsfile-batch-linux-mi.json", ConcurrencyType.Count, 10)] [DataTestMethod] @@ -318,8 +515,8 @@ public void Batch_Override_SBMSource_ManagedIdentity_ByConcurrencyType_Success(s "--settingsfilekey", settingsFileKeyPath, "--override", overrideFilePath, "--packagename", sbmFileName, - "--concurrency", "2", - "--concurrencytype","Server", + "--concurrency", concurrency.ToString(), + "--concurrencytype",concurType.ToString(), "--jobname", jobName}; @@ -342,8 +539,6 @@ public void Batch_Override_SBMSource_ManagedIdentity_ByConcurrencyType_Success(s } } - - [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-linux.json")] @@ -374,7 +569,6 @@ public void Batch_Override_SBMSource_RunWithError_MissingPackage(string batchMet Assert.IsTrue(logFileContents.Contains("Invalid command line set") && logFileContents.ToLower().Contains("packagename"), "This test should report a missing commandline"); } - [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-linux.json")] @@ -472,6 +666,7 @@ public void Batch_Override_PlatinumDbSource_FirstDbAlreadyInSync(string batchMet } } + [DataRow("runthreaded", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-windows.json")] [DataRow("run", "TestConfig/settingsfile-batch-linux.json")] @@ -1735,33 +1930,38 @@ public void Batch_Queue_LongRunning_SBMSource_ByConcurrencyType_Success(string b [DataTestMethod] public async Task CreateBatchPool_Success(string settingsFile, string settingsFileKeyPath) { - var poolId = "TestPool1"; - settingsFile = Path.GetFullPath(settingsFile); - CommandLineArgs cmdLine = new CommandLineArgs(); - cmdLine.SettingsFileKey = settingsFileKeyPath; - cmdLine.FileInfoSettingsFile = new FileInfo(settingsFile); - if (cmdLine.IdentityArgs != null) SqlBuildManager.Console.Aad.AadHelper.ManagedIdentityClientId = cmdLine.IdentityArgs.ClientId; - if (cmdLine.IdentityArgs != null) SqlBuildManager.Console.Aad.AadHelper.TenantId = cmdLine.IdentityArgs.TenantId; + var poolId = "TestPool1"; + settingsFile = Path.GetFullPath(settingsFile); - - BatchManager mgr = new BatchManager(cmdLine); - var result = await mgr.CreateBatchPool(cmdLine, poolId); - - Assert.IsTrue(result); + CommandLineArgs cmdLine = new CommandLineArgs(); + cmdLine.SettingsFileKey = settingsFileKeyPath; + cmdLine.FileInfoSettingsFile = new FileInfo(settingsFile); + if (cmdLine.IdentityArgs != null) SqlBuildManager.Console.Aad.AadHelper.ManagedIdentityClientId = cmdLine.IdentityArgs.ClientId; + if (cmdLine.IdentityArgs != null) SqlBuildManager.Console.Aad.AadHelper.TenantId = cmdLine.IdentityArgs.TenantId; - - var batchToken = await SqlBuildManager.Console.Aad.AadHelper.GetBatchTokenString(); - BatchTokenCredentials batchTokenCredentials = new BatchTokenCredentials(cmdLine.ConnectionArgs.BatchAccountUrl, batchToken); - BatchClient batchClient = BatchClient.Open(batchTokenCredentials); - var existingPool = await batchClient.PoolOperations.GetPoolAsync(poolId); + BatchManager mgr = new BatchManager(cmdLine); + var result = await mgr.CreateBatchPool(cmdLine, poolId); + Assert.IsTrue(result); - Assert.IsNotNull(existingPool); - Assert.IsNotNull(existingPool.Identity); + var batchToken = await SqlBuildManager.Console.Aad.AadHelper.GetBatchTokenString(); + BatchTokenCredentials batchTokenCredentials = new BatchTokenCredentials(cmdLine.ConnectionArgs.BatchAccountUrl, batchToken); + BatchClient batchClient = BatchClient.Open(batchTokenCredentials); + try + { + var existingPool = await batchClient.PoolOperations.GetPoolAsync(poolId); + + Assert.IsNotNull(existingPool); + Assert.IsNotNull(existingPool.Identity); + } + finally + { + batchClient.PoolOperations.DeletePool(poolId); + } } } diff --git a/src/SqlBuildManager.Console.ExternalTest/KubernetesTests.cs b/src/SqlBuildManager.Console.ExternalTest/KubernetesTests.cs index 3f67db09..ca2adf6e 100644 --- a/src/SqlBuildManager.Console.ExternalTest/KubernetesTests.cs +++ b/src/SqlBuildManager.Console.ExternalTest/KubernetesTests.cs @@ -364,6 +364,76 @@ public void Kubernetes_Run_Queue_DoubleDbConfig_SBMSource_Success(string setting } + [DataRow("TestConfig/settingsfile-k8s-kv.json", ConcurrencyType.Count, 5)] + [DataRow("TestConfig/settingsfile-k8s-kv.json", ConcurrencyType.Server, 5)] + [DataRow("TestConfig/settingsfile-k8s-kv.json", ConcurrencyType.MaxPerServer, 5)] + [DataRow("TestConfig/settingsfile-k8s-kv.json", ConcurrencyType.Tag, 5)] + [DataRow("TestConfig/settingsfile-k8s-kv.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("TestConfig/settingsfile-k8s-kv-mi.json", ConcurrencyType.MaxPerTag, 5)] + [DataRow("TestConfig/settingsfile-k8s-sec-mi.json", ConcurrencyType.MaxPerTag, 3)] + [DataRow("TestConfig/settingsfile-k8s-sec.json", ConcurrencyType.MaxPerServer, 5)] + [DataTestMethod] + public void Kubernetes_Run_Queue_Concurrency_SBMSource_Success(string settingsFile, ConcurrencyType concurType, int concurrencyCount) + { + try + { + var prc = new ProcessHelper(); + settingsFile = Path.GetFullPath(settingsFile); + var overrideFilePlain = Path.GetFullPath("TestConfig/databasetargets.cfg"); + var overrideFileTags = Path.GetFullPath("TestConfig/databasetargets-tag.cfg"); + var overrideFile = concurType == ConcurrencyType.Tag || concurType == ConcurrencyType.MaxPerTag ? overrideFileTags : overrideFilePlain; + + var sbmFileName = Path.GetFullPath("SimpleSelect.sbm"); + if (!File.Exists(sbmFileName)) + { + File.WriteAllBytes(sbmFileName, Properties.Resources.SimpleSelect_DoubleClient); + } + string jobName = TestHelper.GetUniqueJobName("k8s"); + + + //get the size of the log file before we start + int startingLine = TestHelper.LogFileCurrentLineCount(); + + RootCommand rootCommand = CommandLineBuilder.SetUp(); + + //Clear any exiting pods + var result = prc.ExecuteProcess("kubectl", $"delete job sqlbuildmanager "); + + var args = new string[] + { + "--loglevel", "debug", + "k8s", "run", + "--settingsfile", settingsFile, + "--settingsfilekey", settingsFileKeyPath, + "--jobname", jobName, + "--override", overrideFile, + "--packagename", sbmFileName, + "--force", + "--unittest", + "--stream", + "--concurrencytype", concurType.ToString(), + "--concurrency", concurrencyCount.ToString() + }; + + + var val = rootCommand.InvokeAsync(args); + val.Wait(); + result = val.Result; + + Assert.AreEqual(0, result); + + var logFileContents = TestHelper.ReleventLogFileContents(startingLine); + + var dbCount = File.ReadAllText(overrideFile).Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries).Length; + Assert.IsTrue(ConsoleOutput.ToString().Contains($"Database Commits: {dbCount.ToString().PadLeft(5, '0')}")); + } + finally + { + Debug.WriteLine(ConsoleOutput.ToString()); + } + + } + //Can't run local unit tests with MI since an SBM package needs to be created :-) [DataRow("TestConfig/settingsfile-k8s-kv.json")] [DataRow("TestConfig/settingsfile-k8s-sec.json")] diff --git a/src/SqlBuildManager.Console.ExternalTest/SqlBuildManager.Console.ExternalTest.csproj b/src/SqlBuildManager.Console.ExternalTest/SqlBuildManager.Console.ExternalTest.csproj index 8bb73f80..dccf886b 100644 --- a/src/SqlBuildManager.Console.ExternalTest/SqlBuildManager.Console.ExternalTest.csproj +++ b/src/SqlBuildManager.Console.ExternalTest/SqlBuildManager.Console.ExternalTest.csproj @@ -8,15 +8,15 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/SqlBuildManager.Console.UnitTest/ConcurrencyTest.cs b/src/SqlBuildManager.Console.UnitTest/ConcurrencyTest.cs index 9492b624..037413a5 100644 --- a/src/SqlBuildManager.Console.UnitTest/ConcurrencyTest.cs +++ b/src/SqlBuildManager.Console.UnitTest/ConcurrencyTest.cs @@ -15,18 +15,30 @@ namespace SqlBuildManager.Console.UnitTest [TestClass()] public partial class ConcurrencyTest { - internal static (string, MultiDbData) GetMultiDbData(bool doubleTarget = false) + internal enum MultiDbType + { + SingleTarget, + DoubleTarget, + Tag + } + internal static (string, MultiDbData) GetMultiDbData(MultiDbType targetType) { var tmpCfg = Path.GetTempPath() + Guid.NewGuid().ToString() + ".cfg"; - if (doubleTarget) - { - File.WriteAllBytes(tmpCfg, Properties.Resources.concurrency_doubledb); - } - else - { - File.WriteAllBytes(tmpCfg, Properties.Resources.concurrency); + switch (targetType) + { + case MultiDbType.DoubleTarget: + File.WriteAllBytes(tmpCfg, Properties.Resources.concurrency_doubledb); + break; + case MultiDbType.Tag: + File.WriteAllBytes(tmpCfg, Properties.Resources.concurrency_tag); + break; + case MultiDbType.SingleTarget: + default: + File.WriteAllBytes(tmpCfg, Properties.Resources.concurrency); + break; } + MultiDbData multiData; string[] errorMessages; CommandLineArgs cmdLine = new CommandLineArgs() @@ -280,7 +292,7 @@ public void DbOverrideFlattenTest() try { - (tmpFile, multiData) = GetMultiDbData(); + (tmpFile, multiData) = GetMultiDbData( MultiDbType.SingleTarget); var flattened = Concurrency.FlattenOverride(multiData); Assert.AreEqual(2366, flattened.Count); @@ -306,7 +318,7 @@ public void DbOverrideSimpleBatchTest(int concurrencyCount) try { - (tmpFile, multiData) = GetMultiDbData(); + (tmpFile, multiData) = GetMultiDbData(MultiDbType.SingleTarget); var flattened = Concurrency.FlattenOverride(multiData); int totalRowCount = flattened.Count(); double expectedChunks = Math.Ceiling((double)totalRowCount / (double)concurrencyCount); @@ -327,14 +339,14 @@ public void DbOverrideSimpleBatchTest(int concurrencyCount) } [TestMethod] - public void DbOverrideConcurrencyByServerTest() + public void DbOverrideConcurrency_ByServer_Test() { string tmpFile = string.Empty; MultiDbData multiData; try { - (tmpFile, multiData) = GetMultiDbData(); + (tmpFile, multiData) = GetMultiDbData(MultiDbType.SingleTarget); var output = Concurrency.ConcurrencyByServer(multiData); Assert.AreEqual(449, output[0].Count()); Assert.AreEqual(5, output.Count()); @@ -349,6 +361,76 @@ public void DbOverrideConcurrencyByServerTest() } } + [TestMethod] + public void DbOverrideConcurrency_MaxConcurrency_ByTag_Test() + { + string tmpFile = string.Empty; + MultiDbData multiData; + + try + { + (tmpFile, multiData) = GetMultiDbData(MultiDbType.Tag); + var output = Concurrency.ConcurrencyByType(multiData, 10, ConcurrencyType.MaxPerTag); + Assert.AreEqual(70, output.Count()); + Assert.AreEqual(5, output[0].Count()); + Assert.AreEqual(28, output.Last().Count()); + Assert.AreEqual("#PoolA", output[0].First().Item1); + Assert.AreEqual("#PoolA", output[3].First().Item1); + Assert.AreEqual(5, output[3].Count()); + + Assert.AreEqual("#PoolA", output[7].First().Item1); + Assert.AreEqual(5, output[7].Count()); + + Assert.AreEqual("#PoolC", output[26].First().Item1); + Assert.AreEqual(30, output[26].Count()); + + Assert.AreEqual("#PoolD", output[36].First().Item1); + Assert.AreEqual(30, output[36].Count()); + + Assert.AreEqual("#PoolE", output[41].First().Item1); + Assert.AreEqual(50, output[41].Count()); + + Assert.AreEqual("#PoolF", output[59].First().Item1); + Assert.AreEqual(75, output[59].Count()); + + Assert.AreEqual("#PoolG", output.Last().First().Item1); + Assert.AreEqual(28, output.Last().Count()); + } + finally + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + } + + [TestMethod] + public void DbOverrideConcurrency_Concurrency_ByTag_Test() + { + string tmpFile = string.Empty; + MultiDbData multiData; + + try + { + (tmpFile, multiData) = GetMultiDbData(MultiDbType.Tag); + var output = Concurrency.ConcurrencyByType(multiData, 50, ConcurrencyType.Tag); + Assert.AreEqual(7, output.Count()); + Assert.AreEqual(50, output[0].Count()); + Assert.AreEqual(316, output.Last().Count()); + Assert.AreEqual("#PoolA", output[0].First().Item1); + Assert.AreEqual("#PoolD", output[3].First().Item1); + Assert.AreEqual("#PoolG", output.Last().First().Item1); + } + finally + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + } + [TestMethod] public void DbOverride_DoubleDb_ConcurrencyByServerTest() { @@ -357,7 +439,7 @@ public void DbOverride_DoubleDb_ConcurrencyByServerTest() try { - (tmpFile, multiData) = GetMultiDbData(true); + (tmpFile, multiData) = GetMultiDbData(MultiDbType.DoubleTarget); var output = Concurrency.ConcurrencyByServer(multiData); Assert.AreEqual(449, output[0].Count()); Assert.AreEqual(5, output.Count()); @@ -384,7 +466,7 @@ public void DbOverrideMaxConcurrencyByServerTest(int concurrency, int totalChunk try { - (tmpFile, multiData) = GetMultiDbData(); + (tmpFile, multiData) = GetMultiDbData(MultiDbType.SingleTarget); var output = Concurrency.MaxConcurrencyByServer(multiData, concurrency); Assert.AreEqual(totalChunks, output.Count()); Assert.AreEqual(firstCount, output.First().Count()); @@ -497,11 +579,11 @@ public void QueueMessage_Creation_Test() try { - (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(true); + (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(MultiDbType.DoubleTarget) ; var output = Concurrency.ConcurrencyByInt(multiData, 10); var qMgr = new QueueManager("", "testing", CommandLine.ConcurrencyType.Count, true); - var messages = qMgr.CreateMessages(output, "testing"); + var messages = qMgr.CreateMessages(output, "testing", CommandLine.ConcurrencyType.Count); var msg = messages.First().As(); Assert.AreEqual(2, msg.DbOverrideSequence.Count()); } diff --git a/src/SqlBuildManager.Console.UnitTest/Properties/Resources.Designer.cs b/src/SqlBuildManager.Console.UnitTest/Properties/Resources.Designer.cs index 007f1766..7a1e1237 100644 --- a/src/SqlBuildManager.Console.UnitTest/Properties/Resources.Designer.cs +++ b/src/SqlBuildManager.Console.UnitTest/Properties/Resources.Designer.cs @@ -79,6 +79,15 @@ internal static byte[] concurrency } } + internal static byte[] concurrency_tag + { + get + { + object obj = ResourceManager.GetObject("concurrency_tag", resourceCulture); + return ((byte[])(obj)); + } + } + internal static byte[] concurrency_doubledb { get diff --git a/src/SqlBuildManager.Console.UnitTest/Properties/Resources.resx b/src/SqlBuildManager.Console.UnitTest/Properties/Resources.resx index 558a43a3..5aa3e3c0 100644 --- a/src/SqlBuildManager.Console.UnitTest/Properties/Resources.resx +++ b/src/SqlBuildManager.Console.UnitTest/Properties/Resources.resx @@ -160,4 +160,7 @@ ..\Resources\batch_settings_multipleeh_oldstyle.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\concurrency_tag.cfg;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/src/SqlBuildManager.Console.UnitTest/QueueMessageTest.cs b/src/SqlBuildManager.Console.UnitTest/QueueMessageTest.cs index 9cf27cc6..2459ebaa 100644 --- a/src/SqlBuildManager.Console.UnitTest/QueueMessageTest.cs +++ b/src/SqlBuildManager.Console.UnitTest/QueueMessageTest.cs @@ -6,7 +6,7 @@ namespace SqlBuildManager.Console.UnitTest { [TestClass()] - internal class QueueMessageTest + public class QueueMessageTest { [TestMethod] public void QueueMessage_Creation_Test() @@ -16,11 +16,59 @@ public void QueueMessage_Creation_Test() try { - (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(true); + (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(ConcurrencyTest.MultiDbType.DoubleTarget); var output = Concurrency.ConcurrencyByInt(multiData, 10); - var qMgr = new QueueManager("", "testing", CommandLine.ConcurrencyType.Count); + var qMgr = new QueueManager("", "testing", CommandLine.ConcurrencyType.Count,true); - var messages = qMgr.CreateMessages(output, "testing"); + var messages = qMgr.CreateMessages(output, "testing", CommandLine.ConcurrencyType.Count); + } + finally + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + } + + [TestMethod] + public void QueueMessage_Creation_FromTag_Test() + { + string tmpFile = string.Empty; + MultiDbData multiData; + + try + { + (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(ConcurrencyTest.MultiDbType.Tag); + var output = Concurrency.ConcurrencyByType(multiData, 10, CommandLine.ConcurrencyType.Tag); + var qMgr = new QueueManager("", "testing", CommandLine.ConcurrencyType.Count,true); + + var messages = qMgr.CreateMessages(output, "testing", CommandLine.ConcurrencyType.Count); + Assert.AreEqual(2367, messages.Count); + } + finally + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + } + + [TestMethod] + public void QueueMessage_Creation_FromTag_MissingTag_Test() + { + string tmpFile = string.Empty; + MultiDbData multiData; + + try + { + (tmpFile, multiData) = ConcurrencyTest.GetMultiDbData(ConcurrencyTest.MultiDbType.SingleTarget); + var output = Concurrency.ConcurrencyByType(multiData, 10, CommandLine.ConcurrencyType.Count); + var qMgr = new QueueManager("", "testing", CommandLine.ConcurrencyType.Tag, true); + + var messages = qMgr.CreateMessages(output, "testing", CommandLine.ConcurrencyType.Tag); + Assert.IsNull(messages); } finally { diff --git a/src/SqlBuildManager.Console.UnitTest/Resources/concurrency_tag.cfg b/src/SqlBuildManager.Console.UnitTest/Resources/concurrency_tag.cfg new file mode 100644 index 00000000..2c5ab5d8 --- /dev/null +++ b/src/SqlBuildManager.Console.UnitTest/Resources/concurrency_tag.cfg @@ -0,0 +1,2367 @@ +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest1#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest2#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest3#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest4#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest5#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest6#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest7#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest8#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest9#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest10#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest11#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest12#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest13#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest14#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest15#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest16#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest17#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest18#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest19#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest20#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest21#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest22#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest23#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest24#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest25#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest26#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest27#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest28#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest29#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest30#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest31#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest32#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest33#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest34#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest35#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest36#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest37#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest38#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest39#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest40#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest41#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest42#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest43#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest44#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest45#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest46#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest47#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest48#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest49#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest50#PoolA +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest50#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest51#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest52#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest53#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest54#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest55#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest56#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest57#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest58#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest59#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest60#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest61#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest62#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest63#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest64#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest65#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest66#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest67#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest68#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest69#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest70#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest71#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest72#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest73#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest74#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest75#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest76#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest77#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest78#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest79#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest80#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest81#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest82#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest83#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest84#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest85#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest86#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest87#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest88#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest89#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest90#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest91#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest92#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest93#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest94#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest95#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest96#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest97#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest98#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest99#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest100#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest101#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest102#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest103#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest104#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest105#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest106#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest107#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest108#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest109#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest110#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest111#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest112#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest113#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest114#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest115#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest116#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest117#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest118#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest119#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest120#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest121#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest122#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest123#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest124#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest125#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest126#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest127#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest128#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest129#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest130#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest131#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest132#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest133#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest134#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest135#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest136#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest137#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest138#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest139#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest140#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest141#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest142#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest143#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest144#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest145#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest146#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest147#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest148#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest149#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest150#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest151#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest152#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest153#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest154#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest155#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest156#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest157#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest158#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest159#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest160#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest161#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest162#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest163#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest164#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest165#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest166#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest167#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest168#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest169#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest170#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest171#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest172#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest173#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest174#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest175#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest176#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest177#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest178#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest179#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest180#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest181#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest182#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest183#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest184#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest185#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest186#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest187#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest188#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest189#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest190#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest191#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest192#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest193#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest194#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest195#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest196#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest197#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest198#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest199#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest200#PoolB +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest201#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest202#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest203#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest204#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest205#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest206#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest207#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest208#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest209#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest210#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest211#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest212#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest213#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest214#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest215#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest216#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest217#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest218#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest219#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest220#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest221#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest222#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest223#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest224#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest225#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest226#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest227#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest228#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest229#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest230#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest231#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest232#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest233#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest234#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest235#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest236#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest237#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest238#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest239#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest240#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest241#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest242#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest243#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest244#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest245#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest246#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest247#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest248#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest249#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest250#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest251#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest252#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest253#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest254#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest255#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest256#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest257#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest258#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest259#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest260#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest261#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest262#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest263#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest264#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest265#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest266#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest267#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest268#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest269#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest270#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest271#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest272#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest273#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest274#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest275#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest276#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest277#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest278#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest279#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest280#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest281#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest282#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest283#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest284#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest285#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest286#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest287#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest288#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest289#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest290#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest291#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest292#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest293#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest294#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest295#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest296#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest297#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest298#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest299#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest300#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest301#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest302#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest303#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest304#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest305#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest306#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest307#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest308#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest309#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest310#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest311#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest312#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest313#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest314#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest315#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest316#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest317#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest318#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest319#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest320#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest321#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest322#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest323#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest324#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest325#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest326#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest327#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest328#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest329#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest330#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest331#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest332#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest333#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest334#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest335#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest336#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest337#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest338#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest339#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest340#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest341#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest342#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest343#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest344#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest345#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest346#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest347#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest348#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest349#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest350#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest351#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest352#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest353#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest354#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest355#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest356#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest357#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest358#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest359#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest360#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest361#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest362#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest363#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest364#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest365#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest366#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest367#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest368#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest369#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest370#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest371#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest372#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest373#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest374#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest375#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest376#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest377#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest378#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest379#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest380#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest381#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest382#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest383#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest384#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest385#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest386#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest387#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest388#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest389#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest390#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest391#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest392#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest393#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest394#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest395#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest396#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest397#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest398#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest399#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest400#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest401#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest402#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest403#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest404#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest405#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest406#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest407#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest408#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest409#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest410#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest411#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest412#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest413#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest414#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest415#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest416#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest417#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest418#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest419#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest420#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest421#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest422#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest423#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest424#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest425#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest426#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest427#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest428#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest429#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest430#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest431#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest432#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest433#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest434#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest435#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest436#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest437#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest438#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest439#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest440#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest441#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest442#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest443#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest444#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest445#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest446#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest447#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest448#PoolC +sqllab1.database.windows.net:SqlBuildTest,SqlBuildTest449#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest450#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest451#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest452#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest453#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest454#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest455#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest456#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest457#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest458#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest459#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest460#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest461#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest462#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest463#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest464#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest465#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest466#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest467#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest468#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest469#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest470#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest471#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest472#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest473#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest474#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest475#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest476#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest477#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest478#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest479#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest480#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest481#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest482#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest483#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest484#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest485#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest486#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest487#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest488#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest489#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest490#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest491#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest492#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest493#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest494#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest495#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest496#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest497#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest498#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest499#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest500#PoolC +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest501#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest502#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest503#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest504#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest505#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest506#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest507#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest508#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest509#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest510#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest511#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest512#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest513#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest514#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest515#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest516#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest517#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest518#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest519#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest520#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest521#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest522#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest523#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest524#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest525#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest526#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest527#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest528#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest529#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest530#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest531#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest532#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest533#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest534#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest535#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest536#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest537#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest538#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest539#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest540#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest541#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest542#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest543#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest544#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest545#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest546#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest547#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest548#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest549#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest550#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest551#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest552#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest553#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest554#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest555#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest556#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest557#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest558#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest559#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest560#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest561#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest562#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest563#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest564#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest565#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest566#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest567#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest568#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest569#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest570#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest571#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest572#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest573#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest574#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest575#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest576#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest577#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest578#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest579#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest580#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest581#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest582#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest583#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest584#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest585#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest586#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest587#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest588#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest589#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest590#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest591#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest592#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest593#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest594#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest595#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest596#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest597#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest598#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest599#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest600#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest601#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest602#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest603#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest604#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest605#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest606#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest607#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest608#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest609#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest610#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest611#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest612#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest613#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest614#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest615#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest616#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest617#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest618#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest619#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest620#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest621#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest622#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest623#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest624#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest625#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest626#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest627#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest628#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest629#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest630#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest631#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest632#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest633#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest634#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest635#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest636#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest637#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest638#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest639#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest640#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest641#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest642#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest643#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest644#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest645#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest646#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest647#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest648#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest649#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest650#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest651#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest652#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest653#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest654#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest655#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest656#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest657#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest658#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest659#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest660#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest661#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest662#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest663#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest664#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest665#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest666#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest667#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest668#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest669#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest670#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest671#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest672#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest673#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest674#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest675#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest676#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest677#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest678#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest679#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest680#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest681#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest682#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest683#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest684#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest685#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest686#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest687#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest688#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest689#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest690#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest691#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest692#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest693#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest694#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest695#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest696#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest697#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest698#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest699#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest700#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest701#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest702#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest703#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest704#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest705#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest706#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest707#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest708#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest709#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest710#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest711#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest712#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest713#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest714#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest715#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest716#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest717#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest718#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest719#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest720#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest721#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest722#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest723#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest724#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest725#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest726#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest727#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest728#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest729#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest730#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest731#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest732#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest733#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest734#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest735#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest736#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest737#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest738#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest739#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest740#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest741#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest742#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest743#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest744#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest745#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest746#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest747#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest748#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest749#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest750#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest751#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest752#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest753#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest754#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest755#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest756#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest757#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest758#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest759#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest760#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest761#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest762#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest763#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest764#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest765#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest766#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest767#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest768#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest769#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest770#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest771#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest772#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest773#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest774#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest775#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest776#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest777#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest778#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest779#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest780#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest781#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest782#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest783#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest784#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest785#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest786#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest787#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest788#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest789#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest790#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest791#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest792#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest793#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest794#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest795#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest796#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest797#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest798#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest799#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest800#PoolD +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest801#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest802#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest803#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest804#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest805#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest806#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest807#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest808#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest809#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest810#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest811#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest812#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest813#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest814#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest815#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest816#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest817#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest818#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest819#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest820#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest821#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest822#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest823#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest824#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest825#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest826#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest827#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest828#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest829#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest830#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest831#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest832#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest833#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest834#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest835#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest836#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest837#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest838#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest839#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest840#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest841#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest842#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest843#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest844#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest845#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest846#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest847#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest848#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest849#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest850#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest851#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest852#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest853#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest854#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest855#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest856#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest857#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest858#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest859#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest860#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest861#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest862#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest863#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest864#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest865#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest866#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest867#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest868#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest869#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest870#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest871#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest872#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest873#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest874#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest875#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest876#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest877#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest878#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest879#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest880#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest881#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest882#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest883#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest884#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest885#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest886#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest887#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest888#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest889#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest890#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest891#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest892#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest893#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest894#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest895#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest896#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest897#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest898#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest899#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest900#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest901#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest902#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest903#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest904#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest905#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest906#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest907#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest908#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest909#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest910#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest911#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest912#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest913#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest914#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest915#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest916#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest917#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest918#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest919#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest920#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest921#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest922#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest923#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest924#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest925#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest926#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest927#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest928#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest929#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest930#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest931#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest932#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest933#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest934#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest935#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest936#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest937#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest938#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest939#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest940#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest941#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest942#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest943#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest944#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest945#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest946#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest947#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest948#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest949#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest950#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest951#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest952#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest953#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest954#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest955#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest956#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest957#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest958#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest959#PoolE +sqllab2.database.windows.net:SqlBuildTest,SqlBuildTest960#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest961#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest962#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest963#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest964#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest965#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest966#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest967#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest968#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest969#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest970#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest971#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest972#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest973#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest974#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest975#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest976#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest977#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest978#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest979#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest980#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest981#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest982#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest983#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest984#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest985#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest986#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest987#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest988#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest989#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest990#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest991#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest992#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest993#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest994#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest995#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest996#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest997#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest998#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest999#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1000#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1001#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1002#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1003#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1004#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1005#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1006#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1007#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1008#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1009#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1010#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1011#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1012#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1013#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1014#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1015#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1016#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1017#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1018#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1019#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1020#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1021#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1022#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1023#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1024#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1025#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1026#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1027#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1028#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1029#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1030#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1031#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1032#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1033#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1034#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1035#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1036#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1037#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1038#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1039#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1040#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1041#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1042#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1043#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1044#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1045#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1046#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1047#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1048#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1049#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1050#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1051#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1052#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1053#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1054#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1055#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1056#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1057#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1058#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1059#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1060#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1061#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1062#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1063#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1064#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1065#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1066#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1067#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1068#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1069#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1070#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1071#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1072#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1073#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1074#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1075#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1076#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1077#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1078#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1079#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1080#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1081#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1082#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1083#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1084#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1085#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1086#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1087#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1088#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1089#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1090#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1091#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1092#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1093#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1094#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1095#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1096#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1097#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1098#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1099#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1100#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1101#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1102#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1103#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1104#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1105#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1106#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1107#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1108#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1109#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1110#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1111#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1112#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1113#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1114#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1115#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1116#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1117#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1118#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1119#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1120#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1121#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1122#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1123#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1124#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1125#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1126#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1127#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1128#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1129#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1130#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1131#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1132#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1133#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1134#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1135#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1136#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1137#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1138#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1139#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1140#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1141#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1142#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1143#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1144#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1145#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1146#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1147#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1148#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1149#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1150#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1151#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1152#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1153#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1154#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1155#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1156#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1157#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1158#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1159#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1160#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1161#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1162#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1163#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1164#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1165#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1166#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1167#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1168#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1169#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1170#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1171#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1172#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1173#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1174#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1175#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1176#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1177#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1178#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1179#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1180#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1181#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1182#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1183#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1184#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1185#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1186#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1187#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1188#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1189#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1190#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1191#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1192#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1193#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1194#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1195#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1196#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1197#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1198#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1199#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1200#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1201#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1202#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1203#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1204#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1205#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1206#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1207#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1208#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1209#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1210#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1211#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1212#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1213#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1214#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1215#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1216#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1217#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1218#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1219#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1220#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1221#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1222#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1223#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1224#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1225#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1226#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1227#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1228#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1229#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1230#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1231#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1232#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1233#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1234#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1235#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1236#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1237#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1238#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1239#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1240#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1241#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1242#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1243#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1244#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1245#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1246#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1247#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1248#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1249#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1250#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1251#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1252#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1253#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1254#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1255#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1256#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1257#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1258#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1259#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1260#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1261#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1262#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1263#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1264#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1265#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1266#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1267#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1268#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1269#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1270#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1271#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1272#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1273#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1274#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1275#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1276#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1277#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1278#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1279#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1280#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1281#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1282#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1283#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1284#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1285#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1286#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1287#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1288#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1289#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1290#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1291#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1292#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1293#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1294#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1295#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1296#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1297#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1298#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1299#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1300#PoolE +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1301#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1302#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1303#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1304#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1305#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1306#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1307#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1308#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1309#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1310#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1311#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1312#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1313#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1314#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1315#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1316#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1317#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1318#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1319#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1320#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1321#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1322#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1323#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1324#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1325#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1326#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1327#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1328#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1329#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1330#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1331#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1332#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1333#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1334#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1335#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1336#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1337#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1338#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1339#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1340#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1341#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1342#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1343#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1344#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1345#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1346#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1347#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1348#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1349#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1350#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1351#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1352#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1353#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1354#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1355#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1356#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1357#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1358#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1359#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1360#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1361#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1362#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1363#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1364#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1365#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1366#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1367#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1368#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1369#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1370#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1371#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1372#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1373#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1374#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1375#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1376#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1377#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1378#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1379#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1380#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1381#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1382#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1383#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1384#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1385#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1386#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1387#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1388#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1389#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1390#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1391#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1392#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1393#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1394#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1395#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1396#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1397#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1398#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1399#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1400#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1401#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1402#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1403#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1404#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1405#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1406#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1407#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1408#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1409#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1410#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1411#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1412#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1413#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1414#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1415#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1416#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1417#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1418#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1419#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1420#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1421#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1422#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1423#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1424#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1425#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1426#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1427#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1428#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1429#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1430#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1431#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1432#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1433#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1434#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1435#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1436#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1437#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1438#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1439#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1440#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1441#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1442#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1443#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1444#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1445#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1446#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1447#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1448#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1449#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1450#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1451#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1452#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1453#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1454#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1455#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1456#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1457#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1458#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1459#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1460#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1461#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1462#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1463#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1464#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1465#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1466#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1467#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1468#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1469#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1470#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1471#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1472#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1473#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1474#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1475#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1476#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1477#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1478#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1479#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1480#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1481#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1482#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1483#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1484#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1485#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1486#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1487#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1488#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1489#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1490#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1491#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1492#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1493#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1494#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1495#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1496#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1497#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1498#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1499#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1500#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1501#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1502#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1503#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1504#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1505#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1506#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1507#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1508#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1509#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1510#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1511#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1512#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1513#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1514#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1515#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1516#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1517#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1518#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1519#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1520#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1521#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1522#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1523#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1524#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1525#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1526#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1527#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1528#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1529#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1530#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1531#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1532#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1533#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1534#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1535#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1536#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1537#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1538#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1539#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1540#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1541#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1542#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1543#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1544#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1545#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1546#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1547#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1548#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1549#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1550#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1551#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1552#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1553#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1554#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1555#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1556#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1557#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1558#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1559#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1560#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1561#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1562#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1563#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1564#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1565#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1566#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1567#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1568#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1569#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1570#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1571#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1572#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1573#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1574#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1575#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1576#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1577#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1578#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1579#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1580#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1581#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1582#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1583#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1584#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1585#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1586#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1587#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1588#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1589#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1590#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1591#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1592#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1593#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1594#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1595#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1596#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1597#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1598#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1599#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1600#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1601#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1602#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1603#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1604#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1605#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1606#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1607#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1608#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1609#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1610#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1611#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1612#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1613#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1614#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1615#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1616#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1617#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1618#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1619#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1620#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1621#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1622#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1623#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1624#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1625#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1626#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1627#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1628#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1629#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1630#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1631#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1632#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1633#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1634#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1635#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1636#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1637#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1638#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1639#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1640#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1641#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1642#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1643#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1644#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1645#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1646#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1647#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1648#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1649#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1650#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1651#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1652#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1653#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1654#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1655#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1656#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1657#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1658#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1659#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1660#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1661#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1662#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1663#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1664#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1665#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1666#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1667#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1668#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1669#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1670#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1671#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1672#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1673#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1674#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1675#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1676#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1677#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1678#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1679#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1680#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1681#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1682#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1683#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1684#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1685#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1686#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1687#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1688#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1689#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1690#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1691#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1692#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1693#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1694#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1695#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1696#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1697#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1698#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1699#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1700#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1701#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1702#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1703#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1704#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1705#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1706#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1707#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1708#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1709#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1710#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1711#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1712#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1713#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1714#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1715#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1716#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1717#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1718#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1719#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1720#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1721#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1722#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1723#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1724#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1725#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1726#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1727#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1728#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1729#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1730#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1731#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1732#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1733#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1734#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1735#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1736#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1737#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1738#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1739#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1740#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1741#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1742#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1743#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1744#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1745#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1746#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1747#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1748#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1749#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1750#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1751#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1752#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1753#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1754#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1755#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1756#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1757#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1758#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1759#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1760#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1761#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1762#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1763#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1764#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1765#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1766#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1767#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1768#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1769#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1770#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1771#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1772#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1773#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1774#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1775#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1776#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1777#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1778#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1779#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1780#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1781#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1782#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1783#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1784#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1785#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1786#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1787#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1788#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1789#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1790#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1791#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1792#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1793#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1794#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1795#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1796#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1797#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1798#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1799#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1800#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1801#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1802#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1803#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1804#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1805#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1806#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1807#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1808#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1809#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1810#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1811#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1812#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1813#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1814#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1815#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1816#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1817#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1818#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1819#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1820#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1821#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1822#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1823#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1824#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1825#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1826#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1827#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1828#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1829#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1830#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1831#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1832#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1833#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1834#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1835#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1836#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1837#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1838#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1839#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1840#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1841#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1842#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1843#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1844#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1845#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1846#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1847#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1848#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1849#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1850#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1851#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1852#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1853#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1854#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1855#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1856#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1857#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1858#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1859#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1860#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1861#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1862#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1863#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1864#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1865#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1866#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1867#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1868#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1869#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1870#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1871#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1872#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1873#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1874#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1875#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1876#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1877#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1878#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1879#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1880#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1881#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1882#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1883#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1884#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1885#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1886#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1887#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1888#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1889#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1890#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1891#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1892#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1893#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1894#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1895#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1896#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1897#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1898#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1899#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1900#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1901#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1902#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1903#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1904#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1905#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1906#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1907#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1908#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1909#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1910#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1911#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1912#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1913#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1914#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1915#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1916#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1917#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1918#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1919#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1920#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1921#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1922#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1923#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1924#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1925#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1926#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1927#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1928#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1929#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1930#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1931#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1932#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1933#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1934#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1935#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1936#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1937#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1938#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1939#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1940#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1941#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1942#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1943#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1944#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1945#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1946#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1947#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1948#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1949#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1950#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1951#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1952#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1953#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1954#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1955#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1956#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1957#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1958#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1959#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1960#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1961#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1962#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1963#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1964#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1965#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1966#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1967#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1968#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1969#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1970#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1971#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1972#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1973#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1974#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1975#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1976#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1977#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1978#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1979#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1980#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1981#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1982#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1983#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1984#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1985#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1986#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1987#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1988#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1989#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1990#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1991#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1992#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1993#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1994#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1995#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1996#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1997#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1998#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest1999#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2000#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2001#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2002#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2003#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2004#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2005#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2006#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2007#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2008#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2009#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2010#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2011#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2012#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2013#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2014#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2015#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2016#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2017#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2018#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2019#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2020#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2021#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2022#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2023#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2024#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2025#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2026#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2027#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2028#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2029#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2030#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2031#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2032#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2033#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2034#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2035#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2036#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2037#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2038#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2039#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2040#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2041#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2042#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2043#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2044#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2045#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2046#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2047#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2048#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2049#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2050#PoolF +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2051#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2052#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2053#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2054#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2055#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2056#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2057#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2058#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2059#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2060#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2061#PoolG +sqllab3.database.windows.net:SqlBuildTest,SqlBuildTest2062#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2063#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2064#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2065#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2066#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2067#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2068#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2069#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2070#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2071#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2072#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2073#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2074#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2075#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2076#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2077#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2078#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2079#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2080#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2081#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2082#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2083#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2084#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2085#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2086#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2087#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2088#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2089#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2090#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2091#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2092#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2093#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2094#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2095#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2096#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2097#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2098#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2099#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2100#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2101#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2102#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2103#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2104#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2105#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2106#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2107#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2108#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2109#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2110#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2111#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2112#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2113#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2114#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2115#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2116#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2117#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2118#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2119#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2120#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2121#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2122#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2123#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2124#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2125#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2126#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2127#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2128#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2129#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2130#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2131#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2132#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2133#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2134#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2135#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2136#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2137#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2138#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2139#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2140#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2141#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2142#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2143#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2144#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2145#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2146#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2147#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2148#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2149#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2150#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2151#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2152#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2153#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2154#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2155#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2156#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2157#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2158#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2159#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2160#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2161#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2162#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2163#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2164#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2165#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2166#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2167#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2168#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2169#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2170#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2171#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2172#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2173#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2174#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2175#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2176#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2177#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2178#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2179#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2180#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2181#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2182#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2183#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2184#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2185#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2186#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2187#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2188#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2189#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2190#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2191#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2192#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2193#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2194#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2195#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2196#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2197#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2198#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2199#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2200#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2201#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2202#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2203#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2204#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2205#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2206#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2207#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2208#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2209#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2210#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2211#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2212#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2213#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2214#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2215#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2216#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2217#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2218#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2219#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2220#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2221#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2222#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2223#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2224#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2225#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2226#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2227#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2228#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2229#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2230#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2231#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2232#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2233#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2234#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2235#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2236#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2237#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2238#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2239#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2240#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2241#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2242#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2243#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2244#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2245#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2246#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2247#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2248#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2249#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2250#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2251#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2252#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2253#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2254#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2255#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2256#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2257#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2258#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2259#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2260#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2261#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2262#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2263#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2264#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2265#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2266#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2267#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2268#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2269#PoolG +sqllab4.database.windows.net:SqlBuildTest,SqlBuildTest2270#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2271#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2272#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2273#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2274#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2275#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2276#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2277#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2278#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2279#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2280#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2281#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2282#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2283#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2284#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2285#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2286#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2287#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2288#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2289#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2290#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2291#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2292#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2293#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2294#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2295#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2296#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2297#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2298#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2299#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2300#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2301#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2302#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2303#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2304#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2305#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2306#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2307#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2308#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2309#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2310#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2311#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2312#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2313#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2314#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2315#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2316#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2317#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2318#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2319#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2320#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2321#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2322#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2323#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2324#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2325#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2326#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2327#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2328#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2329#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2330#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2331#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2332#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2333#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2334#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2335#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2336#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2337#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2338#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2339#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2340#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2341#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2342#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2343#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2344#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2345#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2346#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2347#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2348#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2349#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2350#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2351#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2352#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2353#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2354#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2355#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2356#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2357#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2358#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2359#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2360#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2361#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2362#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2363#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2364#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2365#PoolG +sqllab5.database.windows.net:SqlBuildTest,SqlBuildTest2366#PoolG diff --git a/src/SqlBuildManager.Console.UnitTest/SqlBuildManager.Console.UnitTest.csproj b/src/SqlBuildManager.Console.UnitTest/SqlBuildManager.Console.UnitTest.csproj index ebe42b2e..68107474 100644 --- a/src/SqlBuildManager.Console.UnitTest/SqlBuildManager.Console.UnitTest.csproj +++ b/src/SqlBuildManager.Console.UnitTest/SqlBuildManager.Console.UnitTest.csproj @@ -29,9 +29,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlBuildManager.Console/Batch/BatchManager.cs b/src/SqlBuildManager.Console/Batch/BatchManager.cs index ec6bf933..05051e88 100644 --- a/src/SqlBuildManager.Console/Batch/BatchManager.cs +++ b/src/SqlBuildManager.Console/Batch/BatchManager.cs @@ -99,7 +99,7 @@ public BatchManager(CommandLineArgs cmdLine, string queryFile, string outputFile log.LogInformation($"Extracting Platinum Dacpac from {cmdLine.DacPacArgs.PlatinumServerSource} : {cmdLine.DacPacArgs.PlatinumDbSource}"); string dacpacName = Path.Combine(cmdLine.RootLoggingPath, cmdLine.DacPacArgs.PlatinumDbSource + ".dacpac"); - if (!DacPacHelper.ExtractDacPac(cmdLine.DacPacArgs.PlatinumDbSource, cmdLine.DacPacArgs.PlatinumServerSource, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, dacpacName)) + if (!DacPacHelper.ExtractDacPac(cmdLine.DacPacArgs.PlatinumDbSource, cmdLine.DacPacArgs.PlatinumServerSource, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, dacpacName, cmdLine.TimeoutRetryCount, cmdLine.IdentityArgs.ClientId)) { log.LogError($"Error creating the Platinum dacpac from {cmdLine.DacPacArgs.PlatinumServerSource} : {cmdLine.DacPacArgs.PlatinumDbSource}"); } diff --git a/src/SqlBuildManager.Console/CommandLine/CommandLineBuilder.Utility.cs b/src/SqlBuildManager.Console/CommandLine/CommandLineBuilder.Utility.cs index 9d6c1c01..9edf86f2 100644 --- a/src/SqlBuildManager.Console/CommandLine/CommandLineBuilder.Utility.cs +++ b/src/SqlBuildManager.Console/CommandLine/CommandLineBuilder.Utility.cs @@ -243,6 +243,22 @@ private static Command OverrideFromSqlUtilityCommand } } + private static Command DecryptSettingsFile + { + get + { + var cmd = new Command("decrypt", "Decrypt a settings file") + { + settingsfileExistingRequiredOption, + settingsfileKeyRequiredOption + }; + cmd.Handler = CommandHandler.Create(Worker.DecryptSettingsFile); + cmd.IsHidden = true; + return cmd; + + } + } + /// /// Utility commands for generating override file from SQL statement and interrogating Service Bus and EventHubs /// @@ -254,8 +270,9 @@ private static Command UtilityCommand { OverrideFromSqlUtilityCommand, QueueUtilityCommand, - EventHubUtilityCommand - }; + EventHubUtilityCommand, + DecryptSettingsFile + }; return cmd; } } diff --git a/src/SqlBuildManager.Console/CommandLine/ConcurrencyType.cs b/src/SqlBuildManager.Console/CommandLine/ConcurrencyType.cs index cabec2ad..d7e683ce 100644 --- a/src/SqlBuildManager.Console/CommandLine/ConcurrencyType.cs +++ b/src/SqlBuildManager.Console/CommandLine/ConcurrencyType.cs @@ -8,6 +8,8 @@ public enum ConcurrencyType { Count, Server, - MaxPerServer + MaxPerServer, + Tag, + MaxPerTag } } diff --git a/src/SqlBuildManager.Console/KeyVault/KeyVaultHelper.cs b/src/SqlBuildManager.Console/KeyVault/KeyVaultHelper.cs index 728ea98e..c30cafe7 100644 --- a/src/SqlBuildManager.Console/KeyVault/KeyVaultHelper.cs +++ b/src/SqlBuildManager.Console/KeyVault/KeyVaultHelper.cs @@ -167,7 +167,7 @@ public static (bool, CommandLineArgs) GetSecrets(CommandLineArgs cmdLine) tmp = GetSecret(kvName, KeyVaultHelper.ContainerRegistryPassword); - if (!string.IsNullOrWhiteSpace(tmp)) + if (!string.IsNullOrWhiteSpace(tmp) && cmdLine.ContainerRegistryArgs != null) { cmdLine.RegistryPassword = tmp; retrieved.Add(KeyVaultHelper.ContainerRegistryPassword); diff --git a/src/SqlBuildManager.Console/Queue/QueueManager.cs b/src/SqlBuildManager.Console/Queue/QueueManager.cs index a1767107..0e50a557 100644 --- a/src/SqlBuildManager.Console/Queue/QueueManager.cs +++ b/src/SqlBuildManager.Console/Queue/QueueManager.cs @@ -115,6 +115,11 @@ public async Task SendTargetsToQueue(MultiDbData multiDb, ConcurrencyType c { try { + if ( (cType == ConcurrencyType.Tag || cType == ConcurrencyType.MaxPerTag) && multiDb.AsQueryable().Where(m => m.Overrides.Where(o => o.ConcurrencyTag.Length == 0).Any()).Any()) + { + log.LogError($"There are database targets that do not have a concurrency tag. This is required when the Concurrency Type is '{cType.ToString()}'. Please add a concurrency tag to all database targets before sending to the queue."); + return 0; + } log.LogInformation($"Setting up Topic Subscription with Job filter name '{jobName}'"); await RemoveDefaultFilters(); await CleanUpCustomFilters(); @@ -124,7 +129,11 @@ public async Task SendTargetsToQueue(MultiDbData multiDb, ConcurrencyType c //Use bucketing to 1 bucket to get flattened list of targest var concurrencyBuckets = Concurrency.ConcurrencyByType(multiDb, 1, ConcurrencyType.Count); - var messages = CreateMessages(concurrencyBuckets, jobName); + var messages = CreateMessages(concurrencyBuckets, jobName, cType); + if(messages == null) + { + return 0; + } int count = messages.Count(); int sentCount = 0; @@ -185,7 +194,7 @@ public async Task SendTargetsToQueue(MultiDbData multiDb, ConcurrencyType c } } - public List CreateMessages(List)>> buckets, string jobName) + public List CreateMessages(List)>> buckets, string jobName, ConcurrencyType cType) { try { @@ -197,10 +206,42 @@ public List CreateMessages(List 0) + { + msg.SessionId = target.Item2[0].ConcurrencyTag; + + } + else + { + msg.SessionId = target.Item1; + } msg.MessageId = Guid.NewGuid().ToString(); msgs.Add(msg); } @@ -220,9 +261,11 @@ public async Task> GetDatabaseTargetFromQueue(in switch (cType) { case ConcurrencyType.Server: + case ConcurrencyType.Tag: return await GetSessionBasedTargetsFromQueue(1, false); case ConcurrencyType.MaxPerServer: + case ConcurrencyType.MaxPerTag: return await GetSessionBasedTargetsFromQueue(maxMessages, false); case ConcurrencyType.Count: @@ -395,9 +438,12 @@ private CancellationToken GetCancellationToken(int waitMs = 5000) public async Task CompleteMessage(ServiceBusReceivedMessage message) { var t = message.As(); + string concurrency = t.ConcurrencyTag.Length == 0 ? "" : $" [ConcurrencyTag: {t.ConcurrencyTag}]"; try { - log.LogInformation($"Completing {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget} message ID '{message.MessageId}'"); + + log.LogInformation($"Completing {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency} message ID '{message.MessageId}'"); + if (_sessionReceiver != null) { await _sessionReceiver.CompleteMessageAsync(message); @@ -409,20 +455,21 @@ public async Task CompleteMessage(ServiceBusReceivedMessage message) } catch (ServiceBusException sbE) { - log.LogError($"Unable to complete message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}. This may result in duplicate processing: {sbE.Message}"); + log.LogError($"Unable to complete message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency}. This may result in duplicate processing: {sbE.Message}"); } catch (Exception exe) { - log.LogError($"Unable to complete message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}. This may result in duplicate processing: {exe.Message}"); + log.LogError($"Unable to complete message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency}. This may result in duplicate processing: {exe.Message}"); } return; } public async Task AbandonMessage(ServiceBusReceivedMessage message) { var t = message.As(); + string concurrency = t.ConcurrencyTag.Length == 0 ? "" : $" [ConcurrencyTag: {t.ConcurrencyTag}]"; try { - log.LogInformation($"Abandoning {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget} message ID '{message.MessageId}'"); + log.LogInformation($"Abandoning {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency} message ID '{message.MessageId}'"); if (_sessionReceiver != null) { await _sessionReceiver.AbandonMessageAsync(message); @@ -434,16 +481,17 @@ public async Task AbandonMessage(ServiceBusReceivedMessage message) } catch (Exception exe) { - log.LogError($"Failed to Abandon message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}: {exe.Message}"); + log.LogError($"Failed to Abandon message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency}: {exe.Message}"); } return; } public async Task DeadletterMessage(ServiceBusReceivedMessage message) { var t = message.As(); + string concurrency = t.ConcurrencyTag.Length == 0 ? "" : $" [ConcurrencyTag: {t.ConcurrencyTag}]"; try { - log.LogInformation($"Deadlettering {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget} message ID '{message.MessageId}'"); + log.LogInformation($"Deadlettering {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency} message ID '{message.MessageId}'"); if (_sessionReceiver != null) { await _sessionReceiver.DeadLetterMessageAsync(message); @@ -455,16 +503,17 @@ public async Task DeadletterMessage(ServiceBusReceivedMessage message) } catch (Exception exe) { - log.LogError($"Failed to Deadletter message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}: {exe.Message}"); + log.LogError($"Failed to Deadletter message for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency}: {exe.Message}"); } return; } public async Task RenewMessageLock(ServiceBusReceivedMessage message) { var t = message.As(); + string concurrency = t.ConcurrencyTag.Length == 0 ? "" : $" [ConcurrencyTag: {t.ConcurrencyTag}]"; try { - log.LogDebug($"Renewing message lock on {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget} message ID '{message.MessageId}'"); + log.LogDebug($"Renewing message lock on {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency} message ID '{message.MessageId}'"); if (_sessionReceiver != null) { await _sessionReceiver.RenewSessionLockAsync(); @@ -476,7 +525,7 @@ public async Task RenewMessageLock(ServiceBusReceivedMessage message) } catch (Exception exe) { - log.LogError($"Failed to renew message lock for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}: {exe.Message}"); + log.LogError($"Failed to renew message lock for {t.ServerName}.{t.DbOverrideSequence[0].OverrideDbTarget}{concurrency}: {exe.Message}"); } return; } @@ -571,6 +620,8 @@ public async Task SubscriptionIsPreExisting() { case ConcurrencyType.MaxPerServer: case ConcurrencyType.Server: + case ConcurrencyType.MaxPerTag: + case ConcurrencyType.Tag: return await AdminClient.SubscriptionExistsAsync(topicName, topicSessionSubscriptionName); case ConcurrencyType.Count: @@ -604,6 +655,8 @@ private async Task CreateSubscriptions() case ConcurrencyType.MaxPerServer: case ConcurrencyType.Server: + case ConcurrencyType.Tag: + case ConcurrencyType.MaxPerTag: if (!await AdminClient.SubscriptionExistsAsync(topicName, topicSessionSubscriptionName)) { log.LogInformation($"Creating session enabled topic subscripton for `{jobName}'"); @@ -710,16 +763,22 @@ await pollyRetryPolicyForClean.ExecuteAsync(async () => public async Task MonitorServiceBustopic(ConcurrencyType concurrencyType) { SubscriptionRuntimeProperties props; - if (concurrencyType == ConcurrencyType.Count) - { - props = await AdminClient.GetSubscriptionRuntimePropertiesAsync(topicName, topicSubscriptionName, new CancellationToken()); - } - else + switch (concurrencyType) { - props = await AdminClient.GetSubscriptionRuntimePropertiesAsync(topicName, topicSessionSubscriptionName, new CancellationToken()); + case ConcurrencyType.Count: + + props = await AdminClient.GetSubscriptionRuntimePropertiesAsync(topicName, topicSubscriptionName, new CancellationToken()); + break; + case ConcurrencyType.MaxPerTag: + case ConcurrencyType.MaxPerServer: + case ConcurrencyType.Server: + case ConcurrencyType.Tag: + props = await AdminClient.GetSubscriptionRuntimePropertiesAsync(topicName, topicSessionSubscriptionName, new CancellationToken()); + break; + default: + throw new ArgumentException($"Unknow concurrency type of {concurrencyType}"); } return props.ActiveMessageCount; - } public void Dispose() diff --git a/src/SqlBuildManager.Console/Queue/TargetMessage.cs b/src/SqlBuildManager.Console/Queue/TargetMessage.cs index 6cfaae60..d639ddd5 100644 --- a/src/SqlBuildManager.Console/Queue/TargetMessage.cs +++ b/src/SqlBuildManager.Console/Queue/TargetMessage.cs @@ -1,4 +1,5 @@ -using SqlSync.Connection; +using Azure.ResourceManager.Network.Models; +using SqlSync.Connection; using System.Collections.Generic; namespace SqlBuildManager.Console.Queue @@ -7,5 +8,34 @@ public class TargetMessage { public string ServerName { get; set; } public List DbOverrideSequence { get; set; } + + private string concurrencyTag = string.Empty; + public string ConcurrencyTag + { + get + { + if (this.concurrencyTag.Length > 0) + { + return this.concurrencyTag; + } + else + { + if (this.DbOverrideSequence != null && this.DbOverrideSequence.Count > 0) + { + if (this.DbOverrideSequence[0].ConcurrencyTag.Length > 0) + { + return this.DbOverrideSequence[0].ConcurrencyTag; + } + + } + } + return string.Empty; + } + set + { + this.concurrencyTag = value; + } + } + } } diff --git a/src/SqlBuildManager.Console/Threaded/Concurrency.cs b/src/SqlBuildManager.Console/Threaded/Concurrency.cs index 1df437df..38a182f9 100644 --- a/src/SqlBuildManager.Console/Threaded/Concurrency.cs +++ b/src/SqlBuildManager.Console/Threaded/Concurrency.cs @@ -1,4 +1,5 @@ -using MoreLinq; +using Microsoft.Extensions.Logging; +using MoreLinq; using SqlBuildManager.Console.CommandLine; using SqlSync.Connection; using SqlSync.SqlBuild; @@ -10,6 +11,7 @@ namespace SqlBuildManager.Console.Threaded { public class Concurrency { + private static ILogger log = SqlBuildManager.Logging.ApplicationLogging.CreateLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static List)>> ConcurrencyByType(MultiDbData multiData, int concurrency, ConcurrencyType concurrencyType) { switch (concurrencyType) @@ -18,11 +20,66 @@ public class Concurrency return ConcurrencyByServer(multiData); case ConcurrencyType.MaxPerServer: return MaxConcurrencyByServer(multiData, concurrency); + + case ConcurrencyType.Tag: + return ConcurrencyByTag(multiData); + case ConcurrencyType.MaxPerTag: + return MaxConcurrencyByTag(multiData, concurrency); + case ConcurrencyType.Count: default: return ConcurrencyByInt(multiData, concurrency); } } + + private static List)>> MaxConcurrencyByTag(MultiDbData multiData, int concurrency) + { + List)>> tmp = new List)>>(); + var serverChunks = ConcurrencyByTag(multiData); + foreach (var sC in serverChunks) + { + + var subChunks = sC.SplitIntoChunks(concurrency); + tmp.AddRange(subChunks); + } + return tmp; + } + + private static List)>> ConcurrencyByTag(MultiDbData multiData) + { + List)>> tmp = new(); + + //get a single list of db overrides + var lstOverrides = new List(); + FlattenOverride(multiData).Select(f => f.Item2).ForEach(o => lstOverrides.AddRange(o)); + + var tagGroup = lstOverrides.GroupBy(o => o.ConcurrencyTag); + foreach (var s in tagGroup) + { + var lstSrv = new List<(string, List)>(); + foreach (var o in s) + + if (lstSrv.Where(x => $"#{x.Item1}" == $"#{s.Key}").Any()) + { + lstSrv.Where(x => $"#{x.Item1}" == $"#{s.Key}").First().Item2.Add(o); + } + else + { + lstSrv.Add(($"#{s.Key}", new List() { o })); + } + tmp.Add(lstSrv); + } + + var emptyTag = tmp.Where(t => t.Where(a => a.Item1 == "#").Any()).Any(); + if(emptyTag) + { + string msg = "Empty database target tags found. Please ensure all database targets have a tag when using ConcurrencyType of `Tag` or `MaxPerTag`"; + log.LogError(msg); + throw new Exception(msg); + } + return tmp; + } + /// /// Divides the targets into the "concurrency" count of Lists. The lists would be run in parallel, with the items in each list run in serial /// Fully parallel to the extent of the concurrency number @@ -208,7 +265,14 @@ public static List ConvertBucketsToConfigLines(List(); foreach (var sub in bucket) { - tmp.Add($"{sub.Item1}:{sub.Item2.ToList().Select(d => $"{d.DefaultDbTarget},{d.OverrideDbTarget}").Aggregate((a, b) => $"{a};{b}")}"); + if(sub.Item1.StartsWith("#")) + { + tmp.Add($"{sub.Item2[0].Server}:{sub.Item2.ToList().Select(d => $"{d.DefaultDbTarget},{d.OverrideDbTarget}#{d.ConcurrencyTag}").Aggregate((a, b) => $"{a};{b}")}"); + } + else + { + tmp.Add($"{sub.Item1}:{sub.Item2.ToList().Select(d => $"{d.DefaultDbTarget},{d.OverrideDbTarget}#{d.ConcurrencyTag}").Aggregate((a, b) => $"{a};{b}")}"); + } } bucketStrings.Add(tmp.ToArray()); } diff --git a/src/SqlBuildManager.Console/Threaded/LogMsg.cs b/src/SqlBuildManager.Console/Threaded/LogMsg.cs index 4e7551cf..53c8fa44 100644 --- a/src/SqlBuildManager.Console/Threaded/LogMsg.cs +++ b/src/SqlBuildManager.Console/Threaded/LogMsg.cs @@ -79,6 +79,9 @@ public string SourceDacPac [JsonPropertyName("ComputeHostName")] public string ComputeHostName { get; set; } = string.Empty; + [JsonPropertyName("ConcurrencyTag")] + public string ConcurrencyTag { get; set; } = string.Empty; + [JsonPropertyName("ScriptLog")] public ScriptLogData ScriptLog { get; set; } = null; diff --git a/src/SqlBuildManager.Console/Threaded/ThreadedManager.cs b/src/SqlBuildManager.Console/Threaded/ThreadedManager.cs index 73048ad0..4550cc21 100644 --- a/src/SqlBuildManager.Console/Threaded/ThreadedManager.cs +++ b/src/SqlBuildManager.Console/Threaded/ThreadedManager.cs @@ -321,8 +321,10 @@ private async Task ExecuteFromQueue(CommandLineArgs cmdLine, string buildRe foreach (var message in messages) { var target = message.As(); + target.DbOverrideSequence[0].ConcurrencyTag = target.ConcurrencyTag; + ThreadedRunner runner = new ThreadedRunner(target.ServerName, target.DbOverrideSequence, cmdLine, buildRequestedBy, cmdLine.DacPacArgs.ForceCustomDacPac); - var msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, RunId = ThreadedManager.RunID, Message = "Queuing up thread", LogType = LogType.Message }; + var msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, RunId = ThreadedManager.RunID, Message = "Queuing up thread", LogType = LogType.Message, ConcurrencyTag = runner.ConcurrencyTag }; threadedLog.WriteToLog(msg); tasks.Add(ProcessThreadedBuildWithQueue(runner, message)); } @@ -367,7 +369,7 @@ private async Task ExecuteFromQueue(CommandLineArgs cmdLine, string buildRe log.LogInformation($"Extracting Platinum Dacpac from {cmdLine.DacPacArgs.PlatinumServerSource} : {cmdLine.DacPacArgs.PlatinumDbSource}"); string dacpacName = Path.Combine(ThreadedManager.rootLoggingPath, cmdLine.DacPacArgs.PlatinumDbSource + ".dacpac"); - if (!DacPacHelper.ExtractDacPac(cmdLine.DacPacArgs.PlatinumDbSource, cmdLine.DacPacArgs.PlatinumServerSource, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, dacpacName)) + if (!DacPacHelper.ExtractDacPac(cmdLine.DacPacArgs.PlatinumDbSource, cmdLine.DacPacArgs.PlatinumServerSource, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, dacpacName, cmdLine.DefaultScriptTimeout, cmdLine.IdentityArgs.ClientId)) { var m = new LogMsg() { @@ -438,7 +440,7 @@ private async Task ProcessConcurrencyBucket(IEnumerable<(string, List ovr) in bucket) { ThreadedRunner runner = new ThreadedRunner(server, ovr, cmdLine, buildRequestedBy, forceCustomDacpac); - var msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, RunId = ThreadedManager.RunID, Message = "Queuing up thread", LogType = LogType.Message }; + var msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, RunId = ThreadedManager.RunID, Message = "Queuing up thread", LogType = LogType.Message, ConcurrencyTag = runner.ConcurrencyTag }; threadedLog.WriteToLog(msg); await ProcessThreadedBuild(runner); } @@ -493,7 +495,7 @@ private async Task ProcessThreadedBuild(ThreadedRunner runner) //SERVER:defaultDb,override string cfgString = String.Format("{0}:{1},{2}", runner.Server, runner.DefaultDatabaseName, runner.TargetDatabases); - msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, SourceDacPac = runner.DacpacName, RunId = ThreadedManager.RunID, Message = "Starting up thread", LogType = LogType.Message }; + msg = new LogMsg() { DatabaseName = runner.TargetDatabases, ServerName = runner.Server, SourceDacPac = runner.DacpacName, RunId = ThreadedManager.RunID, Message = "Starting up thread", LogType = LogType.Message, ConcurrencyTag = runner.ConcurrencyTag}; threadedLog.WriteToLog(msg); //Run the scripts!! @@ -509,7 +511,9 @@ private async Task ProcessThreadedBuild(ThreadedRunner runner) case (int)RunnerReturn.SuccessWithTrialRolledBack: msg.LogType = LogType.Commit; threadedLog.WriteToLog(msg); - threadedLog.WriteToLog(new LogMsg() { LogType = LogType.SuccessDatabases, Message = cfgString }); + msg.LogType = LogType.SuccessDatabases; + msg.Message = cfgString; + threadedLog.WriteToLog(msg); returnVal = 0; break; @@ -518,7 +522,9 @@ private async Task ProcessThreadedBuild(ThreadedRunner runner) default: msg.LogType = LogType.Error; threadedLog.WriteToLog(msg); - threadedLog.WriteToLog(new LogMsg() { LogType = LogType.FailureDatabases, Message = cfgString }); + msg.LogType = LogType.FailureDatabases; + msg.Message = cfgString; + threadedLog.WriteToLog(msg); hasError = true; break; } diff --git a/src/SqlBuildManager.Console/Threaded/ThreadedQuery.cs b/src/SqlBuildManager.Console/Threaded/ThreadedQuery.cs index 60fd0b2a..1a9b77d1 100644 --- a/src/SqlBuildManager.Console/Threaded/ThreadedQuery.cs +++ b/src/SqlBuildManager.Console/Threaded/ThreadedQuery.cs @@ -15,6 +15,7 @@ using SqlBuildManager.Interfaces.Console; using SqlSync.SqlBuild.Status; using Azure.Messaging.ServiceBus; +using Azure.ResourceManager.Resources.Models; namespace SqlBuildManager.Console.Threaded { @@ -145,8 +146,13 @@ private async Task ExecuteQueryFromQueue(CommandLineArgs cmdLine, Connectio { var target = message.As(); var targetDb = target.DbOverrideSequence[0].OverrideDbTarget; + + if(target.ServerName.StartsWith("#")) + { + target.ServerName = target.DbOverrideSequence[0].Server; + } var runner = new QueryCollectionRunner(target.ServerName, targetDb, query, new List(), ReportType.CSV, tmpOutput,cmdLine.DefaultScriptTimeout, connData); - var msg = new LogMsg() { DatabaseName = targetDb, ServerName = target.ServerName, RunId = this.runId, Message = "Queuing up thread", LogType = LogType.Message }; + var msg = new LogMsg() { DatabaseName = targetDb, ServerName = target.ServerName, RunId = this.runId, Message = "Queuing up thread", LogType = LogType.Message, ConcurrencyTag = target.ConcurrencyTag }; threadLogger.WriteToLog(msg); tasks.Add(ProcessThreadedQueryWithQueue(runner, message)); } @@ -164,19 +170,20 @@ private async Task ExecuteQueryFromQueue(CommandLineArgs cmdLine, Connectio private async Task<(int, string)> ProcessThreadedQueryWithQueue(QueryCollectionRunner runner, ServiceBusReceivedMessage message) { var target = message.As(); - threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Starting up thread", LogType = LogType.Message }); + target.DbOverrideSequence[0].ConcurrencyTag = target.ConcurrencyTag; + threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Starting up thread", LogType = LogType.Message, ConcurrencyTag = target.DbOverrideSequence[0].ConcurrencyTag }); var retVal = await runner.CollectQueryData(); - threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Message }); + threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Message, ConcurrencyTag = target.DbOverrideSequence[0].ConcurrencyTag }); if (retVal.Item1 == 0) { await qManager.CompleteMessage(message); - threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Commit }); + threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Commit, ConcurrencyTag = target.DbOverrideSequence[0].ConcurrencyTag }); } else { await qManager.DeadletterMessage(message); - threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Commit }); + threadLogger.WriteToLog(new LogMsg() { DatabaseName = target.DbOverrideSequence[0].OverrideDbTarget, ServerName = target.ServerName, RunId = this.runId, Message = "Thread complete", LogType = LogType.Commit, ConcurrencyTag = target.DbOverrideSequence[0].ConcurrencyTag }); } return retVal; } diff --git a/src/SqlBuildManager.Console/Threaded/ThreadedRunner.cs b/src/SqlBuildManager.Console/Threaded/ThreadedRunner.cs index 19eb61da..66404111 100644 --- a/src/SqlBuildManager.Console/Threaded/ThreadedRunner.cs +++ b/src/SqlBuildManager.Console/Threaded/ThreadedRunner.cs @@ -85,6 +85,19 @@ public bool ForceCustomDacpac get { return forceCustomDacpac; } set { forceCustomDacpac = value; } } + + private string concurrencyTag = string.Empty; + public string ConcurrencyTag + { + get + { + return concurrencyTag; + } + set + { + concurrencyTag = value; + } + } public string DacpacName { get; set; } = string.Empty; private string username = string.Empty; private string password = string.Empty; @@ -95,7 +108,15 @@ public bool ForceCustomDacpac public ThreadedRunner(string serverName, List overrides, CommandLineArgs cmdArgs, string buildRequestedBy, bool forceCustomDacpac) { - server = serverName; + if (serverName.StartsWith("#")) + { + this.server = overrides[0].Server; + } + else + { + this.server = serverName; + } + this.concurrencyTag = overrides[0].ConcurrencyTag; this.overrides = overrides; isTrial = cmdArgs.Trial; this.cmdArgs = cmdArgs; @@ -170,7 +191,7 @@ internal async Task RunDatabaseBuild(ThreadedLogging threadedLog) { runData.ForceCustomDacpac = true; //This will set the BuildData and BuildFileName and ProjectFileName properties on runData - var status = DacPacHelper.UpdateBuildRunDataForDacPacSync(ref runData, server, targetDatabase, authType, username, password, loggingDirectory, cmdArgs.BuildRevision, cmdArgs.DefaultScriptTimeout, cmdArgs.AllowObjectDelete); + var status = DacPacHelper.UpdateBuildRunDataForDacPacSync(ref runData, server, targetDatabase, authType, username, password, loggingDirectory, cmdArgs.BuildRevision, cmdArgs.DefaultScriptTimeout, cmdArgs.AllowObjectDelete, cmdArgs.IdentityArgs.ClientId); switch (status) { case DacpacDeltasStatus.Success: diff --git a/src/SqlBuildManager.Console/Validation.cs b/src/SqlBuildManager.Console/Validation.cs index ffe55e10..716eafef 100644 --- a/src/SqlBuildManager.Console/Validation.cs +++ b/src/SqlBuildManager.Console/Validation.cs @@ -260,8 +260,32 @@ public static int ValidateAndLoadMultiDbData(string multiDbOverrideSettingFileNa log.LogError(error); return (int)ExecutionReturn.MissingTargetDbOverrideSetting; } + + if (!ValidateMultiDatabaseTags(multiData, cmdLine == null? ConcurrencyType.Count : cmdLine.ConcurrencyType)) + { + + error = $"There are database targets that do not have a concurrency tag. This is required when the Concurrency Type is '{cmdLine.ConcurrencyType}'. Please add a concurrency tag to all database targets."; + errorMessages = new string[] { error, "Returning error code: " + (int)ExecutionReturn.MissingOverrideTags }; + log.LogError(error); + return (int)ExecutionReturn.MissingOverrideTags; + } return 0; } + + public static bool ValidateMultiDatabaseTags(MultiDbData multiData, ConcurrencyType concurrencyType) + { + switch(concurrencyType) + { + case ConcurrencyType.Tag: + case ConcurrencyType.MaxPerTag: + if(multiData.AsQueryable().Where(m => m.Overrides.Where(o => o.ConcurrencyTag.Length == 0).Any()).Any()) + { + return false; + } + break; + } + return true; + } private static ConnectionData GetConnDataFromCommandLine(CommandLineArgs cmdLine) { ConnectionData connData = new ConnectionData(cmdLine.Server, cmdLine.Database); diff --git a/src/SqlBuildManager.Console/Worker/Worker.Local.cs b/src/SqlBuildManager.Console/Worker/Worker.Local.cs index 169ebb6a..c4695b42 100644 --- a/src/SqlBuildManager.Console/Worker/Worker.Local.cs +++ b/src/SqlBuildManager.Console/Worker/Worker.Local.cs @@ -30,7 +30,7 @@ internal static int RunLocalBuildAsync(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return -8675; } diff --git a/src/SqlBuildManager.Console/Worker/Worker.Utility.cs b/src/SqlBuildManager.Console/Worker/Worker.Utility.cs index 43e43a9c..090a4bdc 100644 --- a/src/SqlBuildManager.Console/Worker/Worker.Utility.cs +++ b/src/SqlBuildManager.Console/Worker/Worker.Utility.cs @@ -1,9 +1,6 @@ using Microsoft.Extensions.Logging; using Spectre.Console; using SqlBuildManager.Console.CommandLine; -using SqlBuildManager.Console.KeyVault; -using SqlBuildManager.Console.Kubernetes; -using SqlBuildManager.Console.Queue; using SqlBuildManager.Enterprise.Policy; using SqlBuildManager.Interfaces.Console; using SqlSync.SqlBuild.MultiDb; @@ -11,10 +8,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Runtime.Intrinsics.X86; using System.Text; using System.Text.Json; -using System.Threading.Tasks; using sb = SqlSync.SqlBuild; namespace SqlBuildManager.Console @@ -29,7 +24,7 @@ internal static int CreateDacpac(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return -8675; } @@ -41,7 +36,7 @@ internal static int CreateDacpac(CommandLineArgs cmdLine) Directory.CreateDirectory(path); } - if (!sb.DacPacHelper.ExtractDacPac(cmdLine.Database, cmdLine.Server, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, fullName)) + if (!sb.DacPacHelper.ExtractDacPac(cmdLine.Database, cmdLine.Server, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, fullName, cmdLine.DefaultScriptTimeout, cmdLine.IdentityArgs.ClientId)) { log.LogError($"Error creating the dacpac from {cmdLine.Server} : {cmdLine.Database}"); return (int)ExecutionReturn.BuildFileExtractionError; @@ -102,7 +97,7 @@ internal static void SyncronizeDatabase(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -122,7 +117,7 @@ internal static void GetDifferences(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -139,7 +134,7 @@ internal static void CreateBackout(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -270,7 +265,7 @@ internal static int CreatePackageFromDiff(CommandLineArgs cmdLine) string id = Guid.NewGuid().ToString(); string goldTmp = Path.Combine(path, $"gold-{id}.dacpac"); string targetTmp = Path.Combine(path, $"target-{id}.dacpac"); - if (!sb.DacPacHelper.ExtractDacPac(cmdLine.SynchronizeArgs.GoldDatabase, cmdLine.SynchronizeArgs.GoldServer, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, goldTmp)) + if (!sb.DacPacHelper.ExtractDacPac(cmdLine.SynchronizeArgs.GoldDatabase, cmdLine.SynchronizeArgs.GoldServer, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, goldTmp, cmdLine.DefaultScriptTimeout, cmdLine.IdentityArgs.ClientId)) { log.LogError($"Error creating the tempprary dacpac from {cmdLine.SynchronizeArgs.GoldServer} : {cmdLine.SynchronizeArgs.GoldDatabase}"); return (int)ExecutionReturn.BuildFileExtractionError; @@ -280,7 +275,7 @@ internal static int CreatePackageFromDiff(CommandLineArgs cmdLine) log.LogInformation($"Temporary DACPAC created from {cmdLine.SynchronizeArgs.GoldServer} : {cmdLine.SynchronizeArgs.GoldDatabase} saved to -- {goldTmp}"); } - if (!sb.DacPacHelper.ExtractDacPac(cmdLine.Database, cmdLine.Server, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, targetTmp)) + if (!sb.DacPacHelper.ExtractDacPac(cmdLine.Database, cmdLine.Server, cmdLine.AuthenticationArgs.AuthenticationType, cmdLine.AuthenticationArgs.UserName, cmdLine.AuthenticationArgs.Password, targetTmp, cmdLine.DefaultScriptTimeout, cmdLine.IdentityArgs.ClientId)) { log.LogError($"Error creating the tempprary dacpac from {cmdLine.Server} : {cmdLine.Database}"); return (int)ExecutionReturn.BuildFileExtractionError; @@ -446,7 +441,7 @@ internal static void GetPackageHash(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -478,7 +473,7 @@ internal static void ExecutePolicyCheck(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -529,7 +524,7 @@ internal static void PackageSbxFilesIntoSbmFiles(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return; } @@ -575,7 +570,7 @@ internal static sb.DacpacDeltasStatus GetSbmFromDacPac(CommandLineArgs cmd, Mult cmd.AuthenticationArgs.Password, cmd.BuildRevision, cmd.DefaultScriptTimeout, - multiDb, out sbmName, batchScripts, cmd.AllowObjectDelete); + multiDb, out sbmName, batchScripts, cmd.AllowObjectDelete, cmd.IdentityArgs.ClientId); } else { @@ -589,7 +584,7 @@ internal static sb.DacpacDeltasStatus GetSbmFromDacPac(CommandLineArgs cmd, Mult cmd.AuthenticationArgs.Password, cmd.BuildRevision, cmd.DefaultScriptTimeout, - multiDb, out sbmName, batchScripts, cmd.AllowObjectDelete); + multiDb, out sbmName, batchScripts, cmd.AllowObjectDelete, cmd.IdentityArgs.ClientId); } } @@ -750,6 +745,16 @@ internal static string ConsoleTableBuilder(List splits, List sect return sb.ToString().Trim(); } + internal static void DecryptSettingsFile(CommandLineArgs cmdLine, string settingsfilekey) + { + (var success, cmdLine) = Init(cmdLine); + var serialized = JsonSerializer.Serialize(cmdLine, new JsonSerializerOptions() { WriteIndented = true }); + System.Console.WriteLine(); + System.Console.WriteLine(serialized); + System.Console.WriteLine(); + + } + internal static int ShowCommands(bool markdown) { var filledCmdDocs = CommandLineBuilder.ListCommands_ForDocs(); diff --git a/src/SqlBuildManager.Console/Worker/Worker.cs b/src/SqlBuildManager.Console/Worker/Worker.cs index b349e47c..18f81f29 100644 --- a/src/SqlBuildManager.Console/Worker/Worker.cs +++ b/src/SqlBuildManager.Console/Worker/Worker.cs @@ -119,7 +119,7 @@ internal static (bool, CommandLineArgs) Init(CommandLineArgs cmdLine) (decryptSuccess, cmdLine) = Cryptography.DecryptSensitiveFields(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); } bool tmp; (tmp, cmdLine) = KeyVaultHelper.GetSecrets(cmdLine); @@ -228,7 +228,7 @@ internal static async Task DeQueueOverrideTargets(CommandLineArgs cmdLine) (kvSuccess, cmdLine) = KeyVaultHelper.GetSecrets(cmdLine); if (!decryptSuccess) { - log.LogError("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); + log.LogWarning("There was an error decrypting one or more value from the --settingsfile. Please check that you are using the correct --settingsfilekey value"); return -53443; } diff --git a/src/SqlBuildManager.Console/sbm.csproj b/src/SqlBuildManager.Console/sbm.csproj index 961dff51..20bc1fff 100644 --- a/src/SqlBuildManager.Console/sbm.csproj +++ b/src/SqlBuildManager.Console/sbm.csproj @@ -22,16 +22,16 @@ - - - - - - + + + + + + - + @@ -48,7 +48,7 @@ - + @@ -61,8 +61,8 @@ - - + + diff --git a/src/SqlBuildManager.Enterprise.UnitTest/SqlBuildManager.Enterprise.UnitTest.csproj b/src/SqlBuildManager.Enterprise.UnitTest/SqlBuildManager.Enterprise.UnitTest.csproj index 3cf005af..4506e8b8 100644 --- a/src/SqlBuildManager.Enterprise.UnitTest/SqlBuildManager.Enterprise.UnitTest.csproj +++ b/src/SqlBuildManager.Enterprise.UnitTest/SqlBuildManager.Enterprise.UnitTest.csproj @@ -15,9 +15,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlBuildManager.Interfaces/Console/Enumerations.cs b/src/SqlBuildManager.Interfaces/Console/Enumerations.cs index b992456d..9d33b1b1 100644 --- a/src/SqlBuildManager.Interfaces/Console/Enumerations.cs +++ b/src/SqlBuildManager.Interfaces/Console/Enumerations.cs @@ -74,7 +74,9 @@ public enum ExecutionReturn [EnumMember] CheckingConnections = 7000, [EnumMember] - DacpacDatabasesInSync = 87598 + DacpacDatabasesInSync = 87598, + [EnumMember] + MissingOverrideTags = 100323 } diff --git a/src/SqlBuildManager.Logging/SqlBuildManager.Logging.csproj b/src/SqlBuildManager.Logging/SqlBuildManager.Logging.csproj index fec81625..2414d70d 100644 --- a/src/SqlBuildManager.Logging/SqlBuildManager.Logging.csproj +++ b/src/SqlBuildManager.Logging/SqlBuildManager.Logging.csproj @@ -14,11 +14,11 @@ - - + + - + diff --git a/src/SqlBuildManager.Logging/Threaded/EventHubLogging.cs b/src/SqlBuildManager.Logging/Threaded/EventHubLogging.cs index 5f142d84..148a7f40 100644 --- a/src/SqlBuildManager.Logging/Threaded/EventHubLogging.cs +++ b/src/SqlBuildManager.Logging/Threaded/EventHubLogging.cs @@ -43,7 +43,7 @@ public static void ConfigureEventHubLogger(ILoggerFactory factory) } catch(Exception exe) { - Console.WriteLine("Failed to create EventHub Logger: " + exe.ToString()); + Console.WriteLine("Failed to create EventHub Logger: " + exe.Message); } } private static TokenCredential GetAadTokenCredential() diff --git a/src/SqlBuildManager.ScriptHandling.UnitTest/SqlBuildManager.ScriptHandling.UnitTest.csproj b/src/SqlBuildManager.ScriptHandling.UnitTest/SqlBuildManager.ScriptHandling.UnitTest.csproj index 98cd7eb5..736d5d68 100644 --- a/src/SqlBuildManager.ScriptHandling.UnitTest/SqlBuildManager.ScriptHandling.UnitTest.csproj +++ b/src/SqlBuildManager.ScriptHandling.UnitTest/SqlBuildManager.ScriptHandling.UnitTest.csproj @@ -10,9 +10,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.Connection.Dependent.UnitTest/SqlSync.Connection.Dependent.UnitTest.csproj b/src/SqlSync.Connection.Dependent.UnitTest/SqlSync.Connection.Dependent.UnitTest.csproj index 264b9941..92795aba 100644 --- a/src/SqlSync.Connection.Dependent.UnitTest/SqlSync.Connection.Dependent.UnitTest.csproj +++ b/src/SqlSync.Connection.Dependent.UnitTest/SqlSync.Connection.Dependent.UnitTest.csproj @@ -13,9 +13,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.Connection.UnitTest/ConnectionHelperTest.cs b/src/SqlSync.Connection.UnitTest/ConnectionHelperTest.cs index c5b9daa7..4ba7df8e 100644 --- a/src/SqlSync.Connection.UnitTest/ConnectionHelperTest.cs +++ b/src/SqlSync.Connection.UnitTest/ConnectionHelperTest.cs @@ -184,10 +184,10 @@ public void GetConnectionTest_FromConnectionDataObj() public void GetTargetDatabaseTest() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); - overrides.Add(new DatabaseOverride("default4", "default4")); - overrides.Add(new DatabaseOverride("MixedCASE", "override5")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default4", "default4")); + overrides.Add(new DatabaseOverride("server1", "MixedCASE", "override5")); string actual = ConnectionHelper.GetTargetDatabase("default2", overrides); Assert.AreEqual("override2", actual); @@ -206,8 +206,8 @@ public void GetTargetDatabaseTest() public void GetTargetDatabaseTest_EmptyDefault() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); string actual = ConnectionHelper.GetTargetDatabase("", overrides); Assert.AreEqual("override1", actual); @@ -221,8 +221,8 @@ public void GetTargetDatabaseTest_EmptyDefault() public void GetTargetDatabaseTest_NullDefault() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); string actual = ConnectionHelper.GetTargetDatabase(null, overrides); Assert.AreEqual("override1", actual); @@ -236,8 +236,8 @@ public void GetTargetDatabaseTest_NullDefault() public void GetTargetDatabaseTest_NoOverrideFound() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); string actual = ConnectionHelper.GetTargetDatabase("default3", overrides); Assert.AreEqual("default3", actual); @@ -251,10 +251,10 @@ public void GetTargetDatabaseTest_NoOverrideFound() public void GetTargetDatabaseTest_CaseInsensitive() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); - overrides.Add(new DatabaseOverride("default4", "default4")); - overrides.Add(new DatabaseOverride("MixedCASE", "override5")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default4", "default4")); + overrides.Add(new DatabaseOverride("server1", "MixedCASE", "override5")); string actual = ConnectionHelper.GetTargetDatabase("mixedCaSe", overrides); Assert.AreEqual("override5", actual); @@ -269,10 +269,10 @@ public void GetTargetDatabaseTest_CaseInsensitive() public void ValidateDatabaseOverridesTest_Good() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); - overrides.Add(new DatabaseOverride("default4", "default4")); - overrides.Add(new DatabaseOverride("MixedCASE", "override5")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default4", "default4")); + overrides.Add(new DatabaseOverride("server1", "MixedCASE", "override5")); bool expected = true; bool actual; @@ -287,10 +287,10 @@ public void ValidateDatabaseOverridesTest_Good() public void ValidateDatabaseOverridesTest_MissingSetting() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); - overrides.Add(new DatabaseOverride("", "")); - overrides.Add(new DatabaseOverride("MixedCASE", "override5")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "", "")); + overrides.Add(new DatabaseOverride("server1", "MixedCASE", "override5")); bool expected = false; bool actual; @@ -318,10 +318,10 @@ public void ValidateDatabaseOverridesTest_NullList() public void ValidateDatabaseOverridesTest_NullOverride() { List overrides = new List(); - overrides.Add(new DatabaseOverride("default1", "override1")); - overrides.Add(new DatabaseOverride("default2", "override2")); + overrides.Add(new DatabaseOverride("server1", "default1", "override1")); + overrides.Add(new DatabaseOverride("server1", "default2", "override2")); overrides.Add(null); - overrides.Add(new DatabaseOverride("MixedCASE", "override5")); + overrides.Add(new DatabaseOverride("server1", "MixedCASE", "override5")); bool expected = false; bool actual; diff --git a/src/SqlSync.Connection.UnitTest/SqlSync.Connection.UnitTest.csproj b/src/SqlSync.Connection.UnitTest/SqlSync.Connection.UnitTest.csproj index 264b9941..92795aba 100644 --- a/src/SqlSync.Connection.UnitTest/SqlSync.Connection.UnitTest.csproj +++ b/src/SqlSync.Connection.UnitTest/SqlSync.Connection.UnitTest.csproj @@ -13,9 +13,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.Connection/ConnectionHelper.cs b/src/SqlSync.Connection/ConnectionHelper.cs index 65edde80..c1a044a4 100644 --- a/src/SqlSync.Connection/ConnectionHelper.cs +++ b/src/SqlSync.Connection/ConnectionHelper.cs @@ -106,6 +106,7 @@ public static string GetConnectionString(string dbName, string serverName, strin builder.Password = pw; break; } + log.LogDebug($"Database Connection string: {builder.ConnectionString}"); return builder.ConnectionString; } @@ -159,6 +160,7 @@ public static bool TestDatabaseConnection(ConnectionData connData) DbConnection conn = null; try { + connData.ScriptTimeout = 60; conn = GetConnection(connData); conn.Open(); conn.Close(); diff --git a/src/SqlSync.Connection/DatabaseOverride.cs b/src/SqlSync.Connection/DatabaseOverride.cs index fb415bca..00d4a016 100644 --- a/src/SqlSync.Connection/DatabaseOverride.cs +++ b/src/SqlSync.Connection/DatabaseOverride.cs @@ -8,6 +8,8 @@ namespace SqlSync.Connection { public class DatabaseOverride { + public string ConcurrencyTag { get; set; } = string.Empty; + public string Server { get; set; } public string DefaultDbTarget { get; set; } = string.Empty; private string overrideDbTarget = string.Empty; public string OverrideDbTarget @@ -25,14 +27,24 @@ public string OverrideDbTarget public DatabaseOverride() { } - public DatabaseOverride(string defaultDbTarget, string overrideDbTarget) + public DatabaseOverride(string server, string defaultDbTarget, string overrideDbTarget, string tag = "") { - DefaultDbTarget = defaultDbTarget; + this.Server = server; + this.DefaultDbTarget = defaultDbTarget; this.overrideDbTarget = overrideDbTarget; + this.ConcurrencyTag = tag; } public override string ToString() { - return DefaultDbTarget + ";" + overrideDbTarget; + if(this.ConcurrencyTag.Length > 0) + { + return DefaultDbTarget + ";" + overrideDbTarget + "#" + ConcurrencyTag; + } + else + { + return DefaultDbTarget + ";" + overrideDbTarget; + } + } private List queryRowData = new List(); diff --git a/src/SqlSync.DbInformation.Dependent.UnitTest/SqlSync.DbInformation.Dependent.UnitTest.csproj b/src/SqlSync.DbInformation.Dependent.UnitTest/SqlSync.DbInformation.Dependent.UnitTest.csproj index 73108947..98b696a4 100644 --- a/src/SqlSync.DbInformation.Dependent.UnitTest/SqlSync.DbInformation.Dependent.UnitTest.csproj +++ b/src/SqlSync.DbInformation.Dependent.UnitTest/SqlSync.DbInformation.Dependent.UnitTest.csproj @@ -7,9 +7,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.ObjectScript.Dependent.UnitTest/SqlSync.ObjectScript.Dependent.UnitTest.csproj b/src/SqlSync.ObjectScript.Dependent.UnitTest/SqlSync.ObjectScript.Dependent.UnitTest.csproj index ee2685da..4261cedc 100644 --- a/src/SqlSync.ObjectScript.Dependent.UnitTest/SqlSync.ObjectScript.Dependent.UnitTest.csproj +++ b/src/SqlSync.ObjectScript.Dependent.UnitTest/SqlSync.ObjectScript.Dependent.UnitTest.csproj @@ -7,9 +7,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.ObjectScript.UnitTest/SqlSync.ObjectScript.UnitTest.csproj b/src/SqlSync.ObjectScript.UnitTest/SqlSync.ObjectScript.UnitTest.csproj index c86800b1..e1ab1943 100644 --- a/src/SqlSync.ObjectScript.UnitTest/SqlSync.ObjectScript.UnitTest.csproj +++ b/src/SqlSync.ObjectScript.UnitTest/SqlSync.ObjectScript.UnitTest.csproj @@ -7,9 +7,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.SprocTest/SqlSync.SprocTest.csproj b/src/SqlSync.SprocTest/SqlSync.SprocTest.csproj index 2d8bb840..82df61be 100644 --- a/src/SqlSync.SprocTest/SqlSync.SprocTest.csproj +++ b/src/SqlSync.SprocTest/SqlSync.SprocTest.csproj @@ -8,9 +8,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.SqlBuild.Dependent.UnitTest/Initialization.cs b/src/SqlSync.SqlBuild.Dependent.UnitTest/Initialization.cs index 2de27d37..67614cef 100644 --- a/src/SqlSync.SqlBuild.Dependent.UnitTest/Initialization.cs +++ b/src/SqlSync.SqlBuild.Dependent.UnitTest/Initialization.cs @@ -550,7 +550,7 @@ public BackgroundWorker GetBackgroundWorker() public List GetDatabaseOverrides() { List o = new List(); - o.Add(new DatabaseOverride(testDatabaseNames[0], testDatabaseNames[0])); + o.Add(new DatabaseOverride(serverName, testDatabaseNames[0], testDatabaseNames[0])); return o; } diff --git a/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlBuildHelperTest.cs b/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlBuildHelperTest.cs index 6e3f4123..040bf3ea 100644 --- a/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlBuildHelperTest.cs +++ b/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlBuildHelperTest.cs @@ -1,4 +1,5 @@ using Microsoft.Data.SqlClient; +using Microsoft.SqlServer.Dac.Model; using Microsoft.VisualStudio.TestTools.UnitTesting; using SqlSync.Connection; using SqlSync.SqlBuild.SqlLogging; @@ -811,7 +812,7 @@ public void GetTargetDatabaseTest_GetOverrideBack() Initialization init = GetInitializationObject(); SqlBuildHelper helper = init.CreateSqlBuildHelper_Basic(); List overrides = new List(); - overrides.Add(new DatabaseOverride("MyDefault", "MyOverride")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault", "MyOverride")); helper.targetDatabaseOverrides = overrides; string defaultDatabase = "MyDefault"; string expected = "MyOverride"; @@ -830,7 +831,7 @@ public void GetTargetDatabaseTest_DefaultSetToEmptyString() Initialization init = GetInitializationObject(); SqlBuildHelper helper = init.CreateSqlBuildHelper_Basic(); List overrides = new List(); - overrides.Add(new DatabaseOverride("MyDefault", "MyOverride")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault", "MyOverride")); helper.targetDatabaseOverrides = overrides; string defaultDatabase = string.Empty; string expected = "MyOverride"; @@ -848,7 +849,7 @@ public void GetTargetDatabaseTest_DefaultSetToNull() Initialization init = GetInitializationObject(); SqlBuildHelper helper = init.CreateSqlBuildHelper_Basic(); List overrides = new List(); - overrides.Add(new DatabaseOverride("MyDefault", "MyOverride")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault", "MyOverride")); helper.targetDatabaseOverrides = overrides; string defaultDatabase = null; string expected = "MyOverride"; @@ -867,8 +868,8 @@ public void GetTargetDatabaseTest_MultipleOverridesSet() Initialization init = GetInitializationObject(); SqlBuildHelper helper = init.CreateSqlBuildHelper_Basic(); List overrides = new List(); - overrides.Add(new DatabaseOverride("MyDefault", "MyOverride")); - overrides.Add(new DatabaseOverride("MyDefault2", "MyOverride2")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault", "MyOverride")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault2", "MyOverride2")); helper.targetDatabaseOverrides = overrides; string defaultDatabase = "MyDefault2"; string expected = "MyOverride2"; @@ -887,8 +888,8 @@ public void GetTargetDatabaseTest_DoesNotFindDefault() Initialization init = GetInitializationObject(); SqlBuildHelper helper = init.CreateSqlBuildHelper_Basic(); List overrides = new List(); - overrides.Add(new DatabaseOverride("MyDefault", "MyOverride")); - overrides.Add(new DatabaseOverride("MyDefault2", "MyOverride2")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault", "MyOverride")); + overrides.Add(new DatabaseOverride("Server1", "MyDefault2", "MyOverride2")); helper.targetDatabaseOverrides = overrides; string defaultDatabase = "MyDefault3"; string expected = defaultDatabase; @@ -1167,9 +1168,9 @@ public void GetTargetDatabaseTest_SingleServer() SqlSyncBuildData buildData = init.CreateSqlSyncSqlBuildDataObject(); SqlBuildHelper target = init.CreateSqlBuildHelperAccessor(buildData); - DatabaseOverride override1 = new DatabaseOverride("default1", "override1"); - DatabaseOverride override2 = new DatabaseOverride("default2", "override2"); - DatabaseOverride override3 = new DatabaseOverride("default3", "override3"); + DatabaseOverride override1 = new DatabaseOverride("Server1", "default1", "override1"); + DatabaseOverride override2 = new DatabaseOverride("Server1","default2", "override2"); + DatabaseOverride override3 = new DatabaseOverride("Server1", "default3", "override3"); List ovr = new List(); ovr.Add(override1); ovr.Add(override2); @@ -1200,9 +1201,9 @@ public void GetTargetDatabaseTest_UseStaticOverride() SqlSyncBuildData buildData = init.CreateSqlSyncSqlBuildDataObject(); SqlBuildHelper target = init.CreateSqlBuildHelperAccessor(buildData); - DatabaseOverride override1 = new DatabaseOverride("default1", "override1"); - DatabaseOverride override2 = new DatabaseOverride("default2", "override2"); - DatabaseOverride override3 = new DatabaseOverride("default3", "override3"); + DatabaseOverride override1 = new DatabaseOverride("Server1", "default1", "override1"); + DatabaseOverride override2 = new DatabaseOverride("Server1", "default2", "override2"); + DatabaseOverride override3 = new DatabaseOverride("Server1", "default3", "override3"); List ovr = new List(); ovr.Add(override1); ovr.Add(override2); diff --git a/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlSync.SqlBuild.Dependent.UnitTest.csproj b/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlSync.SqlBuild.Dependent.UnitTest.csproj index ca33b564..8c968f0e 100644 --- a/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlSync.SqlBuild.Dependent.UnitTest.csproj +++ b/src/SqlSync.SqlBuild.Dependent.UnitTest/SqlSync.SqlBuild.Dependent.UnitTest.csproj @@ -33,9 +33,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.SqlBuild.UnitTest/DbOverrideSequenceTest.cs b/src/SqlSync.SqlBuild.UnitTest/DbOverrideSequenceTest.cs index 40779522..30354625 100644 --- a/src/SqlSync.SqlBuild.UnitTest/DbOverrideSequenceTest.cs +++ b/src/SqlSync.SqlBuild.UnitTest/DbOverrideSequenceTest.cs @@ -199,12 +199,12 @@ public void GetOverrideDatabaseNameListTest() { DbOverrides target = new DbOverrides(); List tmp1 = new List(); - tmp1.Add(new DatabaseOverride("default1a", "override1a")); - tmp1.Add(new DatabaseOverride("default1b", "override1b")); + tmp1.Add(new DatabaseOverride("server1", "default1a", "override1a")); + tmp1.Add(new DatabaseOverride("server1", "default1b", "override1b")); List tmp2 = new List(); - tmp2.Add(new DatabaseOverride("default2a", "override2a")); - tmp2.Add(new DatabaseOverride("default2b", "override2b")); + tmp2.Add(new DatabaseOverride("server1", "default2a", "override2a")); + tmp2.Add(new DatabaseOverride("server1", "default2b", "override2b")); target.AddRange(tmp1); target.AddRange(tmp2); @@ -223,8 +223,8 @@ public void AddTest() { DbOverrides target = new DbOverrides(); List tmp1 = new List(); - tmp1.Add(new DatabaseOverride("default1a", "override1a")); - tmp1.Add(new DatabaseOverride("default1b", "override1b")); + tmp1.Add(new DatabaseOverride("server1", "default1a", "override1a")); + tmp1.Add(new DatabaseOverride("server1", "default1b", "override1b")); target.AddRange(tmp1); Assert.AreEqual(2, target.Count); diff --git a/src/SqlSync.SqlBuild.UnitTest/MultiDbHelperTest.cs b/src/SqlSync.SqlBuild.UnitTest/MultiDbHelperTest.cs index ae2bdb8d..1ebe3854 100644 --- a/src/SqlSync.SqlBuild.UnitTest/MultiDbHelperTest.cs +++ b/src/SqlSync.SqlBuild.UnitTest/MultiDbHelperTest.cs @@ -293,7 +293,7 @@ public void ValidateMultiDatabaseData_NullOverrideSequence() { MultiDbData dbData = new MultiDbData() { - new ServerData(){ ServerName = "server1", Overrides = new DbOverrides(new DatabaseOverride("default", "target"),new DatabaseOverride("default2", "target2")) }, + new ServerData(){ ServerName = "server1", Overrides = new DbOverrides(new DatabaseOverride("server1", "default", "target"),new DatabaseOverride("server1", "default2", "target2")) }, new ServerData(){ ServerName = "server2", Overrides = null } }; @@ -319,14 +319,14 @@ public void ValidateMultiDatabaseData_EmptyOverrideSequence() DbOverrides ovr = new DbOverrides(); - ovr.Add(new DatabaseOverride("default", "target")); - ovr.Add(new DatabaseOverride("default2", "target2")); + ovr.Add(new DatabaseOverride("server1", "default", "target")); + ovr.Add(new DatabaseOverride("server1", "default2", "target2")); srv1.Overrides = ovr; dbData.Add(srv1); DbOverrides ovr2 = new DbOverrides(); - ovr.Add(new DatabaseOverride("default", "target")); - ovr.Add(new DatabaseOverride("", "")); + ovr.Add(new DatabaseOverride("server2", "default", "target")); + ovr.Add(new DatabaseOverride("server2", "", "")); srv2.Overrides = ovr2; dbData.Add(srv2); @@ -346,13 +346,13 @@ public void ConvertMultiDbDataToTextConfigTest() { MultiDbData cfg = new MultiDbData { - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default1", "override1")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default2", "override2")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default0", "override0")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("defaultX", "overrideX"), new DatabaseOverride("defaultY", "overrideY")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default6", "override6")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default7", "override7")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default5", "override5")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default1", "override1")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default2", "override2")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default0", "override0")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","defaultX", "overrideX"), new DatabaseOverride("ServerA","defaultY", "overrideY")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default6", "override6")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default7", "override7")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default5", "override5")) }, }; string expected = @@ -375,13 +375,13 @@ public void SerializeMultiDbAsXMl_Test() { MultiDbData cfg = new MultiDbData { - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default1", "override1")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default2", "override2")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default0", "override0")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("defaultX", "overrideX"), new DatabaseOverride("defaultY", "overrideY")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default6", "override6")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default7", "override7")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default5", "override5")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default1", "override1")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default2", "override2")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default0", "override0")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","defaultX", "overrideX"), new DatabaseOverride("ServerA","defaultY", "overrideY")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default6", "override6")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default7", "override7")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default5", "override5")) }, }; @@ -399,13 +399,13 @@ public void SerializeMultiDbAsJson_Test() { MultiDbData cfg = new MultiDbData { - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default1", "override1")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default2", "override2")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default0", "override0")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("defaultX", "overrideX"), new DatabaseOverride("defaultY", "overrideY")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default6", "override6")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default7", "override7")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default5", "override5")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default1", "override1")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default2", "override2")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default0", "override0")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","defaultX", "overrideX"), new DatabaseOverride("ServerA","defaultY", "overrideY")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default6", "override6")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default7", "override7")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default5", "override5")) }, }; @@ -416,19 +416,42 @@ public void SerializeMultiDbAsJson_Test() } + [TestMethod()] + [DeploymentItem("SqlSync.SqlBuild.dll")] + public void SerializeMultiDbWithTagAsJson_Test() + { + MultiDbData cfg = new MultiDbData + { + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default1", "override1", "TagA")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default2", "override2", "TagA")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default0", "override0", "TagA")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","defaultX", "overrideX", "TagB"), new DatabaseOverride("ServerA","defaultY", "overrideY", "TagB")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default6", "override6", "TagB")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default7", "override7", "TagB")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default5", "override5", "TagB")) }, + }; + + + string actual; + actual = MultiDbHelper.SerializeMultiDbConfigurationToJson(cfg); + var expected = Properties.Resources.serialized_multidb_json_withtag_json; + Assert.AreEqual(expected, actual); + + } + [TestMethod()] [DeploymentItem("SqlSync.SqlBuild.dll")] public void SerializeAndDeserializeMultiDbAsJson_Test() { MultiDbData cfg = new MultiDbData { - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default1", "override1")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default2", "override2")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("default0", "override0")) }, - new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("defaultX", "overrideX"), new DatabaseOverride("defaultY", "overrideY")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default6", "override6")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default7", "override7")) }, - new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("default5", "override5")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default1", "override1")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default2", "override2")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","default0", "override0")) }, + new ServerData() { ServerName = "ServerA", Overrides = new DbOverrides(new DatabaseOverride("ServerA","defaultX", "overrideX"), new DatabaseOverride("ServerA","defaultY", "overrideY")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default6", "override6")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default7", "override7")) }, + new ServerData() { ServerName = "ServerB", Overrides = new DbOverrides( new DatabaseOverride("ServerB","default5", "override5")) }, }; diff --git a/src/SqlSync.SqlBuild.UnitTest/OverrideDataTest.cs b/src/SqlSync.SqlBuild.UnitTest/OverrideDataTest.cs index fc7fd5ca..23828a00 100644 --- a/src/SqlSync.SqlBuild.UnitTest/OverrideDataTest.cs +++ b/src/SqlSync.SqlBuild.UnitTest/OverrideDataTest.cs @@ -70,8 +70,8 @@ public TestContext TestContext public void TargetDatabaseOverridesTest() { List expected = new List(); - expected.Add(new DatabaseOverride("default1", "override1")); - expected.Add(new DatabaseOverride("default2", "override2")); + expected.Add(new DatabaseOverride("server1", "default1", "override1")); + expected.Add(new DatabaseOverride("server1", "default2", "override2")); List actual; OverrideData.TargetDatabaseOverrides = expected; actual = OverrideData.TargetDatabaseOverrides; diff --git a/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.Designer.cs b/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.Designer.cs index 0d9f0793..cbd640b0 100644 --- a/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.Designer.cs +++ b/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.Designer.cs @@ -114,6 +114,14 @@ internal static string serialized_multidb_json } } + internal static string serialized_multidb_json_withtag_json + { + get + { + return ResourceManager.GetString("serialized_multidb_json_withtag_json", resourceCulture); + } + } + /// /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?> diff --git a/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.resx b/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.resx index c2dbbdd9..8dd0af66 100644 --- a/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.resx +++ b/src/SqlSync.SqlBuild.UnitTest/Properties/Resources.resx @@ -133,6 +133,9 @@ ..\Resources\serialized_multidb_json.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + ..\Resources\serialized_multidb_json_withtag_json.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + ..\Resources\serialized_multidb_xml.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16 diff --git a/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json.txt b/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json.txt index a74fc7b3..ee67beca 100644 --- a/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json.txt +++ b/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json.txt @@ -3,6 +3,8 @@ "ServerName": "ServerA", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerA", "DefaultDbTarget": "default1", "OverrideDbTarget": "override1" } @@ -12,6 +14,8 @@ "ServerName": "ServerA", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerA", "DefaultDbTarget": "default2", "OverrideDbTarget": "override2" } @@ -21,6 +25,8 @@ "ServerName": "ServerA", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerA", "DefaultDbTarget": "default0", "OverrideDbTarget": "override0" } @@ -30,10 +36,14 @@ "ServerName": "ServerA", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerA", "DefaultDbTarget": "defaultX", "OverrideDbTarget": "overrideX" }, { + "ConcurrencyTag": "", + "Server": "ServerA", "DefaultDbTarget": "defaultY", "OverrideDbTarget": "overrideY" } @@ -43,6 +53,8 @@ "ServerName": "ServerB", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerB", "DefaultDbTarget": "default6", "OverrideDbTarget": "override6" } @@ -52,6 +64,8 @@ "ServerName": "ServerB", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerB", "DefaultDbTarget": "default7", "OverrideDbTarget": "override7" } @@ -61,6 +75,8 @@ "ServerName": "ServerB", "Overrides": [ { + "ConcurrencyTag": "", + "Server": "ServerB", "DefaultDbTarget": "default5", "OverrideDbTarget": "override5" } diff --git a/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json_withtag_json.txt b/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json_withtag_json.txt new file mode 100644 index 00000000..641f4cbf --- /dev/null +++ b/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_json_withtag_json.txt @@ -0,0 +1,85 @@ +[ + { + "ServerName": "ServerA", + "Overrides": [ + { + "ConcurrencyTag": "TagA", + "Server": "ServerA", + "DefaultDbTarget": "default1", + "OverrideDbTarget": "override1" + } + ] + }, + { + "ServerName": "ServerA", + "Overrides": [ + { + "ConcurrencyTag": "TagA", + "Server": "ServerA", + "DefaultDbTarget": "default2", + "OverrideDbTarget": "override2" + } + ] + }, + { + "ServerName": "ServerA", + "Overrides": [ + { + "ConcurrencyTag": "TagA", + "Server": "ServerA", + "DefaultDbTarget": "default0", + "OverrideDbTarget": "override0" + } + ] + }, + { + "ServerName": "ServerA", + "Overrides": [ + { + "ConcurrencyTag": "TagB", + "Server": "ServerA", + "DefaultDbTarget": "defaultX", + "OverrideDbTarget": "overrideX" + }, + { + "ConcurrencyTag": "TagB", + "Server": "ServerA", + "DefaultDbTarget": "defaultY", + "OverrideDbTarget": "overrideY" + } + ] + }, + { + "ServerName": "ServerB", + "Overrides": [ + { + "ConcurrencyTag": "TagB", + "Server": "ServerB", + "DefaultDbTarget": "default6", + "OverrideDbTarget": "override6" + } + ] + }, + { + "ServerName": "ServerB", + "Overrides": [ + { + "ConcurrencyTag": "TagB", + "Server": "ServerB", + "DefaultDbTarget": "default7", + "OverrideDbTarget": "override7" + } + ] + }, + { + "ServerName": "ServerB", + "Overrides": [ + { + "ConcurrencyTag": "TagB", + "Server": "ServerB", + "DefaultDbTarget": "default5", + "OverrideDbTarget": "override5" + } + ] + } +] \ No newline at end of file diff --git a/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_xml.txt b/src/SqlSync.SqlBuild.UnitTest/Resources/serialized_multidb_xml.txt index 4b6848fa60fa6e1e9682a76ca148c2666d7a51f1..cd8d5bdcddc08c102461925d7dd1be18323b6d52 100644 GIT binary patch delta 455 zcmeyNdP8@E1e3HgLq05~_-i%(AAWShK;nP+knqrzk+ zc8SRw*z`8LG0BmqaS{vZ8aHoX^C8bRElw{+vi!G*iv(vL5&#Fx<^wz=I1{P~9GX`A Nq}vA8*d|!S2ms7Wa}@vp delta 71 zcmcbi`$Khu1k>aPJbIfCG08y~U93<>5C@bY#qGto`2mj)ME)AT9Mk3kAt*0Rw1^P^ DuSgjU diff --git a/src/SqlSync.SqlBuild.UnitTest/SqlSync.SqlBuild.UnitTest.csproj b/src/SqlSync.SqlBuild.UnitTest/SqlSync.SqlBuild.UnitTest.csproj index 7e4cb4fc..69f96e91 100644 --- a/src/SqlSync.SqlBuild.UnitTest/SqlSync.SqlBuild.UnitTest.csproj +++ b/src/SqlSync.SqlBuild.UnitTest/SqlSync.SqlBuild.UnitTest.csproj @@ -8,6 +8,7 @@ + @@ -16,15 +17,16 @@ + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/SqlSync.SqlBuild/AdHocQuery/QueryCollector.cs b/src/SqlSync.SqlBuild/AdHocQuery/QueryCollector.cs index 81947807..a4e11587 100644 --- a/src/SqlSync.SqlBuild/AdHocQuery/QueryCollector.cs +++ b/src/SqlSync.SqlBuild/AdHocQuery/QueryCollector.cs @@ -99,6 +99,7 @@ public bool GetQueryResults(string fileName, ReportType reportType, string query foreach (DatabaseOverride ovr in srv.Overrides) { + if (srv.ServerName.StartsWith("#")) srv.ServerName = ovr.Server; db = srv.ServerName + "." + ovr.OverrideDbTarget; QueryCollectionRunner runner = new QueryCollectionRunner(srv.ServerName, ovr.OverrideDbTarget, query, ovr.QueryRowData, reportType, resultsFilePath, scriptTimeout, connData); diff --git a/src/SqlSync.SqlBuild/DacPacHelper.cs b/src/SqlSync.SqlBuild/DacPacHelper.cs index c043f44f..3e0518dc 100644 --- a/src/SqlSync.SqlBuild/DacPacHelper.cs +++ b/src/SqlSync.SqlBuild/DacPacHelper.cs @@ -15,7 +15,7 @@ public class DacPacHelper { private static ILogger log = SqlBuildManager.Logging.ApplicationLogging.CreateLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - public static bool ExtractDacPac(string sourceDatabase, string sourceServer, AuthenticationType authType, string userName, string password, string dacPacFileName) + public static bool ExtractDacPac(string sourceDatabase, string sourceServer, AuthenticationType authType, string userName, string password, string dacPacFileName, int timeouts, string managedIdentityClientId) { try @@ -25,24 +25,32 @@ public static bool ExtractDacPac(string sourceDatabase, string sourceServer, Aut DacExtractOptions opts = new DacExtractOptions(); opts.IgnoreExtendedProperties = true; opts.IgnoreUserLoginMappings = true; - opts.LongRunningCommandTimeout = 120; + opts.LongRunningCommandTimeout = timeouts; + opts.CommandTimeout = timeouts; + opts.DatabaseLockTimeout = timeouts; ConnectionData connData = new ConnectionData(sourceServer, sourceDatabase); connData.AuthenticationType = authType; if (!string.IsNullOrWhiteSpace(userName)) connData.UserId = userName; if (!string.IsNullOrWhiteSpace(password)) connData.Password = password; + if (!string.IsNullOrWhiteSpace(managedIdentityClientId)) connData.ManagedIdentityClientId = managedIdentityClientId; //Pre-test the connection. the DacServices can hang for a long time if the connection is bad - if (!ConnectionHelper.TestDatabaseConnection(connData)) + log.LogInformation($"Testing connection to {sourceServer}/{sourceDatabase} using authentication type {authType}"); + if (!ConnectionHelper.TestDatabaseConnection(sourceDatabase, sourceServer, userName, password,authType, timeouts, managedIdentityClientId)) { - log.LogError($"Unable to create Dacpac for {sourceServer}.{sourceDatabase}. Database connection test failed."); + log.LogError($"Unable to create Dacpac for {sourceServer}/{sourceDatabase}. Database connection test failed."); return false; } + else + { + log.LogInformation($"Connection to {sourceServer}/{sourceDatabase} with authentication type {authType} was successful"); + } var connString = ConnectionHelper.GetConnectionString(connData); Version ver = Assembly.GetExecutingAssembly().GetName().Version; DacServices service = new DacServices(connString); service.Extract(dacPacFileName, sourceDatabase, "Sql Build Manager", ver, "Sql Build Manager",null, opts); - log.LogInformation($"dacpac from {sourceServer}.{sourceDatabase} saved to {dacPacFileName}"); + log.LogInformation($"DACPAC from {sourceServer}.{sourceDatabase} saved to {dacPacFileName}"); return true; } catch (Exception exe) @@ -277,10 +285,10 @@ internal static DacpacDeltasStatus CleanDacPacScript(string dacPacGeneratedScrip } - public static DacpacDeltasStatus UpdateBuildRunDataForDacPacSync(ref SqlBuildRunData runData, string targetServerName, string targetDatabase, AuthenticationType authType, string userName, string password, string workingDirectory, string buildRevision, int defaultScriptTimeout, bool allowObjectDelete) + public static DacpacDeltasStatus UpdateBuildRunDataForDacPacSync(ref SqlBuildRunData runData, string targetServerName, string targetDatabase, AuthenticationType authType, string userName, string password, string workingDirectory, string buildRevision, int defaultScriptTimeout, bool allowObjectDelete, string managedIdentityClientId) { string tmpDacPacName = Path.Combine(workingDirectory, targetDatabase + ".dacpac"); - if (!ExtractDacPac(targetDatabase, targetServerName, authType, userName, password, tmpDacPacName)) + if (!ExtractDacPac(targetDatabase, targetServerName, authType, userName, password, tmpDacPacName, runData.DefaultScriptTimeout, managedIdentityClientId)) { return DacpacDeltasStatus.ExtractionFailure; } @@ -318,7 +326,7 @@ public static DacpacDeltasStatus UpdateBuildRunDataForDacPacSync(ref SqlBuildRun return DacpacDeltasStatus.Success; } - public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string platinumDacPac, string targetDacpac, string database, string server, AuthenticationType authType, string username, string password, string buildRevision, int defaultScriptTimeout, MultiDbData multiDb, out string sbmName, bool batchScripts, bool allowObjectDelete) + public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string platinumDacPac, string targetDacpac, string database, string server, AuthenticationType authType, string username, string password, string buildRevision, int defaultScriptTimeout, MultiDbData multiDb, out string sbmName, bool batchScripts, bool allowObjectDelete, string managedIdentityClientId) { string workingFolder = (!string.IsNullOrEmpty(rootLoggingPath) ? rootLoggingPath : Path.GetTempPath()); @@ -339,7 +347,7 @@ public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string else if (!string.IsNullOrEmpty(database) && !string.IsNullOrEmpty(server)) { string targetDacPac = Path.Combine(workingFolder, database + ".dacpac"); - if (!DacPacHelper.ExtractDacPac(database, server, authType, username, password, targetDacPac)) + if (!DacPacHelper.ExtractDacPac(database, server, authType, username, password, targetDacPac, defaultScriptTimeout, managedIdentityClientId)) { log.LogError($"Error extracting dacpac from {database} : {server}"); return DacpacDeltasStatus.ExtractionFailure; @@ -357,7 +365,7 @@ public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string database = serv.Overrides.ElementAt(i).OverrideDbTarget; string targetDacPac = Path.Combine(workingFolder, database + ".dacpac"); - if (!DacPacHelper.ExtractDacPac(database, server, authType, username, password, targetDacPac)) + if (!DacPacHelper.ExtractDacPac(database, server, authType, username, password, targetDacPac, defaultScriptTimeout, managedIdentityClientId)) { log.LogError($"Error extracting dacpac from {server} : {database}"); return DacpacDeltasStatus.ExtractionFailure; @@ -405,9 +413,9 @@ public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string } return stat; } - public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string platinumDacPac, string database, AuthenticationType authType, string server, string username, string password, string buildRevision, int defaultScriptTimeout, MultiDbData multiDb, out string sbmName, bool batchScripts, bool allowObjectDelete) + public static DacpacDeltasStatus GetSbmFromDacPac(string rootLoggingPath, string platinumDacPac, string database, AuthenticationType authType, string server, string username, string password, string buildRevision, int defaultScriptTimeout, MultiDbData multiDb, out string sbmName, bool batchScripts, bool allowObjectDelete, string managedIdentityClientId) { - return GetSbmFromDacPac(rootLoggingPath, platinumDacPac, string.Empty, database, server, authType, username, password, buildRevision, defaultScriptTimeout, multiDb, out sbmName, batchScripts, allowObjectDelete); + return GetSbmFromDacPac(rootLoggingPath, platinumDacPac, string.Empty, database, server, authType, username, password, buildRevision, defaultScriptTimeout, multiDb, out sbmName, batchScripts, allowObjectDelete, managedIdentityClientId); } diff --git a/src/SqlSync.SqlBuild/MultiDb/MultiDbData.cs b/src/SqlSync.SqlBuild/MultiDb/MultiDbData.cs index 5fb27f82..41684bf3 100644 --- a/src/SqlSync.SqlBuild/MultiDb/MultiDbData.cs +++ b/src/SqlSync.SqlBuild/MultiDb/MultiDbData.cs @@ -59,6 +59,7 @@ public bool Equals(ServerData other) [Serializable] public class DbOverrides : List { + public DbOverrides() { } public DbOverrides(params DatabaseOverride[] ovr) { diff --git a/src/SqlSync.SqlBuild/MultiDb/MultiDbHelper.cs b/src/SqlSync.SqlBuild/MultiDb/MultiDbHelper.cs index 0339326d..aed2342d 100644 --- a/src/SqlSync.SqlBuild/MultiDb/MultiDbHelper.cs +++ b/src/SqlSync.SqlBuild/MultiDb/MultiDbHelper.cs @@ -70,10 +70,14 @@ public static string ConvertMultiDbDataToTextConfig(MultiDbData cfg) { foreach (var ovr in srv.Overrides) { - sbOvr.Append(ovr.DefaultDbTarget + "," + ovr.OverrideDbTarget + ";"); + sbOvr.Append($"{ovr.DefaultDbTarget},{ovr.OverrideDbTarget};"); + + if (ovr.ConcurrencyTag.Length > 0) + sbOvr.Append($"#{ovr.ConcurrencyTag}"); } + sbOvr.Length = sbOvr.Length - 1; - sb.AppendLine(srv.ServerName + ":" + sbOvr.ToString()); + sb.AppendLine($"{srv.ServerName}:{sbOvr.ToString()}"); sbOvr.Length = 0; } return sb.ToString(); @@ -106,6 +110,17 @@ public static MultiDbData ImportMultiDbTextConfig(string[] fileContents) string server = line.Split(':')[0]; string dbs = line.Split(':')[1]; + string tag = string.Empty; + + if(dbs.IndexOf("#") > -1) + { + var tmp = dbs.Split('#', StringSplitOptions.RemoveEmptyEntries); + dbs = tmp[0]; + if (tmp.Length > 1) //just in case there is a # with no actual tag value. + { + tag = tmp[1]; + } + } var sData = new ServerData(); sData.ServerName = server.Trim(); @@ -121,9 +136,9 @@ public static MultiDbData ImportMultiDbTextConfig(string[] fileContents) string[] over = arrDb[j].Split(','); DatabaseOverride ovr; if (over.Length > 1) - ovr = new DatabaseOverride(over[0].Trim().Replace("'", ""), over[1].Trim()); + ovr = new DatabaseOverride(server, over[0].Trim().Replace("'", ""), over[1].Trim(), tag); else - ovr = new DatabaseOverride("", over[0].Trim()); + ovr = new DatabaseOverride(server, "", over[0].Trim(), tag); tmpDb.Add(ovr); } @@ -182,13 +197,20 @@ public static MultiDbData CreateMultiDbConfigFromQuery(ConnectionData connData, DatabaseOverride ovr; if (tbl.Columns.Count == 2) { - ovr = new DatabaseOverride("client", row[1].ToString().Trim()); + ovr = new DatabaseOverride(ser.ServerName, "client", row[1].ToString().Trim()); + } + else if(tbl.Columns.Count == 3) + { + ovr = new DatabaseOverride(ser.ServerName , row[1].ToString().Trim(), row[2].ToString().Trim()); + ovr.AppendedQueryRowData(row.ItemArray, 3, tbl.Columns); } else { - ovr = new DatabaseOverride(row[1].ToString().Trim(), row[2].ToString().Trim()); + //add Tag if retrieved + ovr = new DatabaseOverride(ser.ServerName, row[1].ToString().Trim(), row[2].ToString().Trim(), row[3].ToString().Trim()); ovr.AppendedQueryRowData(row.ItemArray, 3, tbl.Columns); } + ser.Overrides.Add(ovr); counter++; multi.Add(ser); @@ -196,7 +218,8 @@ public static MultiDbData CreateMultiDbConfigFromQuery(ConnectionData connData, message = string.Empty; var dbs = multi.Sum(m => m.Overrides.Count()); - log.LogInformation($"Found {dbs} target databases across {multi.Count()} target servers"); + var servers = multi.Select(m => m.ServerName).Distinct().Count(); + log.LogInformation($"Found {dbs} target databases across {servers} target servers"); return multi; } catch (Exception exe) @@ -301,7 +324,7 @@ public static bool ValidateMultiDatabaseData(MultiDbData dbData) return true; } - + } public class MultiDbConfigurationException : Exception { diff --git a/src/SqlSync.SqlBuild/SqlBuildEnums.cs b/src/SqlSync.SqlBuild/SqlBuildEnums.cs index fdacb532..1e53140b 100644 --- a/src/SqlSync.SqlBuild/SqlBuildEnums.cs +++ b/src/SqlSync.SqlBuild/SqlBuildEnums.cs @@ -128,6 +128,8 @@ public class BuildItemStatus /// Database was updated but required the creation and use of a custom dacpac /// public const string CommittedWithCustomDacpac = "CommittedWithCustomDacpac"; + + public const string FailedWithCustomDacpac = "FailedWithCustomDacpac"; } public class BatchParsing { diff --git a/src/SqlSync.SqlBuild/SqlBuildHelper.cs b/src/SqlSync.SqlBuild/SqlBuildHelper.cs index 75fa7c40..c78913f0 100644 --- a/src/SqlSync.SqlBuild/SqlBuildHelper.cs +++ b/src/SqlSync.SqlBuild/SqlBuildHelper.cs @@ -273,15 +273,41 @@ internal SqlSyncBuildData.BuildRow ProcessBuild(SqlBuildRunData runData, Backgro log.LogWarning($"Timeout encountered. Incrementing retries to {buildRetries}"); } } - + + bool candidateForCustomDacPac = false; + switch (buildResults.FinalStatus) + { + case BuildItemStatus.Committed: + case BuildItemStatus.CommittedWithTimeoutRetries: + case BuildItemStatus.AlreadyInSync: + case BuildItemStatus.TrialRolledBack: + case BuildItemStatus.CommittedWithCustomDacpac: + case BuildItemStatus.Pending: + candidateForCustomDacPac = false; + break; + case BuildItemStatus.FailedDueToScriptTimeout: + case BuildItemStatus.FailedWithCustomDacpac: + candidateForCustomDacPac = false; + log.LogWarning($"Build was not successful. Status is {buildResults.FinalStatus} and Platinum DACPAC name is '{runData.PlatinumDacPacFileName}', and this file exists '{File.Exists(runData.PlatinumDacPacFileName)}' "); + break; + case BuildItemStatus.RolledBack: + case BuildItemStatus.PendingRollBack: + case BuildItemStatus.FailedNoTransaction: + case BuildItemStatus.RolledBackAfterRetries: + candidateForCustomDacPac = true; + break; + default: + log.LogWarning($"Unrecognized Build Item status of {buildResults.FinalStatus}"); + candidateForCustomDacPac = true; + break; + } //Do we need to try to update the target using the Platinum Dacpac? - if (buildResults.FinalStatus != BuildItemStatus.Committed && buildResults.FinalStatus != BuildItemStatus.TrialRolledBack && - !string.IsNullOrEmpty(runData.PlatinumDacPacFileName) && File.Exists(runData.PlatinumDacPacFileName) && !runData.ForceCustomDacpac) + if (candidateForCustomDacPac && !string.IsNullOrEmpty(runData.PlatinumDacPacFileName) && File.Exists(runData.PlatinumDacPacFileName) && !runData.ForceCustomDacpac) { var database = ((SqlSyncBuildData.ScriptRow)filteredScripts[0].Row).Database; string targetDatabase = GetTargetDatabase(database); log.LogWarning($"Custom dacpac required for {serverName} : {targetDatabase}. Generating file."); - var stat = DacPacHelper.UpdateBuildRunDataForDacPacSync(ref runData, serverName, targetDatabase, connData.AuthenticationType, connData.UserId, connData.Password, projectFilePath, runData.BuildRevision, runData.DefaultScriptTimeout, runData.AllowObjectDelete); + var stat = DacPacHelper.UpdateBuildRunDataForDacPacSync(ref runData, serverName, targetDatabase, connData.AuthenticationType, connData.UserId, connData.Password, projectFilePath, runData.BuildRevision, runData.DefaultScriptTimeout, runData.AllowObjectDelete, connData.ManagedIdentityClientId); if (stat == DacpacDeltasStatus.Success) { @@ -291,8 +317,13 @@ internal SqlSyncBuildData.BuildRow ProcessBuild(SqlBuildRunData runData, Backgro if (dacStat.FinalStatus == BuildItemStatus.Committed || dacStat.FinalStatus == BuildItemStatus.CommittedWithTimeoutRetries) { dacStat.FinalStatus = BuildItemStatus.CommittedWithCustomDacpac; + buildResults.FinalStatus = dacStat.FinalStatus; if (BuildCommittedEvent != null) BuildCommittedEvent(this, RunnerReturn.CommittedWithCustomDacpac); + }else + { + dacStat.FinalStatus = BuildItemStatus.FailedWithCustomDacpac; + buildResults.FinalStatus = dacStat.FinalStatus; } } else if (stat == DacpacDeltasStatus.InSync || stat == DacpacDeltasStatus.OnlyPostDeployment) @@ -303,18 +334,31 @@ internal SqlSyncBuildData.BuildRow ProcessBuild(SqlBuildRunData runData, Backgro } } - else if (buildResults.FinalStatus != BuildItemStatus.Committed && buildResults.FinalStatus != BuildItemStatus.Pending) - { - log.LogWarning($"Build was not successful. Status is {buildResults.FinalStatus.ToString()} and Platinum DACPAC name is '{runData.PlatinumDacPacFileName}', and this file exists '{File.Exists(runData.PlatinumDacPacFileName)}' "); - } - - //If a timeout gets here.. need to decide how to label the rollback if (buildResults.FinalStatus == BuildItemStatus.FailedDueToScriptTimeout && buildRetries > 1) //will always be at least 1.. + { buildResults.FinalStatus = BuildItemStatus.RolledBackAfterRetries; + } else if (buildResults.FinalStatus == BuildItemStatus.FailedDueToScriptTimeout) + { buildResults.FinalStatus = BuildItemStatus.RolledBack; + } + + switch (buildResults.FinalStatus) + { + case BuildItemStatus.Committed: + case BuildItemStatus.Pending: + case BuildItemStatus.CommittedWithTimeoutRetries: + case BuildItemStatus.TrialRolledBack: + case BuildItemStatus.AlreadyInSync: + case BuildItemStatus.CommittedWithCustomDacpac: + break; + default: + log.LogWarning($"Build was not successful. Status is {buildResults.FinalStatus} and Platinum DACPAC name is '{runData.PlatinumDacPacFileName}', and this file exists '{File.Exists(runData.PlatinumDacPacFileName)}' "); + break; + + } return buildResults; } diff --git a/src/SqlSync/SQLSync.csproj b/src/SqlSync/SQLSync.csproj index a6f57d86..fa6db4c2 100644 --- a/src/SqlSync/SQLSync.csproj +++ b/src/SqlSync/SQLSync.csproj @@ -350,7 +350,7 @@ - + diff --git a/src/SqlSync/SqlBuild/MultiDb/MultiDbPage.cs b/src/SqlSync/SqlBuild/MultiDb/MultiDbPage.cs index 58a85bc5..8f113b98 100644 --- a/src/SqlSync/SqlBuild/MultiDb/MultiDbPage.cs +++ b/src/SqlSync/SqlBuild/MultiDb/MultiDbPage.cs @@ -181,7 +181,7 @@ internal List GetServerData() } if (!found) { - DatabaseOverride tmp = new DatabaseOverride(defaultDb.DatabaseName, defaultDb.DatabaseName); + DatabaseOverride tmp = new DatabaseOverride(srvData.ServerName,defaultDb.DatabaseName, defaultDb.DatabaseName); srvData.Overrides.Add(tmp); } diff --git a/src/SqlSync/SqlBuild/MultiDb/MultiDbRunForm.cs b/src/SqlSync/SqlBuild/MultiDb/MultiDbRunForm.cs index 4d919b38..57710b4a 100644 --- a/src/SqlSync/SqlBuild/MultiDb/MultiDbRunForm.cs +++ b/src/SqlSync/SqlBuild/MultiDb/MultiDbRunForm.cs @@ -546,7 +546,7 @@ private void AddNewServerItem(string serverName, DatabaseList dbList) lstSrv.Add(new ServerData() { ServerName = serverName, - Overrides = new DbOverrides() { new DatabaseOverride(defaultDatabases[0], db.DatabaseName) } + Overrides = new DbOverrides() { new DatabaseOverride(serverName, defaultDatabases[0], db.DatabaseName) } }); } ServerData dat = new ServerData();