NPipeline.Connectors.SqlServer.Analyzers
0.68.0
NPipeline.Connectors.SqlServer
Additional DetailsThe Roslyn analyzers now ship with the NPipeline.Connectors.SqlServer package
dotnet add package NPipeline.Connectors.SqlServer.Analyzers --version 0.68.0
NuGet\Install-Package NPipeline.Connectors.SqlServer.Analyzers -Version 0.68.0
<PackageReference Include="NPipeline.Connectors.SqlServer.Analyzers" Version="0.68.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="NPipeline.Connectors.SqlServer.Analyzers" Version="0.68.0" />
<PackageReference Include="NPipeline.Connectors.SqlServer.Analyzers"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add NPipeline.Connectors.SqlServer.Analyzers --version 0.68.0
#r "nuget: NPipeline.Connectors.SqlServer.Analyzers, 0.68.0"
#:package NPipeline.Connectors.SqlServer.Analyzers@0.68.0
#addin nuget:?package=NPipeline.Connectors.SqlServer.Analyzers&version=0.68.0
#tool nuget:?package=NPipeline.Connectors.SqlServer.Analyzers&version=0.68.0
NPipeline SQL Server Connector Analyzers
SQL Server connector-specific analyzers for NPipeline.
Installation
This analyzer is distributed as a separate NuGet package to provide connector-specific diagnostics only to users who use the SQL Server connector.
dotnet add package NPipeline.Connectors.SqlServer.Analyzers
Analyzers
NP9502: SQL Server source with checkpointing requires ORDER BY clause
Category: Reliability Default Severity: Warning
When using checkpointing with SQL Server source nodes, the SQL query must include an ORDER BY clause on a unique, monotonically increasing column. This
ensures consistent row ordering across checkpoint restarts. Without proper ordering, checkpointing may skip rows or process duplicates.
Example
// ⚠️ NP9502: checkpointing without ORDER BY
var source = SqlServerConnector.Source<MyRecord>(connectionString, "SELECT id, name FROM my_table",
o => o with { CheckpointStrategy = CheckpointStrategy.Offset, CheckpointStorage = storage });
// ✅ A stable order on a unique key
var ordered = SqlServerConnector.Source<MyRecord>(connectionString, "SELECT id, name FROM my_table ORDER BY id",
o => o with { CheckpointStrategy = CheckpointStrategy.Offset, CheckpointStorage = storage });
Both CheckpointStrategy.Offset and InMemory resume by skipping the rows already read, so both are checked. The
analyzer recognises SqlServerConnector.Source(...), the dependency-injection factory's CreateSourceNode(...), and options built
with an object initializer.
Why This Matters
Checkpointing tracks the position of processed rows to enable recovery from failures. Without a consistent ORDER BY clause:
- Data Loss: Rows may be skipped during recovery
- Data Duplication: Rows may be processed multiple times
- Inconsistent State: Checkpoint positions become unreliable
Recommended Ordering Columns
Use a unique, monotonically increasing column such as:
id(primary key)created_at(timestamp)updated_at(timestamp)timestamp(timestamp column)- Any auto-incrementing or sequential column
Configuration
This analyzer is automatically enabled when the package is referenced. No additional configuration is required.
Scope
This analyzer only applies to:
SqlServerSourceNode<T>instantiations- Queries with checkpointing enabled (any strategy except
CheckpointStrategy.None) - String literal queries (not interpolated strings or dynamic queries)
Related Documentation
License
This package is licensed under the Business Source License 1.1.
Free for non-production use. Production use is free for organizations with 4 or fewer developers and annual revenue of $5M AUD or less. Larger organizations require a commercial license. This license automatically converts to MIT two years after each release.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 0.68.0 | 135 | 10/1/2026 | |
| 0.67.0 | 89 | 9/29/2026 | |
| 0.66.1 | 99 | 9/28/2026 | |
| 0.66.0 | 98 | 9/28/2026 | |
| 0.65.1 | 99 | 9/27/2026 | |
| 0.65.0 | 100 | 9/26/2026 | |
| 0.64.0 | 101 | 9/26/2026 | |
| 0.63.0 | 104 | 9/24/2026 | |
| 0.62.0 | 95 | 9/24/2026 | |
| 0.61.1 | 107 | 9/22/2026 | |
| 0.61.0 | 101 | 9/22/2026 | |
| 0.60.0 | 104 | 9/22/2026 | |
| 0.59.0 | 106 | 9/21/2026 | |
| 0.58.0 | 108 | 9/21/2026 | |
| 0.57.0 | 117 | 9/21/2026 | |
| 0.56.0 | 103 | 9/21/2026 | |
| 0.55.0 | 107 | 9/21/2026 | |
| 0.54.1 | 110 | 9/21/2026 | |
| 0.54.0 | 113 | 9/19/2026 |