diff --git a/Darling/Darling.Tests/packages.lock.json b/Darling/Darling.Tests/packages.lock.json
index 44b120483f..51b3bf3d86 100644
--- a/Darling/Darling.Tests/packages.lock.json
+++ b/Darling/Darling.Tests/packages.lock.json
@@ -752,7 +752,10 @@
}
},
"performancemonitor.analysis": {
- "type": "Project"
+ "type": "Project",
+ "dependencies": {
+ "PerformanceMonitor.Common": "[3.10.0, )"
+ }
},
"performancemonitor.collectors": {
"type": "Project",
diff --git a/Darling/PerformanceMonitor.Darling.Viewer/packages.lock.json b/Darling/PerformanceMonitor.Darling.Viewer/packages.lock.json
index f724fedf34..fe12807f58 100644
--- a/Darling/PerformanceMonitor.Darling.Viewer/packages.lock.json
+++ b/Darling/PerformanceMonitor.Darling.Viewer/packages.lock.json
@@ -464,17 +464,20 @@
"performancemonitor.alerting": {
"type": "Project",
"dependencies": {
- "PerformanceMonitor.Common": "[3.9.0, )",
- "PerformanceMonitor.Notifications": "[3.9.0, )"
+ "PerformanceMonitor.Common": "[3.10.0, )",
+ "PerformanceMonitor.Notifications": "[3.10.0, )"
}
},
"performancemonitor.analysis": {
- "type": "Project"
+ "type": "Project",
+ "dependencies": {
+ "PerformanceMonitor.Common": "[3.10.0, )"
+ }
},
"performancemonitor.collectors": {
"type": "Project",
"dependencies": {
- "PerformanceMonitor.Common": "[3.9.0, )"
+ "PerformanceMonitor.Common": "[3.10.0, )"
}
},
"performancemonitor.common": {
@@ -491,45 +494,43 @@
"Microsoft.Data.SqlClient": "[7.1.1, )",
"Microsoft.Data.SqlClient.Extensions.Azure": "[7.1.1, )",
"ModelContextProtocol": "[2.2.0, )",
- "PerformanceMonitor.Analysis": "[3.9.0, )",
- "PerformanceMonitor.Collectors": "[3.9.0, )",
- "PerformanceMonitor.Common": "[3.9.0, )",
- "PerformanceMonitor.Darling.Storage": "[3.9.0, )",
- "PerformanceMonitor.Notifications": "[3.9.0, )",
- "PerformanceMonitor.PlanAnalysis": "[3.9.0, )",
- "System.Security.Cryptography.ProtectedData": "[10.0.11, )"
+ "PerformanceMonitor.Analysis": "[3.10.0, )",
+ "PerformanceMonitor.Collectors": "[3.10.0, )",
+ "PerformanceMonitor.Common": "[3.10.0, )",
+ "PerformanceMonitor.Darling.Storage": "[3.10.0, )",
+ "PerformanceMonitor.Notifications": "[3.10.0, )",
+ "PerformanceMonitor.PlanAnalysis": "[3.10.0, )"
}
},
"performancemonitor.darling.storage": {
"type": "Project",
"dependencies": {
"Npgsql": "[10.0.3, )",
- "PerformanceMonitor.Analysis": "[3.9.0, )",
- "PerformanceMonitor.Collectors": "[3.9.0, )",
- "PerformanceMonitor.Common": "[3.9.0, )",
- "PerformanceMonitor.PlanAnalysis": "[3.9.0, )"
+ "PerformanceMonitor.Analysis": "[3.10.0, )",
+ "PerformanceMonitor.Collectors": "[3.10.0, )",
+ "PerformanceMonitor.Common": "[3.10.0, )",
+ "PerformanceMonitor.PlanAnalysis": "[3.10.0, )"
}
},
"performancemonitor.notifications": {
"type": "Project",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "[10.0.12, )",
- "PerformanceMonitor.Analysis": "[3.9.0, )"
+ "PerformanceMonitor.Analysis": "[3.10.0, )"
}
},
"performancemonitor.plananalysis": {
"type": "Project",
"dependencies": {
"Microsoft.Data.SqlClient": "[7.1.1, )",
- "PerformanceMonitor.Common": "[3.9.0, )",
- "System.Security.Cryptography.ProtectedData": "[10.0.11, )"
+ "PerformanceMonitor.Common": "[3.10.0, )"
}
},
"performancemonitor.ui": {
"type": "Project",
"dependencies": {
- "PerformanceMonitor.Common": "[3.9.0, )",
- "PerformanceMonitor.PlanAnalysis": "[3.9.0, )",
+ "PerformanceMonitor.Common": "[3.10.0, )",
+ "PerformanceMonitor.PlanAnalysis": "[3.10.0, )",
"ScottPlot.WPF": "[5.1.59, )"
}
},
@@ -599,12 +600,6 @@
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0"
}
- },
- "System.Security.Cryptography.ProtectedData": {
- "type": "CentralTransitive",
- "requested": "[10.0.12, )",
- "resolved": "10.0.11",
- "contentHash": "PNoxCTPb+Tlux+GJyq4c89ddYdpioVSqfGx8pqOF6shCSKwUNNctXhQtRkCICjbJmGrJJsW8NY52kVYO/b8mlQ=="
}
}
}
diff --git a/Lite.Tests/QueryHashIdentityParityTests.cs b/Lite.Tests/QueryHashIdentityTests.cs
similarity index 62%
rename from Lite.Tests/QueryHashIdentityParityTests.cs
rename to Lite.Tests/QueryHashIdentityTests.cs
index bf183d219f..ed61b71b8c 100644
--- a/Lite.Tests/QueryHashIdentityParityTests.cs
+++ b/Lite.Tests/QueryHashIdentityTests.cs
@@ -17,80 +17,118 @@
namespace PerformanceMonitorLite.Tests;
///
-/// #5711: an all-zero query_hash is "the engine did not say", never a query, and the two grouping sites over
+/// #5711 / #5758: an all-zero query_hash is "the engine did not say", never a query, and the two grouping sites over
/// query_snapshots.query_hash (the same-statement pileup detector and the long-running-query alert's incident
/// key) must not pool unrelated requests under it.
///
-/// The parity half. PerformanceMonitor.Analysis cannot reference PerformanceMonitor.Common
-/// (a ProjectReference changes the committed lock files of the deprecated Dashboard projects too), so the detector
-/// carries a copy of 's hash test and statement fingerprint. Two copies of one
-/// definition fail only after BOTH drift (#3684) unless they are run over one corpus, which is what
-/// does.
+/// The rule has one definition, in PerformanceMonitor.Common; the detector's
+/// calls it (#5758). These tests pin that definition's
+/// cases (the corpus below, with each expected identity written out) and the detector's row path over the same corpus.
///
-public class QueryHashIdentityParityTests
+public class QueryHashIdentityTests
{
private const string Zero = "0x0000000000000000";
private const string RealHash = "0x8A2F19C4BE77D301";
private const string Marker = "-- statement text withheld (#4348)";
- /// Hashes: NULL, empty, blanks, the zero spellings, a real hash in two cases, padded.
+ ///
+ /// Hashes: NULL, empty, blanks, the zero spellings, a real hash in two cases, padded. Each with whether it is unknown
+ /// and, when known, its identity (trimmed, lower-cased).
+ ///
public static IEnumerable