Skip to content

feat(electric-db-collection): DNF/active_conditions support#1270

Open
kevin-dp wants to merge 3 commits intomainfrom
feat/dnf-active-conditions
Open

feat(electric-db-collection): DNF/active_conditions support#1270
kevin-dp wants to merge 3 commits intomainfrom
feat/dnf-active-conditions

Conversation

@kevin-dp
Copy link
Contributor

Summary

  • Adds support for the new Electric server wire protocol (electric-sql/electric#3791) which enables arbitrary boolean WHERE clauses with OR/NOT and multiple subqueries
  • Changes tag delimiter from | to / and replaces _ wildcards with empty segments (NON_PARTICIPATING positions)
  • Adds active_conditions header support: shapes with subquery dependencies use DNF evaluation (row visible if ANY disjunct has ALL its positions satisfied), simple shapes retain existing empty-tag-set deletion behavior
  • Derives disjunct_positions once per shape (global) rather than per-row, since the DNF structure is fixed by the WHERE clause

Test plan

  • Updated all existing tag tests to use new / delimiter and empty-segment syntax
  • Added 7 new test cases covering DNF scenarios: partial deactivation, full deactivation, multi-disjunct visibility, active_conditions overwrite on re-send, simple shapes without active_conditions, and mixed rows
  • Full test suite passes (419 tests, 0 failures, no type errors)

🤖 Generated with Claude Code

…rbitrary boolean WHERE clauses

Support the new Electric server wire protocol (PR electric-sql/electric#3791):
- Change tag delimiter from `|` to `/`, replace `_` wildcards with empty
  segments (NON_PARTICIPATING positions)
- Add `active_conditions` header support for DNF visibility evaluation
- Shapes with subquery dependencies use DNF: a row is visible if ANY
  disjunct has ALL its positions satisfied in active_conditions
- Simple shapes (no subquery dependencies) retain existing behavior:
  row deleted when tag set becomes empty
- Derive disjunct_positions once per shape (not per-row like the Elixir
  client) since the DNF structure is fixed by the WHERE clause

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@changeset-bot
Copy link

changeset-bot bot commented Feb 19, 2026

🦋 Changeset detected

Latest commit: d637d0f

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

This PR includes changesets to release 3 packages
Name Type
@tanstack/electric-db-collection Minor
@tanstack/db-example-react-todo Patch
@tanstack/db-example-solid-todo 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 19, 2026

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: d637d0f

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

Size Change: 0 B

Total Size: 92.1 kB

ℹ️ 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/index.js 4.09 kB
./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 1.81 kB
./packages/db/dist/esm/query/compiler/index.js 2.02 kB
./packages/db/dist/esm/query/compiler/joins.js 2.11 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.45 kB
./packages/db/dist/esm/query/compiler/select.js 1.06 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB
./packages/db/dist/esm/query/ir.js 673 B
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-config-builder.js 5.44 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 19, 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

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

Comments