Skip to content

Commit 67da8f1

Browse files
committed
Cleanup based on review
1 parent f9a7dab commit 67da8f1

File tree

10 files changed

+89
-54
lines changed

10 files changed

+89
-54
lines changed

KustoSchemaTools.Tests/Parser/YamlDatabaseHandlerTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public async Task GetDatabase()
2121
.WithPlugin(new TablePlugin())
2222
.WithPlugin(new FunctionPlugin())
2323
.WithPlugin(new DatabaseCleanup());
24-
var loader = factory.Create(Path.Combine(BasePath, Deployment), Database);
24+
var loader = factory.Create(Path.Join(BasePath, Deployment), Database);
2525

2626
var db = await loader.LoadAsync();
2727

@@ -51,7 +51,7 @@ public async Task VerifyFunctionPreformatted()
5151
.WithPlugin(new TablePlugin())
5252
.WithPlugin(new FunctionPlugin());
5353
// DatabaseCleanup intentionally omitted
54-
var loaderWithoutCleanup = factoryWithoutCleanup.Create(Path.Combine(BasePath, Deployment), Database);
54+
var loaderWithoutCleanup = factoryWithoutCleanup.Create(Path.Join(BasePath, Deployment), Database);
5555
var dbWithoutCleanup = await loaderWithoutCleanup.LoadAsync();
5656

5757
// with the DatabaseCleanup plugin
@@ -60,7 +60,7 @@ public async Task VerifyFunctionPreformatted()
6060
.WithPlugin(new FunctionPlugin())
6161
.WithPlugin(new MaterializedViewsPlugin())
6262
.WithPlugin(new DatabaseCleanup());
63-
var loaderWithCleanup = factoryWithCleanup.Create(Path.Combine(BasePath, Deployment), Database);
63+
var loaderWithCleanup = factoryWithCleanup.Create(Path.Join(BasePath, Deployment), Database);
6464
var dbWithCleanup = await loaderWithCleanup.LoadAsync();
6565

6666
// Assert
@@ -113,15 +113,15 @@ public async Task VerifyMaterializedView()
113113
.WithPlugin(new TablePlugin())
114114
.WithPlugin(new MaterializedViewsPlugin());
115115
// DatabaseCleanup intentionally omitted
116-
var loaderWithoutCleanup = factoryWithoutCleanup.Create(Path.Combine(BasePath, Deployment), Database);
116+
var loaderWithoutCleanup = factoryWithoutCleanup.Create(Path.Join(BasePath, Deployment), Database);
117117
var dbWithoutCleanup = await loaderWithoutCleanup.LoadAsync();
118118

119119
// with the DatabaseCleanup plugin
120120
var factoryWithCleanup = new YamlDatabaseHandlerFactory<Model.Database>()
121121
.WithPlugin(new TablePlugin())
122122
.WithPlugin(new MaterializedViewsPlugin())
123123
.WithPlugin(new DatabaseCleanup());
124-
var loaderWithCleanup = factoryWithCleanup.Create(Path.Combine(BasePath, Deployment), Database);
124+
var loaderWithCleanup = factoryWithCleanup.Create(Path.Join(BasePath, Deployment), Database);
125125
var dbWithCleanup = await loaderWithCleanup.LoadAsync();
126126

127127
// Assert
@@ -158,7 +158,7 @@ public async Task VerifyFunctionWithCommentAtEnd()
158158
.WithPlugin(new TablePlugin())
159159
.WithPlugin(new FunctionPlugin())
160160
.WithPlugin(new DatabaseCleanup());
161-
var loader = factory.Create(Path.Combine(BasePath, Deployment), Database);
161+
var loader = factory.Create(Path.Join(BasePath, Deployment), Database);
162162

163163
// Act - Load the database
164164
var db = await loader.LoadAsync();

KustoSchemaTools/Changes/ClusterChanges.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ public static ClusterChangeSet GenerateChanges(Cluster oldCluster, Cluster newCl
4444
var code = KustoCode.Parse(script.Script.Text);
4545
var diagnostics = code.GetDiagnostics();
4646
script.IsValid = !diagnostics.Any();
47+
script.Diagnostics = diagnostics.Any()
48+
? diagnostics.Select(diagnostic => new ScriptDiagnostic
49+
{
50+
Start = diagnostic.Start,
51+
End = diagnostic.End,
52+
Description = diagnostic.Description
53+
}).ToList()
54+
: null;
4755
}
4856

4957
changeSet.Markdown = GenerateClusterMarkdown(changeSet);

KustoSchemaTools/Changes/DatabaseChanges.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,15 @@ .. GenerateFollowerCachingChanges(oldState, newState, db => db.MaterializedViews
263263
{
264264
var code = KustoCode.Parse(script.Script.Text);
265265
var diagnostics = code.GetDiagnostics();
266-
script.IsValid = diagnostics.Any() == false;
266+
script.IsValid = !diagnostics.Any();
267+
script.Diagnostics = diagnostics.Any()
268+
? diagnostics.Select(diagnostic => new ScriptDiagnostic
269+
{
270+
Start = diagnostic.Start,
271+
End = diagnostic.End,
272+
Description = diagnostic.Description
273+
}).ToList()
274+
: null;
267275
}
268276

269277
return result;

KustoSchemaTools/Changes/DeletionChange.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using KustoSchemaTools.Parser;
1+
using KustoSchemaTools.Model;
2+
using KustoSchemaTools.Parser;
23
using System.Text;
4+
using System.Linq;
35
using Kusto.Language;
46

57

@@ -24,7 +26,15 @@ public List<DatabaseScriptContainer> Scripts
2426
var sc = new DatabaseScriptContainer("Deletion", 0, $".drop {EntityType} {Entity}");
2527
var code = KustoCode.Parse(sc.Script.Text);
2628
var diagnostics = code.GetDiagnostics();
27-
sc.IsValid = diagnostics.Any() == false;
29+
sc.IsValid = !diagnostics.Any();
30+
sc.Diagnostics = diagnostics.Any()
31+
? diagnostics.Select(diagnostic => new ScriptDiagnostic
32+
{
33+
Start = diagnostic.Start,
34+
End = diagnostic.End,
35+
Description = diagnostic.Description
36+
}).ToList()
37+
: null;
2838
return new List<DatabaseScriptContainer> { sc };
2939
}
3040
}

KustoSchemaTools/Changes/EntityGroupChange.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,23 @@ private void Init()
2828
var toEntityArr = string.Join(",", toEntityStrings);
2929
var toScript = new DatabaseScriptContainer("EntityGroup", 3, $".create-or-alter entity_group {Entity} ({toEntityArr})");
3030

31-
if (added.Any() == false && removed.Any() == false)
31+
if (!added.Any() && !removed.Any())
3232
{
3333
return;
3434
}
3535

3636
Scripts.Add(toScript);
3737
var code = KustoCode.Parse(toScript.Script.Text);
3838
var diagnostics = code.GetDiagnostics();
39-
toScript.IsValid = diagnostics.Any() == false;
39+
toScript.IsValid = !diagnostics.Any();
40+
toScript.Diagnostics = diagnostics.Any()
41+
? diagnostics.Select(diagnostic => new ScriptDiagnostic
42+
{
43+
Start = diagnostic.Start,
44+
End = diagnostic.End,
45+
Description = diagnostic.Description
46+
}).ToList()
47+
: null;
4048
var logo = toScript.IsValid.Value ? ":green_circle:" : ":red_circle:";
4149

4250

KustoSchemaTools/Changes/ScriptCompareChange.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ private void Init()
2424
var to = To.CreateScripts(Entity, From == null);
2525
Markdown = string.Empty;
2626

27-
if (to.Any() == false) return;
27+
if (!to.Any()) return;
2828

2929
StringBuilder sb = new StringBuilder($"## {Entity}");
3030
sb.AppendLine();
@@ -44,7 +44,7 @@ private void Init()
4444

4545
var zipped = reducedBefore.GetLexicalTokens().Zip(reducedAfter.GetLexicalTokens()).ToList();
4646
var diffs = zipped.Where(itm => itm.First.Text != itm.Second.Text).ToList();
47-
if(diffs.Any() == false) continue;
47+
if (!diffs.Any()) continue;
4848

4949
if (singleLinebeforeText.Equals(singleLineafterText)) continue;
5050

@@ -56,7 +56,7 @@ private void Init()
5656

5757
var diagnostics = code.GetDiagnostics();
5858
var hasDiagnostics = diagnostics.Any();
59-
change.IsValid = hasDiagnostics == false || change.Script.Order == -1;
59+
change.IsValid = !hasDiagnostics || change.Script.Order == -1;
6060
change.Diagnostics = hasDiagnostics
6161
? diagnostics.Select(diagnostic => new ScriptDiagnostic
6262
{
@@ -115,7 +115,7 @@ private void Init()
115115
sb.AppendLine($" <td colspan=\"10\"><pre lang=\"kql\">{change.Script.Text.PrettifyKql()}</pre></td>");
116116
sb.AppendLine("</tr>");
117117

118-
if (change.IsValid == false)
118+
if (change.IsValid is false)
119119
{
120120
foreach (var diagnostic in diagnostics)
121121
{

KustoSchemaTools/Changes/StructuredChangeExtensions.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ public static class StructuredChangeExtensions
1313
{
1414
public static StructuredChange ToStructuredChange(this IChange change)
1515
{
16-
if (change == null)
17-
{
18-
throw new ArgumentNullException(nameof(change));
19-
}
16+
ArgumentNullException.ThrowIfNull(change);
2017

2118
var structuredChange = new StructuredChange
2219
{
@@ -61,11 +58,7 @@ public static StructuredChange ToStructuredChange(this IChange change)
6158

6259
if (change.From != null)
6360
{
64-
var previousScripts = change.From
65-
.CreateScripts(change.Entity, false)
66-
.GroupBy(script => script.Kind)
67-
.Select(group => group.First())
68-
.ToDictionary(script => script.Kind, script => script);
61+
var previousScripts = BuildPreviousScripts(change.From, change.Entity);
6962

7063
foreach (var script in comparison.NewScripts)
7164
{
@@ -117,7 +110,7 @@ private static DatabaseScriptContainer CloneScript(DatabaseScriptContainer sourc
117110
var payload = new Dictionary<string, object?>();
118111
foreach (var script in newScripts)
119112
{
120-
var oldScript = previousScripts.ContainsKey(script.Kind) ? previousScripts[script.Kind] : null;
113+
previousScripts.TryGetValue(script.Kind, out var oldScript);
121114
var diffPreview = BuildDiffPreview(oldScript, script);
122115
if (diffPreview.Count > 0)
123116
{
@@ -169,12 +162,7 @@ private static string GetScriptText(DatabaseScriptContainer? script)
169162

170163
private static string? BuildDiffMarkdown(ScriptCompareChange change)
171164
{
172-
var previousScripts = change.From?
173-
.CreateScripts(change.Entity, false)
174-
.GroupBy(script => script.Kind)
175-
.Select(group => group.First())
176-
.ToDictionary(script => script.Kind, script => script)
177-
?? new Dictionary<string, DatabaseScriptContainer>();
165+
var previousScripts = BuildPreviousScripts(change.From, change.Entity);
178166

179167
var sb = new StringBuilder();
180168
var differ = new Differ();
@@ -221,5 +209,19 @@ private static string GetScriptText(DatabaseScriptContainer? script)
221209
var diffContent = sb.ToString().Trim();
222210
return string.IsNullOrEmpty(diffContent) ? null : diffContent;
223211
}
212+
213+
private static Dictionary<string, DatabaseScriptContainer> BuildPreviousScripts(IKustoBaseEntity? entity, string changeEntity)
214+
{
215+
if (entity == null)
216+
{
217+
return new Dictionary<string, DatabaseScriptContainer>();
218+
}
219+
220+
return entity
221+
.CreateScripts(changeEntity, false)
222+
.GroupBy(script => script.Kind)
223+
.Select(group => group.First())
224+
.ToDictionary(script => script.Kind, script => script);
225+
}
224226
}
225227
}

KustoSchemaTools/KustoSchemaHandler.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ public async Task<StructuredDiffResult> GenerateStructuredDiff(string path, stri
6666

6767
public async Task Import(string path, string databaseName, bool includeColumns)
6868
{
69-
var clustersFile = File.ReadAllText(Path.Combine(path, "clusters.yml"));
69+
var clustersFile = File.ReadAllText(Path.Join(path, "clusters.yml"));
7070
var clusters = Serialization.YamlPascalCaseDeserializer.Deserialize<Clusters>(clustersFile);
7171

7272
var dbHandler = KustoDatabaseHandlerFactory.Create(clusters.Connections[0].Url, databaseName);
7373

7474
var db = await dbHandler.LoadAsync();
75-
if (includeColumns == false)
75+
if (!includeColumns)
7676
{
7777
foreach(var table in db.Tables.Values)
7878
{
@@ -87,7 +87,7 @@ public async Task Import(string path, string databaseName, bool includeColumns)
8787

8888
public async Task<ConcurrentDictionary<string,Exception>> Apply(string path, string databaseName)
8989
{
90-
var clustersFile = File.ReadAllText(Path.Combine(path, "clusters.yml"));
90+
var clustersFile = File.ReadAllText(Path.Join(path, "clusters.yml"));
9191
var clusters = Serialization.YamlPascalCaseDeserializer.Deserialize<Clusters>(clustersFile);
9292

9393
var yamlHandler = YamlDatabaseHandlerFactory.Create(path, databaseName);
@@ -99,7 +99,7 @@ await Parallel.ForEachAsync(clusters.Connections, async (cluster, token) =>
9999
{
100100
try
101101
{
102-
Log.LogInformation($"Generating and applying script for {Path.Combine(path, databaseName)} => {cluster}/{databaseName}");
102+
Log.LogInformation($"Generating and applying script for {Path.Join(path, databaseName)} => {cluster}/{databaseName}");
103103
var dbHandler = KustoDatabaseHandlerFactory.Create(cluster.Url, databaseName);
104104
await dbHandler.WriteAsync(yamlDb);
105105
results.TryAdd(cluster.Url, null!);
@@ -115,7 +115,7 @@ await Parallel.ForEachAsync(clusters.Connections, async (cluster, token) =>
115115

116116
private async Task<DiffComputationResult> BuildDiffComputationResult(string path, string databaseName)
117117
{
118-
var clustersFile = File.ReadAllText(Path.Combine(path, "clusters.yml"));
118+
var clustersFile = File.ReadAllText(Path.Join(path, "clusters.yml"));
119119
var clusters = Serialization.YamlPascalCaseDeserializer.Deserialize<Clusters>(clustersFile);
120120

121121
var yamlHandler = YamlDatabaseHandlerFactory.Create(path, databaseName);
@@ -151,11 +151,11 @@ private async Task<DiffComputationResult> BuildDiffComputationResult(string path
151151
{
152152
if (logDetails)
153153
{
154-
Log.LogInformation($"Generating diff markdown for {Path.Combine(path, databaseName)} => {clusterDiff.Cluster.Name}/{databaseName}");
154+
Log.LogInformation($"Generating diff markdown for {Path.Join(path, databaseName)} => {clusterDiff.Cluster.Name}/{databaseName}");
155155
}
156156

157157
var changes = clusterDiff.Changes;
158-
var comments = changes.Select(change => change.Comment).Where(comment => comment != null).ToList();
158+
var comments = changes.Select(change => change.Comment).OfType<Comment>().ToList();
159159
var clusterValid = IsDiffValid(changes);
160160
isValid &= clusterValid;
161161

@@ -183,7 +183,7 @@ private async Task<DiffComputationResult> BuildDiffComputationResult(string path
183183
if (logDetails)
184184
{
185185
var scriptSb = new StringBuilder();
186-
foreach (var script in changes.SelectMany(itm => itm.Scripts).Where(itm => itm.IsValid == true).OrderBy(itm => itm.Script.Order))
186+
foreach (var script in changes.SelectMany(itm => itm.Scripts).Where(itm => itm.IsValid is true).OrderBy(itm => itm.Script.Order))
187187
{
188188
scriptSb.AppendLine(script.Script.Text);
189189
}
@@ -196,7 +196,7 @@ private async Task<DiffComputationResult> BuildDiffComputationResult(string path
196196
{
197197
if (logDetails)
198198
{
199-
Log.LogInformation($"Generating diff markdown for {Path.Combine(path, databaseName)} => {followerDiff.ConnectionKey}/{followerDiff.DatabaseName}");
199+
Log.LogInformation($"Generating diff markdown for {Path.Join(path, databaseName)} => {followerDiff.ConnectionKey}/{followerDiff.DatabaseName}");
200200
}
201201

202202
sb.AppendLine($"# Changes for follower database {followerDiff.ConnectionKey}/{followerDiff.DatabaseName}");
@@ -219,13 +219,12 @@ private StructuredDiff ConvertToStructuredDiff(string clusterName, string cluste
219219
var structuredChanges = changes.Select(change => change.ToStructuredChange()).ToList();
220220
var comments = changes
221221
.Select(change => StructuredComment.From(change.Comment))
222-
.Where(comment => comment != null)
223-
.Cast<StructuredComment>()
222+
.OfType<StructuredComment>()
224223
.ToList();
225224

226225
var validScripts = changes
227226
.SelectMany(change => change.Scripts)
228-
.Where(script => script.IsValid == true)
227+
.Where(script => script.IsValid is true)
229228
.OrderBy(script => script.Script.Order)
230229
.ToList();
231230

@@ -244,11 +243,11 @@ private StructuredDiff ConvertToStructuredDiff(string clusterName, string cluste
244243
private static bool IsDiffValid(IEnumerable<IChange> changes)
245244
{
246245
var changeList = changes?.ToList() ?? new List<IChange>();
247-
var scriptsHealthy = changeList.All(change => change.Scripts.All(script => script.IsValid != false));
246+
var scriptsHealthy = changeList.All(change => change.Scripts.All(script => script.IsValid is not false));
248247
var commentsHealthy = changeList
249248
.Select(change => change.Comment)
250-
.Where(comment => comment != null)
251-
.All(comment => comment.FailsRollout == false);
249+
.OfType<Comment>()
250+
.All(comment => comment.FailsRollout is false);
252251

253252
return scriptsHealthy && commentsHealthy;
254253
}

KustoSchemaTools/Parser/YamlDatabaseHandler.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ public YamlDatabaseHandler(string deployment, string database, List<IYamlSchemaP
2020
protected List<IYamlSchemaPlugin<T>> Plugins { get; }
2121
public virtual async Task<T> LoadAsync()
2222
{
23-
var folder = Path.Combine(Deployment, Database);
24-
var dbFileName = Path.Combine(folder, "database.yml");
23+
var folder = Path.Join(Deployment, Database);
24+
var dbFileName = Path.Join(folder, "database.yml");
2525
var dbYaml = File.ReadAllText(dbFileName);
2626
var db = Serialization.YamlPascalCaseDeserializer.Deserialize<T>(dbYaml);
2727
db.Name = Database;
2828
foreach (var plugin in Plugins)
2929
{
30-
await plugin.OnLoad(db, Path.Combine(Deployment, Database));
30+
await plugin.OnLoad(db, Path.Join(Deployment, Database));
3131
}
3232
return db;
3333
}
3434

3535
public virtual async Task WriteAsync(T database)
3636
{
3737
var clone = database.Clone();
38-
var path = Path.Combine(Deployment, Database);
38+
var path = Path.Join(Deployment, Database);
3939
if(!Directory.Exists(path))
4040
{
4141
Directory.CreateDirectory(path);
@@ -46,7 +46,7 @@ public virtual async Task WriteAsync(T database)
4646
await plugin.OnWrite(clone, path);
4747
}
4848
var yaml = Serialization.YamlPascalCaseSerializer.Serialize(clone);
49-
File.WriteAllText(Path.Combine(path, "database.yml"), yaml);
49+
File.WriteAllText(Path.Join(path, "database.yml"), yaml);
5050
}
5151
}
5252
}

0 commit comments

Comments
 (0)