Skip to content

Support parent-referencing WHERE filters in includes child queries#1307

Open
kevin-dp wants to merge 8 commits intokevin/includesfrom
kevin/includes-arbitrary-correlation
Open

Support parent-referencing WHERE filters in includes child queries#1307
kevin-dp wants to merge 8 commits intokevin/includesfrom
kevin/includes-arbitrary-correlation

Conversation

@kevin-dp
Copy link
Contributor

Summary

  • Allow child queries in includes to have additional WHERE clauses that reference parent fields (e.g., eq(i.createdBy, p.createdBy)), beyond the single correlation eq()
  • When no parent-referencing filters exist, behavior stays exactly as-is with zero overhead
  • Parent-referencing WHEREs are detected in the builder, parent fields are projected into the key stream, and filters are re-injected into the child query where parent context is available

Test plan

  • Basic parent-referencing filter: correlation eq(i.projectId, p.id) + filter eq(i.createdBy, p.createdBy) — only matching issues appear
  • Reactivity — parent field change: updating p.createdBy causes child results to update
  • Reactivity — child field change: updating i.createdBy causes issue to appear/disappear
  • Mixed filters: parent-referencing WHERE + pure-child WHERE both apply correctly
  • All existing includes tests pass (no regression)

🤖 Generated with Claude Code

@changeset-bot
Copy link

changeset-bot bot commented Feb 26, 2026

🦋 Changeset detected

Latest commit: b8dee2a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 12 packages
Name Type
@tanstack/db Patch
@tanstack/angular-db Patch
@tanstack/electric-db-collection Patch
@tanstack/offline-transactions Patch
@tanstack/powersync-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db Patch
@tanstack/rxdb-db-collection Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Feb 26, 2026

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1307

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1307

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1307

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1307

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1307

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1307

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1307

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1307

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1307

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1307

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1307

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1307

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1307

commit: b8dee2a

@github-actions
Copy link
Contributor

github-actions bot commented Feb 26, 2026

Size Change: +828 B (+0.86%)

Total Size: 96.8 kB

Filename Size Change
./packages/db/dist/esm/query/builder/index.js 5.07 kB +489 B (+10.68%) ⚠️
./packages/db/dist/esm/query/compiler/index.js 2.88 kB +318 B (+12.44%) ⚠️
./packages/db/dist/esm/query/ir.js 759 B +21 B (+2.85%)
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.39 kB
./packages/db/dist/esm/collection/changes.js 1.22 kB
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.32 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.75 kB
./packages/db/dist/esm/collection/mutations.js 2.34 kB
./packages/db/dist/esm/collection/state.js 3.49 kB
./packages/db/dist/esm/collection/subscription.js 3.71 kB
./packages/db/dist/esm/collection/sync.js 2.41 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.7 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.69 kB
./packages/db/dist/esm/indexes/auto-index.js 742 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 2.17 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 538 B
./packages/db/dist/esm/local-only.js 808 B
./packages/db/dist/esm/local-storage.js 2.1 kB
./packages/db/dist/esm/optimistic-action.js 359 B
./packages/db/dist/esm/paced-mutations.js 496 B
./packages/db/dist/esm/proxy.js 3.75 kB
./packages/db/dist/esm/query/builder/functions.js 733 B
./packages/db/dist/esm/query/builder/ref-proxy.js 1.05 kB
./packages/db/dist/esm/query/compiler/evaluators.js 1.43 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 2.24 kB
./packages/db/dist/esm/query/compiler/joins.js 2.11 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.5 kB
./packages/db/dist/esm/query/compiler/select.js 1.11 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-config-builder.js 7.7 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 2.42 kB
./packages/db/dist/esm/query/live/internal.js 145 B
./packages/db/dist/esm/query/optimizer.js 2.62 kB
./packages/db/dist/esm/query/predicate-utils.js 2.97 kB
./packages/db/dist/esm/query/subset-dedupe.js 921 B
./packages/db/dist/esm/scheduler.js 1.3 kB
./packages/db/dist/esm/SortedMap.js 1.3 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 247 B
./packages/db/dist/esm/strategies/queueStrategy.js 428 B
./packages/db/dist/esm/strategies/throttleStrategy.js 246 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 924 B
./packages/db/dist/esm/utils/browser-polyfills.js 304 B
./packages/db/dist/esm/utils/btree.js 5.61 kB
./packages/db/dist/esm/utils/comparison.js 952 B
./packages/db/dist/esm/utils/cursor.js 457 B
./packages/db/dist/esm/utils/index-optimization.js 1.51 kB
./packages/db/dist/esm/utils/type-guards.js 157 B

compressed-size-action::db-package-size

@github-actions
Copy link
Contributor

github-actions bot commented Feb 26, 2026

Size Change: 0 B

Total Size: 3.7 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js 1.34 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 559 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

kevin-dp and others added 6 commits February 26, 2026 13:53
Allow child queries to have additional WHERE clauses that reference
parent fields (e.g., eq(i.createdBy, p.createdBy)) beyond the single
correlation eq(). Parent-referencing WHEREs are detected in the builder,
parent fields are projected into the key stream, and filters are
re-injected into the child query where parent context is available.
When no parent-referencing filters exist, behavior is unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When users write a single .where() with and(eq(i.projectId, p.id), ...),
the correlation eq() is now found and extracted from inside the and().
The remaining args stay as WHERE clauses. This means users don't need
to know that the correlation must be a separate .where() call.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.

1 participant