Commit Graph

91 Commits

Author SHA1 Message Date
cf3cabd1f5 queryer: typed filter conditions for float and jsonb columns — (a) float4/float8 (the pg typnames that actually arrive in field_types; 'real'/'double precision' never do) now cast the parameter ::numeric, fixing 'double precision >= text' on $gt/$gte/etc; (b) jsonb columns compile explicitly: array-valued properties (tag lists) get CONTAINMENT semantics ($eq→?, $ne→NOT ?, $of→?|, $nof→NOT ?|), non-array jsonb compares ::jsonb for $eq/$ne, and unsupported operators are a loud QUERY_COMPILATION_FAILED naming the property instead of a runtime SQL type error ('jsonb = text'). compile_filter_conditions now returns Result. New fixture case (float8 $gte + jsonb array $eq/$of); 1279 tests green. Unblocks agreego TestListVendors_FilterByTrade/FilterByRating. 2026-07-07 20:54:52 -04:00
d608f5e963 filter synthesis: omit Field-Backed JSONB Bubbles from Composed Filter References — only Table-Backed boundaries have a synthesized .filter to proxy to; a dangling proxy reference breaks downstream code generators consuming the exported registry. Fixture pins a bubble-typed property: omitted from the filter, raw schemas promoted, no phantom .filter. 2026-07-07 13:39:03 -04:00
edd0dd4763 jspg cleanup 2026-07-07 12:42:05 -04:00
abf1d12e43 test: mock matcher understands UNION existence reads; revive dead update-path mocks
parse_and_match_mocks matched mock.type against only the first FROM table —
always 'entity' for hierarchy existence reads — so every merger update-case
mock was silently inert and those cases snapshotted the create path. Now each
UNION arm is matched independently (a mock matching any arm returns once,
mirroring UNION dedup) and the type check accepts any FROM/JOIN table.

Regenerated the five revived cases (their snapshots now show real update /
no-op replace / archive semantics) and added the two previously untestable
probe-disagreement cases: same-row dedup (updates, no error) and id-vs-lookup
conflict (TOO_MANY_LOOKUP_ROWS).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:05:21 -04:00
d9b4f417f6 merger existence read: UNION the id and lk-lookup probes instead of OR-ing them across the hierarchy join — the OR is un-indexable and full-scans the subtype table on every child merge (one scan per relationship-edge write; surfaced by Castleberry onboarding); each UNION arm uses its own index (pk / lk_) and dedup preserves TOO_MANY_LOOKUP_ROWS semantics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 20:52:29 -04:00
03a871bc1a filter synthesis: named value types get their own synthesized, referenced filter
Supersedes the inline-structural approach (0d282cc): inlining erased the value
type's name, so identical nested shapes (weekly_hours at two paths) generated
duplicate leaf types downstream and Dart barrel exports collided. Now a named
non-table value type's filter is synthesized ONCE (like table-backed boundaries)
and property references point at it — mirroring how the entity side generates
one class per named type. Same filter-by-fields capability; laziness also
removes the structural-recursion hazard. A named type with no compilable
structure still gets no filter and is omitted rather than dangled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 20:04:16 -04:00
0d282cc930 filter synthesis: compile named non-table value types structurally
A property typed as a named value type (a schema-only config object like
an operating-hours schedule) previously got a dangling {type}.filter
reference — no filter is ever synthesized for a non-table-backed schema,
so the whole parent filter failed downstream (PROXY_TYPE_RESOLUTION_FAILED;
the punc generator emitted an empty filter type).

Naming a value type is a reuse choice, not a semantics choice: it now
compiles structurally into the parent filter, exactly like an inline
object, recursively (including array items). Table-backed boundaries keep
the lazy {type}.filter reference. A named type with no compilable
structure is omitted instead of dangling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 19:23:54 -04:00
e026e82f65 test(jspg): rename items fixture to array and resolve unused HashMap warning
- Rename fixtures/items.json to fixtures/array.json to better reflect array testing constraints.
- Update reference paths in src/tests/fixtures.rs and across other fixture JSON files.
- Remove unused HashMap import in src/validator/rules/dict.rs to resolve the compiler warning.
2026-06-23 20:17:03 -04:00
a1fb9ef650 jspg checkpoint 2026-06-23 19:48:38 -04:00
b0377e076e drop error improvements across the board for localization 2026-06-23 17:47:19 -04:00
c5d652c6fd fixed merger ordering issue 2026-06-15 16:41:59 -04:00
5af2399e3b fixed issue with filter generation where filters or conditions are used internally 2026-06-11 20:40:27 -04:00
813e9ff3c2 more executor reverts 2026-06-11 17:37:34 -04:00
7e28eb2645 added kind to merge notifications, re-instated sql pattern matching 2026-06-11 17:26:07 -04:00
c71e99527d dynamic type variables now recursive 2026-06-03 10:50:15 -04:00
ea03584bbd re-applied fix for family in conditions 2026-05-28 14:54:57 -04:00
ccca9129b2 added uuid.condition to filters 2026-05-21 19:03:31 -04:00
b0fc6c12ef fixed queryer issue with nested families 2026-05-21 13:26:07 -04:00
56775c8c1b added traits and include features with docs 2026-05-20 19:10:29 -04:00
2a8b991269 fixed ordering of all things sql 2026-05-14 05:58:38 -04:00
3034406706 fixing ordering checkpoint 2026-05-14 03:21:12 -04:00
c129864c89 fixed another org id issue with merger 2026-05-13 16:31:06 -04:00
40e08cbf09 proper test for merge fix for organization_id setting 2026-05-13 15:38:42 -04:00
1fb378def2 fixed issue with STI on non-tables 2026-05-12 08:22:25 -04:00
98e7f5da12 fixed oneOf case queryer issue with resolving the table alias 2026-04-28 15:07:01 -04:00
c8757e1709 added filter base type 2026-04-24 12:53:28 -04:00
ec867f142f fixed more filtering issues and promoted enum condition generation 2026-04-24 11:53:54 -04:00
0093aea790 fixed nested filters 2026-04-24 10:48:38 -04:00
4e2cb488cc removed schema realms, fixed fixture generations, added dynamic type resolution for validation based on type and kind discriminators for filters 2026-04-21 10:50:01 -04:00
f450f8ab8b added realm to jspg processing 2026-04-17 18:25:14 -04:00
8ebf6a69bf updates 2026-04-17 17:20:07 -04:00
69bd726b25 more filter fixes 2026-04-17 07:43:19 -04:00
509194b55f in, nin to of, nof for go and dart generator compatibility 2026-04-17 02:24:03 -04:00
87a845e85a filters are now entities and auto-generated for all table backed types 2026-04-17 01:46:02 -04:00
41649766db to family 2026-04-16 11:54:37 -04:00
77af67aef5 beefed up schema compiled properties with cases properties and added tests with cases to queryer and merger 2026-04-16 11:00:26 -04:00
d3cb72a5e2 -m fixed bug with STI and different type shapes that don't require kind discrimination 2026-04-16 00:19:10 -04:00
a3bd79deef jspg stabilized again 2026-04-15 03:08:11 -04:00
8984acaa5f added jsonb field tests to queryer and merger and fixed a bug there 2026-04-14 13:23:01 -04:00
0b4607b7d4 fixed and tested subschema promotions for beat processing 2026-04-14 06:09:00 -04:00
0017c598e1 chore: JSPG Engine tuple decoupling and core routing optimizations 2026-04-13 22:41:32 -04:00
be78af1507 more tests 2026-04-10 01:06:02 -04:00
3cca5ef2d5 checkpoint 2026-04-09 19:55:35 -04:00
5f45df6c11 checkpoint 2026-04-09 18:39:52 -04:00
7c8df22709 massively improves the jspg validator by removing mathmatical functions like allOf, anyOf, ref, etc to effectively use discriminators and OOP with types to determine valid pathing an nno intersections, unions, or guesswork; added cases to replace the former conditionals 2026-04-08 13:08:24 -04:00
e4286ac6a9 validation progress 2026-04-03 19:24:21 -04:00
ee8c9086ef added more detail to show fks that are wrong 2026-04-03 01:09:48 -04:00
7876567ae7 fixed queryer relation issues 2026-04-02 22:51:13 -04:00
06f6a587de progress 2026-04-02 21:55:57 -04:00
ebcdb661fa maybe working 2026-03-27 19:13:44 -04:00