--- source_files: - DataPRO/DbAPI/SPCaching/SPCache.cs generated_at: "2026-04-16T04:26:17.028428+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "d93a7e3ae4a08e22" --- # SPCaching ## 1. Purpose The `SPCache` class serves as a lightweight data container for caching the mapping between client and database versions to a specific stored procedure version. Its role is to avoid redundant version-resolution logic—once the appropriate stored procedure version has been determined for a given `(ClientVersion, DbVersion)` pair, it can be reused by storing it in an `SPCache` instance. This is intended for scenarios where version compatibility decisions are expensive or frequently repeated, and where the mapping is assumed stable after initial resolution. ## 2. Public Interface The class exposes only public auto-implemented properties; there are no methods or constructors defined. - **`int ClientVersion { get; set; }`** Stores the application or client version used as input to the version-resolution logic. - **`int DbVersion { get; set; }`** Stores the database version used as input to the version-resolution logic. - **`int StoredProcedureVersion { get; set; }`** Stores the resolved stored procedure version corresponding to the `ClientVersion` and `DbVersion`. ## 3. Invariants - The class itself enforces no invariants beyond the type of its properties (all are non-nullable `int` properties with default values of `0` if unset). - There is no validation or consistency check on the relationship between `ClientVersion`, `DbVersion`, and `StoredProcedureVersion`. For example, no rule enforces that `StoredProcedureVersion` must be ≤ `ClientVersion` or match any particular schema. - The documentation implies that once a mapping is determined, it is assumed stable ("once this has been determined we don't need to determine it again ... usually"), but this is a *usage convention*, not a runtime invariant. ## 4. Dependencies - **No external dependencies**: The file contains no `using` directives, indicating no runtime dependencies on other namespaces or libraries. - **Depended on by**: Not visible in this source file. Based on the namespace (`DbAPI.SPCaching`) and class purpose, it is likely consumed by components responsible for database interaction or stored procedure dispatch (e.g., a data access layer), but such consumers are not specified here. ## 5. Gotchas - **No equality or hashing support**: The class does not override `Equals`, `GetHashCode`, or implement `IEquatable`. Two instances with identical property values will not be considered equal by reference-based comparison unless explicitly handled by consumers. - **Mutable by design**: All properties are `public set`, so the cache entry can be modified after creation. This may lead to stale or inconsistent entries if reused carelessly. - **No version conflict detection**: If the same `(ClientVersion, DbVersion)` pair maps to multiple `StoredProcedureVersion` values over time (e.g., due to schema changes), the cache provides no mechanism to invalidate or detect such mismatches. - **Ambiguous version semantics**: The documentation does not clarify how `StoredProcedureVersion` is derived (e.g., is it the minimum, maximum, or exact match version?), nor whether negative or zero values are valid. Consumers must infer this from external logic. - **Thread-safety not addressed**: The class has no synchronization primitives; concurrent access to a shared instance is unsafe unless managed externally.