Commit d35ad79
feat(conformance): Phase B Unit 3 — Java read-path (temporal + projection)
Make Java's persistence-conformance pass the Phase B temporal + projection
scenarios against Testcontainers Postgres, matching the cross-port canonical
wire contract (fixtures/persistence-conformance/normalization.md). All work is
in the integration-tests runner — OMDB's generic metadata-driven read path is
unchanged.
Normalization.java:
- TIME → "HH:MM:SS" (LocalTime/Time.toString() elided whole-second :00).
- DATE → "YYYY-MM-DD" via an explicit formatter; added a java.util.Date branch
(OMDB's DateField codec stores a DATE column as a midnight-anchored
java.util.Date, which previously fell through to Date.toString()).
- TIMESTAMPTZ → "...Z": added an OffsetDateTime branch that renders the UTC
instant with a Z suffix; plain TIMESTAMP (Timestamp/LocalDateTime) renders
with no Z. java.sql.Timestamp is matched before the generic java.util.Date
branch (both extend java.util.Date).
ObjectManagerDbAdapter.java — coerceWireType reconciles OMDB's MetaField-typed
value with the ACTUAL SQL column type (the wire shape is column-driven, not
field.*-driven):
- tz-flagged field.timestamp (@dbColumnType: timestamp_with_tz) → surface as
an OffsetDateTime in UTC so Normalization appends Z. OMDB reads both plain
and tz timestamps as the same java.sql.Timestamp and cannot tell them apart.
- aggregate MIN/MAX(int) are declared field.long but are INTEGER view columns:
INTEGER → JSON number, BIGINT → JSON string. OMDB reads both as Long; narrow
to Integer when the catalog reports INTEGER/SMALLINT so the number form wins.
QueryScenarioRunner.java — probe each entity's primary relation (table or view)
column SQL types once via ResultSetMetaData (SELECT * ... WHERE 1=0), cached per
MetaObject, and thread the map into the adapter.
3 new query scenarios (normalization-wire-types, projection-passthrough,
projection-aggregates) + the Unit-1-updated existing ones now pass. Full Java
integration suite green: NormalizationFloatTest 4, QueryScenarioTests 14,
ApiContractConformanceTest 20 = 38, BUILD SUCCESS. No shared fixtures edited.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 80f4423 commit d35ad79
3 files changed
Lines changed: 123 additions & 11 deletions
File tree
- server/java/integration-tests/src/test/java/com/metaobjects/integration
Lines changed: 28 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
36 | 42 | | |
37 | 43 | | |
38 | 44 | | |
| |||
53 | 59 | | |
54 | 60 | | |
55 | 61 | | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
60 | 71 | | |
61 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
62 | 85 | | |
63 | 86 | | |
64 | 87 | | |
| |||
Lines changed: 56 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
| |||
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
42 | | - | |
| 44 | + | |
| 45 | + | |
43 | 46 | | |
44 | 47 | | |
45 | 48 | | |
| |||
53 | 56 | | |
54 | 57 | | |
55 | 58 | | |
56 | | - | |
| 59 | + | |
57 | 60 | | |
58 | 61 | | |
59 | 62 | | |
| |||
221 | 224 | | |
222 | 225 | | |
223 | 226 | | |
224 | | - | |
| 227 | + | |
| 228 | + | |
225 | 229 | | |
226 | 230 | | |
227 | | - | |
| 231 | + | |
| 232 | + | |
228 | 233 | | |
229 | 234 | | |
230 | 235 | | |
231 | 236 | | |
232 | | - | |
| 237 | + | |
233 | 238 | | |
234 | 239 | | |
235 | 240 | | |
236 | 241 | | |
237 | 242 | | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
238 | 289 | | |
239 | 290 | | |
240 | 291 | | |
| |||
Lines changed: 39 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
16 | 18 | | |
17 | 19 | | |
| 20 | + | |
| 21 | + | |
18 | 22 | | |
19 | 23 | | |
20 | 24 | | |
| |||
60 | 64 | | |
61 | 65 | | |
62 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
63 | 72 | | |
64 | 73 | | |
65 | 74 | | |
66 | 75 | | |
67 | 76 | | |
68 | 77 | | |
69 | | - | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
70 | 81 | | |
71 | 82 | | |
72 | 83 | | |
73 | 84 | | |
74 | 85 | | |
75 | 86 | | |
76 | 87 | | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
77 | 115 | | |
78 | 116 | | |
79 | 117 | | |
| |||
0 commit comments