Conversation
…regate group filtering. The new docs outline the implementation of computed query fields, fluent datatype-aware property methods, and introduce a separate design for aggregate group filtering with HAVING semantics.
Add fluent expression methods on property proxies (.plus(), .strlen(), .gt(), etc.) for computed SELECT projections and expression-based WHERE filters. Add Expr module for standalone expressions (Expr.now(), Expr.ifThen(), Expr.firstDefined()). Add expression-based mutations via callback form. Includes shared createTraversalResolver factory, README documentation, comprehensive test coverage (821 tests passing), and cleanup of stale changesets already processed on dev. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite expression sections for clarity — lead with what users can do,
move method reference to a table, drop SPARQL jargon. Update shape
examples to use schema.Person dot notation instead of schema('Person')
function calls. Add schema.org ontology file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace fake schema.org ontology with honest example using
createNameSpace('https://example.org/') and an ex object pattern.
Delete src/ontologies/schema.ts — the library doesn't ship schema.org.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
flyon
added a commit
that referenced
this pull request
Mar 12, 2026
Properties in select() and update() now support expressions — you can compute values dynamically instead of just reading or writing raw fields.
Computed fields in queries — chain methods like .strlen(), .times(), .ucase(), .year() on properties inside select() to derive new values on the fly
Expression-based WHERE filters — filter using computed conditions (p.name.strlen().gt(5)), not just equality. Works on queries, updates, and deletes
Computed updates — calculate new values from existing ones in update queries (p.age.plus(1)) instead of providing static values
Expr module — standalone expressions that don't start from a property: Expr.now(), Expr.ifThen(), Expr.firstDefined()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Properties in
select()andupdate()now support expressions — you can compute values dynamically instead of just reading or writing raw fields..strlen(),.times(),.ucase(),.year()on properties insideselect()to derive new values on the flyp.name.strlen().gt(5)), not just equality. Works on queries, updates, and deletesp.age.plus(1)) instead of providing static valuesExprmodule — standalone expressions that don't start from a property:Expr.now(),Expr.ifThen(),Expr.firstDefined()Also removes stale changesets already processed on dev, and extracts a shared
createTraversalResolverfactory from 4 duplicated traversal implementations.Test plan
🤖 Generated with Claude Code