Skip to content

Commit

Permalink
fix: added transaction support and error on replacements
Browse files Browse the repository at this point in the history
  • Loading branch information
pksorensen committed Nov 9, 2023
1 parent 910225e commit 54c55f3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.CommandLine;
using System.CommandLine.NamingConventionBinder;
using System.CommandLine.Parsing;
Expand Down Expand Up @@ -171,34 +172,55 @@ private async Task Run(ParseResult arg1, IConsole arg2)
SqlAuthenticationProvider.SetProvider(SqlAuthenticationMethod.ActiveDirectoryServicePrincipal, new AccessTokenProvider(token));
}
// Use your own server, database, app ID, and secret.
string ConnectionString = $@"Server={server}; Authentication=Active Directory Service Principal;Command Timeout=300; Encrypt=True; Database={database}; User Id={clientid}; Password={clientSecret}";
string ConnectionString =
!string.IsNullOrEmpty(token + clientid + clientSecret) ?
$@"Server={server}; Authentication=Active Directory Service Principal;Command Timeout=300; Encrypt=True; Database={database}; User Id={clientid}; Password={clientSecret}" :
$@"Server={server}; Authentication=Active Directory Device Code Flow;Command Timeout=300; Encrypt=True; Database={database};Connect Timeout=180;";
//var files = new[] { @"C:\dev\MedlemsCentralen\obj\dbinit\init.sql", @"C:\dev\MedlemsCentralen\obj\dbinit\init-systemadmin.sql" };
var replacements = _replacements.ToDictionary(k => k.Substring(0, k.IndexOf('=')), v => v.Substring(v.IndexOf('=') + 1));

Dictionary<string, string> replacements = ExtractReplacemets(_replacements);

using (SqlConnection conn = new SqlConnection(ConnectionString))
{

await conn.OpenAsync();
foreach(var file in files)
foreach (var file in files)
{
var cmdText = File.ReadAllText(file);
foreach(var r in replacements)
foreach (var r in replacements)
{
cmdText = cmdText.Replace($"$({r.Key})", r.Value);
}



var stack = new Stack<SqlTransaction>();

foreach (var sql in cmdText.Split("GO"))
// await ExecuteSQL(conn, "BEGIN TRANSACTION");

foreach (var sql in cmdText.Split("GO")
.Where(s=>!string.IsNullOrEmpty(s)))
{

if(string.Equals( sql , "BEGIN TRANSACTION;", StringComparison.OrdinalIgnoreCase)){
stack.Push(conn.BeginTransaction());
continue;
}

if (string.Equals(sql, "COMMIT;", StringComparison.OrdinalIgnoreCase))
{
stack.Pop().Commit();

continue;
}

using var cmd = conn.CreateCommand();

cmd.CommandText = sql.Trim();
// await context.Context.Database.ExecuteSqlRawAsync(sql);


if (!string.IsNullOrEmpty(cmd.CommandText))
{
//Console.WriteLine("Executing: " + cmd.CommandText);
var r = await cmd.ExecuteNonQueryAsync();
Console.WriteLine("Rows changed: " + r);
}
Expand All @@ -207,11 +229,31 @@ private async Task Run(ParseResult arg1, IConsole arg2)





}


}
}

private static Dictionary<string, string> ExtractReplacemets(string[] _replacements)
{
try
{
return _replacements.ToDictionary(k => k.Substring(0, k.IndexOf('=')), v => v.Substring(v.IndexOf('=') + 1));
}catch(Exception ex)

Check warning on line 244 in src/EAVFW.Extensions.Manifest.ManifestEnricherTool/Commands/SQLApplyCommand.cs

View workflow job for this annotation

GitHub Actions / Releasing

The variable 'ex' is declared but never used
{
Console.WriteLine(string.Join("\n", _replacements));
throw;
}
}

private static async Task ExecuteSQL(SqlConnection conn, string sql)
{
using var cmd = conn.CreateCommand();

cmd.CommandText = sql;
var r = await cmd.ExecuteNonQueryAsync();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
<PackageReference Include="DotNETDevOps.JsonFunctions" Version="3.0.26" />

<PackageReference Include="LibGit2Sharp" Version="0.27.2" />

<PackageReference Include="Microsoft.Data.SqlClient" Version="5.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Semver" Version="2.2.0" />
</ItemGroup>
Expand Down

0 comments on commit 54c55f3

Please sign in to comment.