Skip to content

Add eachGreaterThan / eachLessThan / eachGreaterThanOrEqual / eachLessThanOrEqual operators - #46

Merged
kudima03 merged 2 commits into
mainfrom
feat/each-comparison-operators
May 25, 2026
Merged

Add eachGreaterThan / eachLessThan / eachGreaterThanOrEqual / eachLessThanOrEqual operators#46
kudima03 merged 2 commits into
mainfrom
feat/each-comparison-operators

Conversation

@kudima03

Copy link
Copy Markdown
Owner

Summary

  • Adds five new definitions to definitions/comparisons: numericArrayComparison, stringArrayComparison, dateArrayComparison, datetimeArrayComparison, timeArrayComparison — each takes an *ArrayReturning left operand and a matching single-value-returning right operand with the four each* operators.
  • Registers all five in definitions/comparison.oneOf, making the new operators available in where, having, and join.on without further changes.
  • Adds samples/13_range_filter.json demonstrating eachGreaterThan on total (number) and eachLessThan on created_at (datetime) in the same where clause.
  • Documents the new operators in README.md.

Closes #24

Test plan

  • All 13 samples validate against the updated schema (python3 -c "import json, jsonschema, glob; spec = json.load(open('PureQL-Specification.json')); [jsonschema.validate(json.load(open(f)), spec) for f in sorted(glob.glob('samples/*.json'))]")
  • CI passes

kudima03 added 2 commits May 20, 2026 11:48
…urning

Establishes per-row predicates as a type-distinct family separate from
single-value boolean expressions:

- New operators: eachEqual (7 types), eachAnd, eachOr, eachNot
- each* expressions now return booleanArrayReturning (was booleanReturning)
- each* right operand accepts *Returning or *ArrayReturning, enabling
  per-row field-to-field comparisons without aggregates
- where and joinItem.on broadened to accept booleanArrayReturning
- having unchanged: structurally rejects per-row predicates,
  fixing accidental validation of non-aggregated fields in HAVING

Sample migrations move field-to-literal filtering from arrayEquality
(single-element array wrap) to eachEqual (unwrapped scalar). Three new
samples cover field-to-field range comparison, the eachNot(eachEqual)
not-equal idiom, and mixed-type eachAnd/eachOr composition.

Version bump 0.1.0-preview.0.1.0 -> 0.1.0-preview.0.2.0. CHANGELOG entry
includes detailed interpreter notes covering dispatch on the new oneOf
slots and the each* polymorphism.
@kudima03 kudima03 self-assigned this May 25, 2026
@kudima03
kudima03 merged commit b3afc5a into main May 25, 2026
1 check passed
@kudima03
kudima03 deleted the feat/each-comparison-operators branch May 25, 2026 11:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add eachGreaterThan / eachLessThan / eachGreaterThanOrEqual / eachLessThanOrEqual operators

1 participant