Commit 730d055
committed
WWI-Full Phase 1 — partitioning + columnstore as silent skips,
**Loader dispatcher** (`Storage/Bacpac/ModelXmlReader.cs`):
- `SqlPartitionFunction`, `SqlPartitionScheme`, `SqlColumnStoreIndex` join `SqlFilegroup` as phase-1 silent-skip entries. All four are storage-organization decorations with no semantic effect on row-store query results — `PartitionFunction`/`PartitionScheme` define filegroup-mapping boundaries that tables/indexes reference for physical placement, and `ColumnStoreIndex` is a read-optimization shape over the same row data (the simulator's linear-scan secondary indexes don't model column-major vs row-major storage). Surfacing any of them on `Skipped` would create category noise for features whose absence has zero observable effect on query results.
- `IsHandledByAnotherPhase` accept-list extended with the three new types so the dispatcher's "last phase records to Skipped" guard doesn't double-record them on later passes.
**Collation whitelist** (`Collation.cs`):
- `Latin1_General_CI_AS` (the older 80-collation, sibling to the previously-recognized `Latin1_General_100_CI_AS`) added to `Collation.Recognized` with the standard `sys.fn_helpcollations` description. WWI-Full's `Warehouse.VehicleTemperatures` table declares two columns (`VehicleRegistration`, `FullSensorData`) with this collation — previously these surfaced as warnings with the `COLLATE` clause dropped; now they round-trip cleanly through `sys.columns.collation_name`. Same metadata-only contract as the existing entries: comparison/sort/LIKE still route through the default collation.
**Diagnostic-probe finding** (worth recording for the next bundle's design phase):
- WWI-Full and WWI-Standard carry essentially identical row data — the size difference (61MB vs 59MB compressed) is metadata, not workload. So WWI-Full is *not* the larger-workload memory/performance test we anticipated; it's a structural-coverage test. A genuine perf/memory test would need a different sample (or a synthetic one).
- After this bundle, WWI-Full's `Skipped` list contains exactly one element: `Website.RecordColdRoomTemperatures`, a natively-compiled procedure. Its body decoration shape is `WITH NATIVE_COMPILATION = ON, SCHEMABINDING, EXECUTE AS OWNER AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') <body> END`. Unblocking it needs both (i) the `WITH NATIVE_COMPILATION = ON` clause in the procedure-header parser (parse-and-discard since the simulator doesn't natively-compile anything), and (ii) the `BEGIN ATOMIC WITH (...)` block which currently raises `NotSupportedException` at dispatch.
**Tests**:
- `SqlServerSimulator.Tests.Internal/Storage/BacpacLoaderTests.cs`: new `LoadWideWorldImportersFull` helper mirroring the WWI-Standard one, plus 3 new test methods — `Load_WWIFull_Loads_All_Tables` (48 tables land), `Load_WWIFull_Known_Gaps_Recorded_In_Skipped` (asserts the partition/columnstore categories don't appear on Skipped AND that exactly 1 SqlProcedure is on Skipped — locks the current census), `Load_WWIFull_Latin1_CI_AS_Columns_Warning_Free` (no `Latin1_General_CI_AS` warnings + the collation lands on `sys.columns.collation_name`).
- `SqlServerSimulator.Tests/CollationMetadataTests.cs`: new public-API smoke test `Column_Collate_Latin1_General_CI_AS_RoundTrips`; existing `FnHelpCollations_ListsRecognized` count 2 → 3.
**Doc updates**:
- `docs/claude/bacpac-prerequisites.md`: new step 12 captures the WWI-Full Phase 1 bundle; new step 13 documents the natively-compiled-procedure body decoration as the sole remaining `Skipped` category; the WWI-discovered gap inventory in step 16 (renumbered from 14) strikes through the partition/columnstore additions.
- `CLAUDE.md`: BACPAC pointer entry extended — WWI-Full now mentioned alongside AW2025 + WWI-Standard with the partition/columnstore silent-skip note.Latin1_General_CI_AS joins the recognized-collation whitelist. WideWorldImporters-Full (Microsoft's larger sibling sample to WWI-Standard; same 48 tables + 4.7M rows but with partitioning, columnstore indexes, and one natively-compiled procedure) now loads end-to-end with a single remaining Skipped element (the natively-compiled procedure, deferred to a follow-up bundle). The .vs/WideWorldImporters-Full.bacpac file is gitignored alongside the other two reference bacpacs.1 parent febeae6 commit 730d055
6 files changed
Lines changed: 122 additions & 8 deletions
File tree
- SqlServerSimulator.Tests.Internal/Storage
- SqlServerSimulator.Tests
- SqlServerSimulator
- Storage/Bacpac
- docs/claude
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
167 | | - | |
| 167 | + | |
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
| |||
Lines changed: 87 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
51 | 61 | | |
52 | 62 | | |
53 | 63 | | |
| |||
860 | 870 | | |
861 | 871 | | |
862 | 872 | | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
863 | 950 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
127 | | - | |
| 127 | + | |
128 | 128 | | |
129 | 129 | | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
130 | 139 | | |
131 | 140 | | |
132 | 141 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
132 | | - | |
133 | | - | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
134 | 141 | | |
135 | 142 | | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
136 | 146 | | |
137 | 147 | | |
138 | 148 | | |
| |||
174 | 184 | | |
175 | 185 | | |
176 | 186 | | |
| 187 | + | |
177 | 188 | | |
178 | 189 | | |
179 | 190 | | |
| |||
0 commit comments