41 lines
3.5 KiB
Markdown
41 lines
3.5 KiB
Markdown
|
|
---
|
||
|
|
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<SPCache>`. 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.
|