You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+12-10Lines changed: 12 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -67,13 +67,15 @@ Prefer public-API tests when the behavior is reachable from SQL — they exercis
67
67
68
68
## Live limitations
69
69
70
-
Live state is best read from the code itself and recent commit history. Architectural-level gaps as of the page-storage milestone:
71
-
- Transactions / locks / MVCC: not implemented. The page foundation is in place; the next phase hasn't started.
72
-
- Row-overflow / LOB pages: not modeled. Rows whose encoded size exceeds SQL Server's 8060-byte in-row limit throw at insert time; `varchar(MAX)` is parsed but rejected with a clear "not yet supported" error rather than silently fall through.
73
-
- Heap allocation: flat page list. No IAM/PFS allocation tracking.
74
-
- Cross-string-type coercion (`varchar` ↔ `nvarchar`) and other cross-category pairs (string ↔ integer in binary expressions): the binary-expression `Promote` path rejects them. String → integer-family `CAST` is implemented, with the SQL-Server-matched Msg 244 / 245 / 248 / 8115 error variants. Cross-family date/time pairs in `Promote` are wired (highest-precedence-with-max-precision wins; `time` paired with non-time raises Msg 402).
75
-
- Numeric ↔ `datetime` coercion (`cast(0 as datetime)`, `dt + 1`): not modeled. SQL Server treats integers as days-since-1900-01-01; the simulator throws `NotSupportedException` for the pair.
76
-
-`smalldatetime`: not yet modeled. The simulator's `GetByName` rejects the type name; this is the only remaining standard date/time type EF Core may emit.
77
-
-`ORDER BY`: not modeled. The trailing clause is consumed but not honored, so rows come back in insertion order. EF Core queries that rely on ordering need an in-memory `.OrderBy(...)` after materialization.
78
-
- Pattern matching (`LIKE`), `CONVERT`, fixed-length `char(N)` / `nchar(N)` / `binary(N)`, and identity columns: not modeled.
79
-
- CAST to a smaller varchar/nvarchar than the value renders: SQL Server silently truncates (e.g. `cast(dt as varchar(10))` → first 10 chars). The simulator returns the full string today; truncation isn't enforced on the CAST path.
70
+
Heavy-hitters someone might assume work but don't. Source and `git log` are the truth for what's done; this list is for what isn't.
71
+
72
+
- Transactions / locks / MVCC.
73
+
-`ORDER BY` is parsed but not honored — rows come back in insertion order. EF Core queries that rely on ordering need an in-memory `.OrderBy(...)` after materialization.
74
+
- Row-overflow / LOB pages and the `varchar(MAX)` / `nvarchar(MAX)` / `varbinary(MAX)` types they enable.
75
+
- Decimal / numeric / float / real / money types. (Also blocks fractional-day `cast(0.5 as datetime)`.)
76
+
-`uniqueidentifier`, fixed-length `char(N)` / `nchar(N)` / `binary(N)`, and identity columns.
77
+
- Pattern matching (`LIKE`) and `CONVERT`.
78
+
- Cross-category `Promote` for `varchar` ↔ `nvarchar` and integer ↔ string. Only CAST works for those pairs.
79
+
- EF Core compatibility: the SqlServer provider downcasts `DbParameter` to `SqlParameter` for some mappings — `DateTime → date`, `DateTime → smalldatetime`, `DateOnly`, `TimeOnly`, `TimeSpan` all break at SaveChanges. See `SimulatedDbParameter` for the matrix; a `SqlServerSimulator.EFCore` adapter package is planned to close the gap.
80
+
- CAST to a smaller `varchar`/`nvarchar` than the value renders: SQL Server silently truncates; the simulator returns the full string.
81
+
- Heap allocation tracking (IAM/PFS): the page list is flat.
0 commit comments