Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
<NoWarn>$(NoWarn);CS8629;CA1416;CS0649</NoWarn>
</PropertyGroup>

<!-- The 2.1.0 line (master) uses net11.0 + C# 15 preview across the whole suite.
<!-- The 2.1.x line (master) uses net11.0 + C# 15 preview across the whole suite.
(The net10.0 / C# 14 line is the v2.0 stable packages, now parked on release/v2.0.) -->
<PropertyGroup>
<LangVersion>preview</LangVersion>
Expand Down
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<SharpCoreDBVersion>2.1.0</SharpCoreDBVersion>
<SharpCoreDBVersion>2.1.1</SharpCoreDBVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="SharpCoreDB" Version="$(SharpCoreDBVersion)" />
Expand Down
12 changes: 6 additions & 6 deletions NuGet.README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

## 🚀 Overview

**SharpCoreDB.Graph.Advanced** (v2.1.0) extends SharpCoreDB with advanced graph analytics capabilities:
**SharpCoreDB.Graph.Advanced** (v2.1.1) extends SharpCoreDB with advanced graph analytics capabilities:

- ✅ **Community Detection**: Louvain, Label Propagation, Connected Components
- ✅ **Centrality Metrics**: Degree, Betweenness, Closeness, Eigenvector
Expand All @@ -35,21 +35,21 @@

```bash
# Install SharpCoreDB core
dotnet add package SharpCoreDB --version 2.1.0
dotnet add package SharpCoreDB --version 2.1.1

# Install graph extensions
dotnet add package SharpCoreDB.Graph --version 2.1.0
dotnet add package SharpCoreDB.Graph --version 2.1.1

# Install advanced analytics (includes GraphRAG)
dotnet add package SharpCoreDB.Graph.Advanced --version 2.1.0
dotnet add package SharpCoreDB.Graph.Advanced --version 2.1.1

# Optional: Vector search for GraphRAG
dotnet add package SharpCoreDB.VectorSearch --version 2.1.0
dotnet add package SharpCoreDB.VectorSearch --version 2.1.1
```

**Requirements:**
- .NET 11.0+
- SharpCoreDB 2.1.0+
- SharpCoreDB 2.1.1+

---

Expand Down
14 changes: 11 additions & 3 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

> **Where this bucket ends.** The `v2.1.0` tag was cut from this line's `HEAD` on 2026-10-10, so every
> entry this bucket had collected up to that tag — the net11.0 line's work since `2.0.0.3` — **shipped in
> `[2.1.0]`** below; the entries dated 2026-10-11 are the only still-unreleased ones (`git log v2.1.0..HEAD`).
> **Where this bucket ends.** `2.1.1` was cut from this line's `HEAD` on 2026-10-25, so every entry this
> bucket had collected since the `v2.1.0` tag — the list below — **shipped in `[2.1.1]`**. New entries
> start here.

## [2.1.1] - 2026-10-25

> **What this release is.** A patch release with no API changes, cut from `v2.1.0..HEAD`. The SQL vector
> surface works end to end for the first time in a published package: a bound `float[]` parameter reaches
> a `VECTOR(n)` column as a vector, and `ORDER BY vec_distance_*() LIMIT k` reaches the vector index
> instead of scanning. The entries the `[Unreleased]` bucket had collected since `v2.1.0` ship here too.

### Added

Expand Down Expand Up @@ -48,6 +55,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

- **`ORDER BY vec_distance_cosine(...) LIMIT k` never reached the vector index and `CREATE VECTOR INDEX` never built one — two independent breaks, either of which alone leaves the symptom.** (1) **The planner branch was a stub:** `SqlParser.TryExecuteVectorOptimized` returned `null` unconditionally with four unused parameters; `e220461e` had a working implementation (argument extractor included) and `997103be` replaced it, while `VectorQueryOptimizer` itself stayed intact — only the call path was gone. (2) **Nothing was ever wired to the parser:** `SqlParser.VectorQueryOptimizer` was an `internal static` property no engine code assigned and no other assembly *could* assign (the parser is `internal`), and `SharpCoreDB.VectorSearch` only registers the optimizer with the DI container — so both null-conditional consumers, the ranking branch *and* `CREATE VECTOR INDEX`, were dead, which is why the whole SQL surface looked like "the optimizer declined". `Database.GetSharedSqlParser` now resolves `IVectorQueryOptimizer` from the service provider (the pattern `IGraphRagProvider` already used) and attaches it per parser instance through `SetVectorQueryOptimizer`, the duplicate `new SqlParser(...)` in the `ExecuteCompiledQuery` fallback routes through `GetSharedSqlParser` so there is one construction point, and the restored planner projects onto the SELECT list (`SELECT *`, aliases and the distance expression substituted), accepts an `ORDER BY` that names either the alias or the function, and refuses `DESC` and a non-empty `WHERE` — an ascending top-k cannot answer those, and returning a plausible-but-wrong shape silently is what made the original bug hard to see, so those two fall back to a scan. A `float[]` argument is sent unquoted as `[1,0,0,0]`, and the argument splitter tracks bracket and brace nesting instead of parentheses only, since a query vector is not a call argument. The existing `VectorQueryOptimizer` unit tests stayed green through all of this because they exercise the optimizer directly and never through `Database`; the new `SqlVectorQueryTests` go through `AddVectorSupport()` + `Database` + SQL — the only level where the wiring is observable — and cover the index built by `CREATE VECTOR INDEX`, `ORDER BY vec_distance_cosine` with a literal and with a parameter vector, the alias form, the `SELECT *` form, `DESC` and `WHERE` falling back to a scan, and a query against an index that does not exist. VectorSearch 255/255, core 2137/2137 (16 skipped), 0 errors.
- **The ubuntu leg of `CI/CD Pipeline` was red on `master`, and the `Coverage (net11.0)` job withheld its verdict with it, because two documentation links carried the wrong case.** `docs/Vectors/VECTOR_MIGRATION_GUIDE.md` pointed its *Documentation* and *API Reference* links at `../vectors/README.md` while the directory is `docs/Vectors`: a path that resolves on Windows and macOS — the windows and macos legs were green — and 404s on a case-sensitive host, where the link guard `DocumentationMarkdownLinks_ShouldResolveToExistingFiles` (added in this line's own documentation audit, commit `bdb4e094`, which ran on Windows and macOS) failed with `Collection: ["Vectors/VECTOR_MIGRATION_GUIDE.md:793 -> ../vector…", ":794 -> ../vector…"]`, so `tools/measure-coverage.ps1` exited 2 (`FAILED SUITES: SharpCoreDB.Tests - coverage verdict withheld`) instead of evaluating the 18 % floor. Both links now read `../Vectors/README.md` — the form every other vector link in `docs/` already used — and the guard no longer depends on the host filesystem's case sensitivity: both copies of that resolution (the link sweep and `DocumentationIndex_ShouldOnlyReferenceExistingDocumentationFiles`) go through one `PathExistsWithExactCase` helper that matches every path segment ordinally, so a wrong-case link fails on Windows too instead of only in CI. Verified red→green: with only the helper in place the test failed locally with exactly the two entries above, and passes after the link fix (documentation tests 9/0; core suite **2032 / 0 failed**, VectorSearch 248/0, EF Core 116/0, linq2DB 24/0).
- **A `VECTOR(N)` column stored nothing that could be read back: the vector case was missing from eight copies of the per-type row codec, five value tokenizers, the single-file JSON reader and both parameter binders, so a `float[]` was persisted as the literal text `"System.Single[]"`.** The breakage had three independent layers, each confirmed against the source before it was touched. (1) **Row codecs:** `DataType.Vector` was absent from every per-type switch — `Table.Serialization`'s fixed-size map, `WriteTypedValueToSpan`/`ReadTypedValueFromSpan`, `GetEncodedSize`, `EncodeVariablePayload`/`DecodeVariablePayload`, and the same switch again in `FixedWidthRecordLayout`, `InsertBatchOptimized` (writer *and* size estimate), `StreamingRowEncoder`, `BulkInsertValuePipeline`, `BinaryRowDecoder`, `PageBasedDataWriter`, `ColumnarDataReader`, `StructRow` (write, `DeserializeValue<T>` and `DeserializeValueBoxed`), `Table.ParallelScan` and `Table.GetColumnSize` — so a vector fell through to `default`, where the writers store `value.ToString()`. (2) **Tokenizers:** the VALUES literal splitter (`SqlParser.DML.ParseInsertValues`), the UPDATE `SET` splitter, `Database.Batch.ParseValues`, `SingleFileDatabase.Batch.ParseValueList` and `SqlParserExtensions.ExtractValues` all split on every comma outside quotes, so the bracketed literal `[0.5, 0.25, 0.125, 0.0625]` arrived at the value parser as `[0.5` and raised `Invalid value '[0.5' for data type Vector: The input is not a valid Base-64 string`. `ParseInsertValues`' fast path and its documented reference loop now both honour a bracketed literal, and the string-based splitters share one `SqlInPredicate.SplitTopLevelComma`. (3) **Binding:** `ParameterBinder.FormatParameter` (and `CompiledQueryExecutor`) rendered a `float[]` parameter as `'System.Single[]'`, and the single-file store — which writes rows as JSON — read a vector back as a `JsonElement` (`"[0.5,0.25]"`) because `SingleFileTable.FromSerializableRow` converted by JSON kind only. Fixing the cause rather than nine symptoms, the format and the coercion now have one definition: `SharpCoreDB.DataStructures.VectorBinaryCodec` owns the `VEC\0` blob (`docs/Vectors/TECHNICAL_SPEC.md` §7 — magic, version 1, flags, 2 reserved bytes, LE dimension count, float32 payload), the length-prefixed framing the row codecs store, and the accepted representations (`float[]`, `Memory<float>`/`ReadOnlyMemory<float>`, `IEnumerable<float>`, `double[]`, `byte[]` blob or raw float32, JSON array, base64, `0x` hex); `SharpCoreDB.VectorSearch.VectorSerializer` now delegates to it, so the engine and the HNSW/FLAT index cannot disagree about the layout. A value that is not a vector is now a type error naming the accepted forms instead of being stored as text. Two further copies were fixed on the way: the fixed-width codec's string fast path wrote raw UTF-8 into a VECTOR slot where the reader expects the blob (`types[i] is not (DataType.Blob or DataType.Vector)` now, mirroring the Blob exclusion), and `SharpCoreDB.Client`'s `GetFieldType` advertised `double[]` for a VECTOR column while every other surface produces `float[]`. Round trips are pinned by `VectorColumnStorageTests` (9), `VectorColumnRegressionTests` (11 — literal insert, binary `VEC\0` bytes present in the file, JSON-string/`float[]`/`ReadOnlyMemory<float>`/`double[]` parameters, base64, quoted JSON, multi-row VALUES, UPDATE with two assignments, `InsertBatch`, the `StreamingRowEncoder`→`BinaryRowDecoder` pair, NULL, the single-file reopen matrix, and the two loud-failure cases) and `VectorBinaryCodecTests` (8); the storage round trips were red before the fix (8 of the 9 cases failed, first failure `Invalid value '[0.5' for data type Vector`), the 28 are green after it, and the 248-test VectorSearch suite is unchanged by the delegation.

Expand Down
2 changes: 1 addition & 1 deletion docs/analytics/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The SharpCoreDB Analytics Engine provides high-performance data aggregation, win
### Installation

```bash
dotnet add package SharpCoreDB.Analytics --version 2.1.0
dotnet add package SharpCoreDB.Analytics --version 2.1.1
```

### Basic Aggregation
Expand Down
2 changes: 1 addition & 1 deletion docs/cqrs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Non-goals:
## 2. Installation

```bash
dotnet add package SharpCoreDB.CQRS --version 2.1.0
dotnet add package SharpCoreDB.CQRS --version 2.1.1
```

---
Expand Down
6 changes: 3 additions & 3 deletions docs/graphrag/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ For package-level mapping, see `../FEATURE_MATRIX.md`.
## Quick start

```bash
dotnet add package SharpCoreDB.Graph.Advanced --version 2.1.0
dotnet add package SharpCoreDB.Graph --version 2.1.0
dotnet add package SharpCoreDB.VectorSearch --version 2.1.0
dotnet add package SharpCoreDB.Graph.Advanced --version 2.1.1
dotnet add package SharpCoreDB.Graph --version 2.1.1
dotnet add package SharpCoreDB.VectorSearch --version 2.1.1
```

```csharp
Expand Down
2 changes: 1 addition & 1 deletion docs/manual/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
## 1.1 Install

```bash
dotnet add package SharpCoreDB --version 2.1.0
dotnet add package SharpCoreDB --version 2.1.1
```

The engine targets **.NET 11** and **C# 15**. No native dependencies, no external processes —
Expand Down
2 changes: 1 addition & 1 deletion docs/scdb/PRODUCTION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ This guide covers deploying SharpCoreDB with the **SCDB (SharpCore DataBase)** s
dotnet --version # Should show 11.0 or higher

# NuGet Package
dotnet add package SharpCoreDB --version 2.1.0
dotnet add package SharpCoreDB --version 2.1.1
```

The 2.0.x servicing line on `release/v2.0` targets .NET 10 instead; match the runtime to the package
Expand Down
2 changes: 1 addition & 1 deletion src/SharpCoreDB.Analytics/NuGet.README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Unlock enterprise-grade analytics with 100+ aggregate functions, window function
## 📦 Installation

```bash
dotnet add package SharpCoreDB.Analytics --version 2.1.0
dotnet add package SharpCoreDB.Analytics --version 2.1.1
```

**Requires:** SharpCoreDB v1.9.5+
Expand Down
4 changes: 2 additions & 2 deletions src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<TargetFramework>net11.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>2.1.0</Version>
<Version>2.1.1</Version>

<!-- NuGet Package Properties -->
<PackageId>SharpCoreDB.Analytics</PackageId>
Expand All @@ -13,7 +13,7 @@
<Product>SharpCoreDB.Analytics</Product>
<Description>Analytics extensions for SharpCoreDB: aggregates, window functions, SIMD-accelerated analytics, and time-series helpers for .NET 11.</Description>
<Copyright>Copyright (c) 2026 MPCoreDeveloper</Copyright>
<PackageReleaseNotes>v2.1.0 (2026-10-10): net11.0-only (C# 15 preview) release line - 2,897 tests green across 16 suites; the fixed-width inline capacity ships at 16 by default on both storage paths (batched multi-row INSERT measured +12 to +19 percent); the overflow arena writes a row's payloads in one append instead of one file open per value; and in-place UPDATE/DELETE with deferred index maintenance put the fixed-width fair-PK layout ahead of SQLite on UPDATE (0.8x) and DELETE (0.5x). Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/CHANGELOG.md</PackageReleaseNotes>
<PackageReleaseNotes>v2.1.1 (2026-10-25): patch release with no API changes. A float[] parameter now reaches a VECTOR(n) column as a vector instead of the literal text "System.Single[]", and ORDER BY vec_distance_*() LIMIT k now reaches the vector index instead of a full scan. Previous: v2.1.0 (2026-10-10): net11.0-only (C# 15 preview) release line - 2,897 tests green across 16 suites; the fixed-width inline capacity ships at 16 by default on both storage paths (batched multi-row INSERT measured +12 to +19 percent); the overflow arena writes a row's payloads in one append instead of one file open per value; and in-place UPDATE/DELETE with deferred index maintenance put the fixed-width fair-PK layout ahead of SQLite on UPDATE (0.8x) and DELETE (0.5x). Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/CHANGELOG.md</PackageReleaseNotes>
<PackageTags>analytics;aggregates;window-functions;statistics;timeseries;database;sharpcoredb;net11;csharp15</PackageTags>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/MPCoreDeveloper/SharpCoreDB</PackageProjectUrl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<!-- Assembly info -->
<AssemblyName>SharpCoreDB.Aspire.Hosting</AssemblyName>
<Version>2.1.0</Version>
<Version>2.1.1</Version>
<Description>.NET Aspire hosting integration for the SharpCoreDB network server</Description>

<!-- NuGet Package Properties -->
Expand All @@ -33,7 +33,7 @@
<PackageIcon>SharpCoreDB.jpg</PackageIcon>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<PackageReleaseNotes>v2.1.0 (2026-10-10): .NET Aspire hosting package for SharpCoreDB.Server - container image ghcr.io/mpcoredeveloper/sharpcoredb-server with HTTPS gRPC (5001) and HTTPS REST API (8443) endpoints. Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/server/ASPIRE_INTEGRATION.md</PackageReleaseNotes>
<PackageReleaseNotes>v2.1.1 (2026-10-25): patch release with no API changes. A float[] parameter now reaches a VECTOR(n) column as a vector instead of the literal text "System.Single[]", and ORDER BY vec_distance_*() LIMIT k now reaches the vector index instead of a full scan. Previous: v2.1.0 (2026-10-10): .NET Aspire hosting package for SharpCoreDB.Server - container image ghcr.io/mpcoredeveloper/sharpcoredb-server with HTTPS gRPC (5001) and HTTPS REST API (8443) endpoints. Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/server/ASPIRE_INTEGRATION.md</PackageReleaseNotes>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/SharpCoreDB.CQRS/NuGet.README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ CQRS and outbox primitives for `SharpCoreDB`.
## Installation

```bash
dotnet add package SharpCoreDB.CQRS --version 2.1.0
dotnet add package SharpCoreDB.CQRS --version 2.1.1
```

## Documentation
Expand Down
4 changes: 2 additions & 2 deletions src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<NoWarn>$(NoWarn);1591;SA1101;SA1633;SA1309</NoWarn>

<PackageId>SharpCoreDB.CQRS</PackageId>
<Version>2.1.0</Version>
<Version>2.1.1</Version>
<Authors>MPCoreDeveloper</Authors>
<Company>SharpCoreDB</Company>
<Product>SharpCoreDB.CQRS</Product>
Expand All @@ -24,7 +24,7 @@
<RepositoryType>git</RepositoryType>
<PackageIcon>SharpCoreDB.jpg</PackageIcon>
<PackageReadmeFile>NuGet.README.md</PackageReadmeFile>
<PackageReleaseNotes>v2.1.0 (2026-10-10): net11.0-only (C# 15 preview) release line - 2,897 tests green across 16 suites; the fixed-width inline capacity ships at 16 by default on both storage paths (batched multi-row INSERT measured +12 to +19 percent); the overflow arena writes a row's payloads in one append instead of one file open per value; and in-place UPDATE/DELETE with deferred index maintenance put the fixed-width fair-PK layout ahead of SQLite on UPDATE (0.8x) and DELETE (0.5x). Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/CHANGELOG.md</PackageReleaseNotes>
<PackageReleaseNotes>v2.1.1 (2026-10-25): patch release with no API changes. A float[] parameter now reaches a VECTOR(n) column as a vector instead of the literal text "System.Single[]", and ORDER BY vec_distance_*() LIMIT k now reaches the vector index instead of a full scan. Previous: v2.1.0 (2026-10-10): net11.0-only (C# 15 preview) release line - 2,897 tests green across 16 suites; the fixed-width inline capacity ships at 16 by default on both storage paths (batched multi-row INSERT measured +12 to +19 percent); the overflow arena writes a row's payloads in one append instead of one file open per value; and in-place UPDATE/DELETE with deferred index maintenance put the fixed-width fair-PK layout ahead of SQLite on UPDATE (0.8x) and DELETE (0.5x). Full details: https://github.com/MPCoreDeveloper/SharpCoreDB/blob/master/docs/CHANGELOG.md</PackageReleaseNotes>
</PropertyGroup>

<ItemGroup>
Expand Down
Loading
Loading